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

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

使用 BigInteger 獲取錯誤“變量 veryFar 可能尚未初始化”

使用 BigInteger 獲取錯誤“變量 veryFar 可能尚未初始化”

慕田峪7331174 2022-12-21 13:01:38
我正在制作一個將數字轉換為文本的轉換器。我按照本網站中所說的進行了所有操作,并針對使用大整數進行了編輯,但隨后顯示變量未初始化。我編輯了一些東西以使其與大整數兼容以獲得更大的數字,但它只是顯示變量 veryFar 可能未初始化。(我編輯了變量名來嘗試修復它?。?。package com.example.convertnumbertotext;import java.math.BigInteger;import java.text.DecimalFormat;public class EnglishNumberToWords {    private static BigInteger bi = new BigInteger("100");    private static BigInteger bi2 = new BigInteger("20");    private static BigInteger bi3 = new BigInteger("10");    private static final String[] tensNames = { "", " ten", " twenty", " thirty", " forty",            " fifty", " sixty", " seventy", " eighty", " ninety" };    private static final String[] numNames = { "", " one", " two", " three", " four", " five",            " six", " seven", " eight", " nine", " ten", " eleven", " twelve", " thirteen",            " fourteen", " fifteen", " sixteen", " seventeen", " eighteen", " nineteen" };    private static String convertLessThanOneThousand(BigInteger number) {        String veryFar;        BigInteger[] bii = number.divideAndRemainder(bi);        BigInteger[] bii2 = number.divideAndRemainder(bi3);        int resut = bii[1].compareTo(bi2);        if (resut == -1) {            veryFar = numNames[bii[1].intValue()];            number = number.divide(bi);        } else if (resut == 1 || resut == 0) {            veryFar = numNames[bii2[1].intValue()];            number = number.divide(bi3);            veryFar = tensNames[bii2[1].intValue()] + veryFar;            number = number.divide(bi3);        }        if (number.compareTo(BigInteger.valueOf(0)) == 0)            return veryFar;            return numNames[number.intValue()] + " hundred" + veryFar;    }}它顯示 2 條相同的錯誤消息 - 錯誤:變量 veryFar 可能尚未初始化 錯誤:變量 veryFar 可能尚未初始化
查看完整描述

2 回答

?
慕哥9229398

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

修剪下來,你有這個代碼:


String veryFar;

...

if (resut == -1) {

    veryFar = numNames[bii[1].intValue()];

    ...

} else if (resut == 1 || resut == 0) {

    veryFar = numNames[bii2[1].intValue()];

    ...

}

如果結果不是 -1、0 或 1,則不會執行這些塊。在那種情況下,veryFar永遠不會被賦值。


要么在聲明它時對其進行初始化(如String veryFar = null),要么添加一個else為其賦值的案例。


查看完整回答
反對 回復 2022-12-21
?
桃花長相依

TA貢獻1860條經驗 獲得超8個贊

請注意,合同compareTo是返回<0, 0or >0, not -1 , 0or 1。


比較 -1 和 1 exactly 有時可能有效,但它通常不起作用(例如,它不適用于比較字符串),并且容易受到類內部實現細節變化的影響。


因此,將您的條件更改為:


if (resut < 0) { // instead of == -1

  // ...

} else { // instead of == 0 || == 1

  // ...

}

然后你的變量將始終被初始化。


查看完整回答
反對 回復 2022-12-21
  • 2 回答
  • 0 關注
  • 160 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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