亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將值傳遞到循環中時遇到麻煩

將值傳遞到循環中時遇到麻煩

慕雪6442864 2022-09-14 10:46:22
如果文本文件由一行數字組成,下面的代碼可以完全正常運行,但是一旦它到達例如一行說“我是40”,它就會跳過它,而不是將40放入數組中。Scanner inFile = null;    File file = null;    String filePath = (JOptionPane.showInputDialog("Please enter a file path"));    int size = 0;    int[] result = new int[10];    try {        file = new File(filePath);        inFile = new Scanner(file);        int skippedCounter = 0;        for(int i = 0; inFile.hasNext(); i++){            if(inFile.hasNextInt())                result[i] = inFile.nextInt();            else{                String strOut = "";                String data = inFile.next();                for(int j = 0; j <= data.length() - 1; j++){                    if(!Character.isLetter(data.charAt(j))){                        strOut += data.charAt(j);                    }                    else                        skippedCounter++;                }                result[i] = Integer.parseInt(strOut);            }        }    }
查看完整描述

3 回答

?
DIEA

TA貢獻1820條經驗 獲得超3個贊

next()將為您提供下一個令牌,而不是下一行。所以變量可能會超過十。如果你沒有一個空的捕獲,你會意識到這一點:你的數組正在越界i

溶液:

不要使用結果數組,使用結果列表,并在有其他結果時追加到其末尾

注意:

另一個可能發生的隱藏異常是,當您的 parseInt 由于非數字數據而失敗時。因此,不要將所有內容都包裝在巨大的嘗試/捕獲中,這只會使調試變得更加困難!


查看完整回答
反對 回復 2022-09-14
?
萬千封印

TA貢獻1891條經驗 獲得超3個贊

我建議你只使用一次nextInt函數來保留請求的值,然后在需要時使用該變量。我認為 nextInt 函數會在每次調用它時移動到下一個 int。


查看完整回答
反對 回復 2022-09-14
?
慕妹3242003

TA貢獻1824條經驗 獲得超6個贊

以下

result[i] = Integer.parseInt(strOut)

將導致 在嘗試處理任何信件時出現 。作為空字符串中的結果NumberFormatExceptionstrOut""

在嘗試解析之前,您必須檢查空字符串

if (!strOut.isEmpty()) {
    result[i] = Integer.parseInt(strOut);
}


查看完整回答
反對 回復 2022-09-14
  • 3 回答
  • 0 關注
  • 104 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號