繁体   English   中英

isDigit方法中的Character.isDigit参数和行不可用错误(说明)

[英]Character.isDigit parameters and line unavailable errors within the isDigit method (clarification)

我目前正在为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");
        }
    }
}

任何帮助将不胜感激,我目前很茫然。

当您输入一个非数字字符时,例如说a ,将执行while循环内的else分支,增加count ,对吗? 然后循环将开始新的迭代,对吗?

在此新迭代中, intSeparator.hasNext()仍返回true。 为什么? 因为输入a不会被扫描程序读取(与您输入数字不同, intSeparator.nextInt将调用intSeparator.nextInt并消耗了输入)。

现在count1并且是1个字符的字符串的无效索引。 因此, numbers.charAt(count)引发异常。

如果您break;可以避免这种情况break; 在else块中立即退出循环:

else
{
    inputError = true;
    break;
}

另外,请勿close scan仪。 scan连接到System.in流。 您没有打开该流,所以不要自己关闭它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM