簡體   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