![](/img/trans.png)
[英]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.