首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Binary to String -大数.StringIndexOutOfBounds上的错误

Binary to String -大数.StringIndexOutOfBounds上的错误
EN

Stack Overflow用户
提问于 2016-09-12 03:26:50
回答 1查看 752关注 0票数 1

我正在做一些在线编码项目,试图学习编程和提高我的技能。当前项目的目标是以二进制形式找出哪个基数2的数字与另一个数字首先匹配。我可能没有正确解释这一点。

例如,如果我的二进制字符串是10010和10011,答案将是2,但如果我有11111和10000,答案将是16。我的以下代码适用于它运行的前4个测试,但在第五个测试中,它抛出一个.StringIndexOutOfBounds -传递给我的方法的最后一个测试的样本数据是n= 1073741824 &m= 1006895103。我认为这可能是关于charAt()的大小或限制的问题,但不是很确定……任何建议都将不胜感激。代码如下:

代码语言:javascript
复制
int equalPairOfBits(int n, int m) {
        String theN = Integer.toBinaryString(n);
        String theM = Integer.toBinaryString(m);
        int pos = 0;
        int nLen = theN.length();
        int mLen = theN.length();
        char[] nArray = new char[nLen];
        char[] mArray = new char[mLen];

        for(int i = nLen - 1; i > -1; i--){
            nArray[i] = theN.charAt(i);
        }
        for(int i = mLen - 1; i > -1; i--){
            mArray[i] = theM.charAt(i);
        }
        boolean isSame = false;
        for(int i = nLen - 1; i > -1; i--){
                if(nArray[i] == mArray[i] && isSame == false)
                {
                    pos = i;
                    isSame = true;
                }

        }
        pos = nLen - pos;
        int mult = 1;
        for(int i = 1; i < pos; i++){
            if(pos == 0)
                mult = 1;
            else
                mult = mult * 2; 
        }
        return mult;
    }

我得到的错误是:

代码语言:javascript
复制
Exception in thread "main" java.lang.AssertionError: java.lang.reflect.InvocationTargetException
    at myCode._invoke(file.java on line ?)
    at myCode.main(file.java on line ?)
Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at myCode._invoke(file.java on line ?)
    ... 1 more
Caused by: java.lang.ArrayIndexOutOfBoundsException: 30
    at _runppnqw.equalPairOfBits(file.java on line 18)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-12 03:31:51

你的问题在这里

int mLen = theN.length();应使用theM

如果theM字符串的长度小于theN,则当您迭代超过theM字符串的长度时,将出现索引越界异常

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39439846

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档