【问题标题】:Private boolean cannot recognize return in "if statement"私有布尔值无法识别“if 语句”中的返回
【发布时间】:2020-03-13 21:35:30
【问题描述】:

我的代码:


import javafx.event.ActionEvent;
import javafx.scene.control.Label;

import java.util.Arrays;
import java.util.Random;

public class Controller {
    public Label keno;
    public Label loto;
    public Random rd = new Random();

    public void click(ActionEvent actionEvent) {

        String pom = "";
        int[] ken = zrebuj(10, 80);
        pom = Arrays.toString(ken);
        pom = pom.substring(1, pom.length() - 1);
        keno.setText(pom);


        ken = zrebuj(5, 35);
        pom = Arrays.toString(ken);
        pom = pom.substring(1, pom.length() - 1);
        loto.setText(pom);
    }

    private int[] zrebuj(int pocet, int max) {

        int[] cisla = new int[pocet];

        for (int i = 0; i < cisla.length; i++) {
            int tah = rd.nextInt(max) + 1;

            if (jeTam(cisla, tah)==false) {
                cisla[i] = tah;
            }
            else i--;
        }
        Arrays.sort(cisla);
        return cisla;
    }

    private boolean jeTam(int[] cisla, int tah) {

        for (int i = 0; i < cisla.length; i++) {

            if (cisla[i] == tah) {
                return true;
            }
            else return false;
        }

    }
} 

我的问题是,当我启动程序时,它崩溃并在私有布尔值中显示:“Missing return statement”,甚至认为它就在 if 语句中。

你能帮帮我吗?谢谢!

*另外,如果您有任何改进的建议,请在评论中告诉我;)

【问题讨论】:

  • 如果cisla.length == 0,该方法返回什么?
  • @AndyTurner 它永远不会是 0
  • @DownFury 编译器不知道这一点。您收到的错误是编译器错误,而不是在运行时。
  • @f1sh 但它设置 pocet 是 10 和 5 并且等于 cislo
  • @DownFury 重申:编译器不知道。编译器在很多方面都非常愚蠢(或者我应该说,很简单):它认为始终执行 for 循环的唯一时间是条件是一个评估为真的常量表达式,例如true.

标签: java if-statement boolean private


【解决方案1】:

您看到的错误是有效的,因为:

private boolean jeTam(int[] cisla, int tah) {

    for (int i = 0; i < cisla.length; i++) {

        if (cisla[i] == tah) {
            return true;
        }
        else return false;
    }
  // <---- NO RETURN STATEMENT
}

当 for 循环结束时,您没有提供返回值。 意思是,您的 for 循环运行,并且在第一次运行时返回 false 或 true(基于您的逻辑)。

但是编译器查看您的代码,发现方法末尾缺少 return 语句。

private boolean jeTam(int[] cisla, int tah) {

    for (int i = 0; i < cisla.length; i++) {

        if (cisla[i] == tah) {
            return true;
        }
        else return false;
    }

   return false //For Example

}

【讨论】:

  • 然而,值得指出的是循环中的return false 可能不是有意的——如果数组非空,此循环将始终在第一次迭代时返回。
  • @tomerpacific 所以它总是需要一个返回语句,除了循环中的返回等?
  • @DownFury 每当您在函数签名中声明要返回一个值时,对于每个逻辑流,该返回值都必须出现。如果我的回答对你有帮助,请注明。
猜你喜欢
  • 2020-02-16
  • 2013-12-12
  • 1970-01-01
  • 2014-12-19
  • 2022-12-17
  • 1970-01-01
  • 2020-07-30
  • 2015-02-22
  • 2016-11-08
相关资源
最近更新 更多