character.isdigit参数和行不可用错误(澄清)

mwngjboj  于 2021-07-12  发布在  Java
关注(0)|答案(1)|浏览(392)

我目前正在为一个java入门类做一个小项目。我们应该制作一个程序,从用户那里接收一个整数,然后输出代码中出现的赔率、偶数和零的数目。这对我来说似乎很容易,我成功地实现了代码,但一位同学在我批评他的代码错误地遵循了提示后指出,如果输入的不是数字,我的代码就会崩溃。
尽管如此,我还是试图超越提示,让程序在遇到数字以外的字符时输出错误消息(而不是让编译器返回错误)。但是,在character类中使用isdigit方法时,我在eclipse编译器中返回了多个错误。
我不知道到底是什么原因导致了这个错误,我觉得我一定错过了一些关键的东西,但是我的老师很坦率地说,没有足够的资格去理解是什么原因导致了这个错误,而且我的同学似乎也没有一个能弄清楚。

package ppCH5;
import java.util.Scanner;

public class PP5_3
{
    public static void main(String[]args)
    {   
        int even = 0;
        int odd = 0;
        int zero = 0;
        int num = 0;
        int count = 0;

        boolean inputError = false;
        System.out.println("please provide some integer");
        Scanner scan = new Scanner(System.in);
        String numbers = scan.next();
        scan.close();
        Scanner intSeperate = new Scanner(numbers);
        intSeperate.useDelimiter("");

        while(intSeperate.hasNext())
        {
                if(Character.isDigit(numbers.charAt(count)))
                {
                    count++;
                    num = intSeperate.nextInt();
                    if((num % 2)==1)
                        odd++;
                    if((num % 2)==0)
                        if(num==0)
                            zero++;
                        else
                            even++;
                }
                else
                {
                    count++;
                    inputError = true;
            }
        }
        intSeperate.close();
        if(!inputError)
        {
            System.out.println("There are " + even + " even digits.\n" + odd     + " odd digits.\nAnd there are " + zero + " zeros in that integer.");
        }
        else
        {
            System.out.println("You have provided a disallowed input");
        }
    }
}

任何帮助都将不胜感激,我现在不知所措。

yfjy0ee7

yfjy0ee71#

输入单个非数字字符时,请说 a ,的 else while循环中的分支将被执行,递增 count ,对吧?然后循环将开始一个新的迭代,对吗?
在这个新的迭代中, intSeparator.hasNext() 仍然返回true。为什么?因为输入 a 从不被扫描仪读取(与输入数字不同, intSeparator.nextInt 将被调用并将消耗输入)。
现在 count1 是1个字符字符串的无效索引。因此, numbers.charAt(count) 引发异常。
如果您 break; 立即在else块中退出循环:

else
{
    inputError = true;
    break;
}

另外,不要 close 这个 scan 扫描仪。 scan 已连接到 System.in 溪流。你没有打开那条小溪,所以不要自己关上它。

相关问题