[英]Character.isDigit() error: no suitable method found for isDigit(String)
[英]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
并消耗了输入)。
现在count
为1
并且是1个字符的字符串的无效索引。 因此, numbers.charAt(count)
引发异常。
如果您break;
可以避免这种情况break;
在else块中立即退出循环:
else
{
inputError = true;
break;
}
另外,请勿close
scan
仪。 scan
连接到System.in
流。 您没有打开该流,所以不要自己关闭它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.