我目前正在为一个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");
}
}
}
任何帮助都将不胜感激,我现在不知所措。
1条答案
按热度按时间yfjy0ee71#
输入单个非数字字符时,请说
a
,的else
while循环中的分支将被执行,递增count
,对吧?然后循环将开始一个新的迭代,对吗?在这个新的迭代中,
intSeparator.hasNext()
仍然返回true。为什么?因为输入a
从不被扫描仪读取(与输入数字不同,intSeparator.nextInt
将被调用并将消耗输入)。现在
count
是1
是1个字符字符串的无效索引。因此,numbers.charAt(count)
引发异常。如果您
break;
立即在else块中退出循环:另外,不要
close
这个scan
扫描仪。scan
已连接到System.in
溪流。你没有打开那条小溪,所以不要自己关上它。