【问题标题】:compiler asked me to include a return statement even though I have already included one编译器要求我包含一个 return 语句,即使我已经包含了一个
【发布时间】:2016-04-27 02:44:13
【问题描述】:

我是 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;
//            }
//        }
    }

【问题讨论】:

    标签: java return


    【解决方案1】:

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

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

    如果您确定isPrime 在那里始终为假,请将while(!isPrime) 更改为while(true)for(;;)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多