Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ArrayIndexOutOfBounds,同时测试字符是否为int_Java_Tostring_Arrays - Fatal编程技术网

Java ArrayIndexOutOfBounds,同时测试字符是否为int

Java ArrayIndexOutOfBounds,同时测试字符是否为int,java,tostring,arrays,Java,Tostring,Arrays,好了,伙计们,我正在尝试对Java有一个基本的了解,我想我会做一些比平常更复杂的事情。在这个方法中,我尝试首先检查第一个字符是否可以是int,如果可以,我想看看这个数字在输入中会走多远(因此,如果用户输入455+60,我想拔出455并停在+处) 出于某种原因,如果输入为500t,它将正常工作。但是如果索引在数字之后结束(比如输入值只有500),那么它就有问题了。我认为for循环由于某种原因一直在运行。有人能告诉我我在哪里搞砸了吗?我添加了一个if语句,看看是否可以阻止它,但没有用 public

好了,伙计们,我正在尝试对Java有一个基本的了解,我想我会做一些比平常更复杂的事情。在这个方法中,我尝试首先检查第一个字符是否可以是int,如果可以,我想看看这个数字在输入中会走多远(因此,如果用户输入455+60,我想拔出455并停在+处)

出于某种原因,如果输入为500t,它将正常工作。但是如果索引在数字之后结束(比如输入值只有500),那么它就有问题了。我认为for循环由于某种原因一直在运行。有人能告诉我我在哪里搞砸了吗?我添加了一个if语句,看看是否可以阻止它,但没有用

public void init(){
    int chars = 0;
    /*
     * Input fancy intro here.
     */
    clearArray();
    String uInput = getInput();
    rawInput=uInput.toCharArray();
    cleanArray(rawInput);
    try{Integer.parseInt(Character.toString(rawInput[0]));
    boolean isNum = true;
    for(int i=0;isNum==true;i++){
        if(i != rawInput.length){
        try{Integer.parseInt(Character.toString(rawInput[i]));}
        catch (NumberFormatException s){
            isNum = false;
            chars = i;
            System.out.println("The number has: "+chars+" characters.");
        }
        }
        }       
    }
    catch (NumberFormatException s){
        System.out.println("What is this madness?");

    }



}

在这里,您可以避免要求
rawInput[rawInput.length]

if(i != rawInput.length)
。。。但是你要继续进行下一次迭代

你有什么理由不能这么做:

for (int i = 0; i < rawInput.length && isNum; i++)
还请注意,正则表达式可能是解决此问题的更好方法


哦,如果您有一个空字符串,那么此时它将被视为一个数字…

您可以通过在for循环中添加一个额外的检查来解决这个问题,以查看您是否在字符串的末尾。尝试:

for(int i=0;isNum==true && i<rawInput.length;i++){

for(inti=0;isNum==true&&i您可以尝试以下方法:

public int countDigits(String input) {
    int digitsCount = 0;

    for (int i = 0; i < input.length(); ++i) {
        if (Character.isDigit(input.charAt(i))) {
            ++digitsCount;
        } else {
            break;
        }
    }

    return digitsCount;
}
public int countDigits(字符串输入){
int-digitsCount=0;
对于(int i=0;i< /代码>好的,谢谢。我确实需要在中间改变你的循环来做RaviPut.Simult& & ISNUM,不确定我们是否只是在那个版本上使用不同的版本。
public int countDigits(String input) {
    int digitsCount = 0;

    for (int i = 0; i < input.length(); ++i) {
        if (Character.isDigit(input.charAt(i))) {
            ++digitsCount;
        } else {
            break;
        }
    }

    return digitsCount;
}