java - 编译器要求我包含一个 return 语句,即使我已经包含了一个

标签 java return

我是 Java 的新手,正在尝试解决初学者在给定数字之后找到下一个素数的问题。以下是我提出的解决方案的两个版本。对于第一个版本,编译器要求我在 findNextNumber 方法的末尾包含第二个 return 语句(即 return 0;),尽管我已经在代码中包含了一个 return 语句,而第二个版本没有要求我包含一个额外的返回声明。有人可以告诉我为什么会这样吗?在此先感谢您的帮助!

    public static int findNextPrime(int num) {

// VERSION 1
//        boolean isPrime = false;
//        while(!isPrime){
//            num += 1;
//            int sqt = (int)Math.sqrt(num);
//            for(int i = 2; i <= sqt; i++){
//                if(num % i == 0){
//                    break;
//                } else {
//                    isPrime = true;
//                    return num;
//                }
//            }
//        }
//        return 0;

// VERSION 2       
//        while (true) {
//            boolean isPrime = true;
//            num += 1;
//            int sqt = (int) Math.sqrt(num);
//            for (int i = 2; i <= sqt; i++) {
//                if (num % i == 0) {
//                    isPrime = false;
//                    break;
//                }
//            }
//            if (isPrime) {
//                return num;
//            }
//        }
    }

最佳答案

在第二个版本中,编译器知道 while(true) {...} 只能通过您的 return 语句退出。

在第一个版本中,编译器发现条件不是常量,并假设 while(!isPrime) {...} 可能会退出循环,因为 isPrime 为真。你我都知道这不可能发生,但语言不会让你依赖它来省略 return 语句。

while(!isPrime) 更改为 while(true)for(;;) 如果您确定 isPrime 在那里总是假的。

关于java - 编译器要求我包含一个 return 语句,即使我已经包含了一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34913852/

相关文章:

java - 如何在没有数据库的情况下管理 java 中的序列?

python - 返回字符串列表的 python 函数有问题吗?

javascript - 从函数内部返回变量到外部

java - 返回数组的奇数并对其求和

java - 在第一次迭代时返回正确,在任何其他迭代中返回不正确,java

java - 为什么这个 FileOutputStream 会给出 NullPointerException?

java - Spring MVC 不显示西里尔字母

java - Java 泛型新手 - 为什么泛型中存在返回类型为 void 的 Type?

java - 将@Transactional 与 JOOQ 一起使用

安卓 : Strange error when returning a simple string from doInBackground