有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java指令分配一个值,但该值不会在任何后续指令中读取或使用

我有一段代码

for(int i = 0; i < num_of_random; i++){

    String str = in.readLine();
    if(str != null){
        String[] randoms = new String[4];
        randoms = str.split(",");

        dateRanges[i] = Integer.parseInt(randoms[0]);
        id[i] = Integer.parseInt(randoms[1]);
        flag[i] = Integer.parseInt(randoms[2]);
        system[i] = Integer.parseInt(randoms[3]);
    }
}

当我在findBugs上运行这段代码时,我得到了一个关于

“String[]randoms=新字符串[4];”

此指令为局部变量赋值,但该值不会在任何后续指令中读取或使用。通常,这表明存在错误,因为从未使用计算出的值

为什么我会得到这个

非常感谢


共 (4) 个答案

  1. # 1 楼答案

    这是我称之为“我是哑巴”技术的一个例子

    通常,这是程序员编写代码,但不理解他们在做什么的结果。在某个时刻,程序员读到或听到这样的话:“必须初始化所有局部变量!”。当他们编写代码时String[] randoms突然出现在他们的脑海中,于是他们添加了= new String[4]

    一个经验丰富的程序员可能会看到这一点,觉得我以前很笨,但现在不是了!让我们将变量声明移出循环,并生成如下内容:

    String str;
    String[] randoms;
    for(int index = 0; index < num_of_random; ++index)
    {
        str = in.readLine();
        if (str != null)
        {
            randoms = str.split(",");
            dateRanges[index] = Integer.parseInt(randoms[0]);
            id[index] = Integer.parseInt(randoms[1]);
            flag[index] = Integer.parseInt(randoms[2]);
            system[index] = Integer.parseInt(randoms[3]);
        }
    }  
    
  2. # 2 楼答案

    直接尝试:

    String[] randoms = str.split(",");
    

    你不需要实例化一个String[]split方法已经完成了

  3. # 3 楼答案

    因为您将一个变量初始化为一个值(new String[4]),然后用另一个值替换变量值(紧接着是str.split(",")的结果)。因此,不需要初始化

    你的代码在功能上等同于

    String[] randoms = str.split(",");
    

    除了分配一个新的字符串数组,该数组会立即被丢弃

  4. # 4 楼答案

    因为你可以这么做:

    String[] randoms = str.split(",");