为了账号安全,请及时绑定邮箱和手机立即绑定

使用 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 关注
  • 107 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信