使用java查找最多三个整数时出现持久编译错误

时间:2016-09-06 10:44:29

标签: java compiler-errors

我是Java的新手,并试图找到一个已经返回持久编译错误的问题的解决方案。

我已将我的代码粘贴如下:

import java.util.*;

class MaxInteger {


    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        System.out.print("Enter three integers: ");
        int num1 = sc.nextInt();
        int num2 = sc.nextInt();
        int num3 = sc.nextInt();
        int max = getMax(num1, num2, num3);

        System.out.println("Maximum input integer is " + max);
    }

    public static int getMax(int num1, int num2, int num3) { 
        if ((num1 >= num2) && (num1 >= num3)) 
            return num1;
        else if ((num2 >= num1) && (num2 >= num3)) 
            return num2;
        else if ((num3 >= num1) && (num3 >= num2)) 
            return num3;
    }
}

编辑:编辑此问题,以便在看到可能被视为偏离主题的回复后使其更好。

  1. 我收到的错误消息是“缺少退货声明”。

  2. 我知道有一种Math.max方法可以找到最大值,但在这种特殊情况下,该任务被赋予转换为“if else”语句。

  3. 我的原始代码中没有任何缺少的括号,括号和括号。它们可能发生在我复制代码中。为任何困惑道歉。

  4. “tl; dr”版本: 对不起由我造成的任何错误,遗漏或混淆。

9 个答案:

答案 0 :(得分:4)

Math.max()从两个值返回最高值。您可以应用此操作两次以获得最多三次

int max =  Math.max(Math.max(num1,num2),num3);

答案 1 :(得分:3)

即使你知道这个方法总会返回一些东西,但编译器并没有。解决方案是让最后else if成为else,因为您知道这仍然是逻辑上正确的。

public static int getMax(int num1, int num2, int num3) { 
    if ((num1 >= num2) && (num1 >= num3)) 
        return num1;
    else if ((num2 >= num1) && (num2 >= num3)) 
        return num2;
    return num3;
}

还有一件事!您已经错过了我已添加到您的代码段中的结束括号,我已经通过编辑问题添加到您的代码片段,因为我认为这是一个错字。我以为你的原始代码中有它,但我现在不确定。

以上是关于编译错误的。您可以在下面找到一些代码审查。

另一件事是DRY你的代码。你为什么要重复一些以前写过的东西?要计算最多三个数字,只需返回:

public static int maxOfThree(int num1, int num2, int num3) { 
    return Math.max(Math.max(num1,num2),num3);
}

答案 2 :(得分:1)

此块:

public static int getMax(int num1, int num2, int num3) { 
    if ((num1 >= num2) && (num1 >= num3)) 
        return num1;
    else if ((num2 >= num1) && (num2 >= num3)) 
        return num2;
    else if ((num3 >= num1) && (num3 >= num2)) 
        return num3;
}

需要带有返回的else语句,或if / else块末尾的返回值。

答案 3 :(得分:1)

您的编译器错误的原因似乎是您的getMax()方法在所有情况下都不会返回值。将您的代码更改为立即缓解:

public static int getMax(int num1, int num2, int num3) { 
    if ((num1 >= num2) && (num1 >= num3)) 
        return num1;
    else if ((num2 >= num1) && (num2 >= num3)) 
        return num2;
    // otherwise num3 must be the greatest
    else return num3;
}

更好的是,使用我的实现或@Amy给出的答案可以获得更好的结果。

只是为了好玩,您实际上可以使用单个三元语句确定三个数字的最大值:

public static int getMax(int num1, int num2, int num3) {
    int max = num1 > num2 ? (num1 > num3 ? num1 : num3) : (num2 > num3) ? num2 : num3;
    return max;
}

关于您当前的编译器错误,我看到的问题是您错过了类周围的右括号。您的代码应采用以下形式:

class MaxInteger {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        System.out.print("Enter three integers: ");
        int num1 = sc.nextInt();
        int num2 = sc.nextInt();
        int num3 = sc.nextInt();
        int max = getMax(num1, num2, num3);

        System.out.println("Maximum input integer is " + max);
    }

    public static int getMax(int num1, int num2, int num3) {
        int max = num1 > num2 ? (num1 > num3 ? num1 : num3) : (num2 > num3) ? num2 : num3;
        return max;
    }
}

答案 4 :(得分:0)

在getMax方法中,编译器告诉您必须始终返回结果。您应该添加一个案例,该案例将在您if个子句都不匹配时执行 - 将其添加到最后或else块下。

答案 5 :(得分:0)

关键是让您的路径更容易阅读"由人类。这有助于找出编译器出现源代码问题的原因。

在您的情况下:对块使用大括号。总是,即使对于单行也是如此:

public static int getMax(int num1, int num2, int num3) { 
  if ((num1 >= num2) && (num1 >= num3)) {
    return num1;
  } else {
    if ((num2 >= num1) && (num2 >= num3)) {
      return num2;
    } else {
      if ((num3 >= num1) && (num3 >= num2)) {
      return num3;
    }
  }
}

当然,很多人会说"有很多线路噪音'现在&#34 ;;但问题是:现在你的决赛是否......没有别的,那么现在更明显了吗?换句话说:您的方法中有一条路径不包含 return 语句。你只是没有看到,因为你写下/格式化/缩进代码的方式!

因此,这里的主要教训是:

  1. 学习阅读编译器消息。他们在Java方面非常出色,而且值得信赖
  2. 以清晰显示方法中路径的方式构建代码。
  3. 当然,正如其他人正确指出的那样:不要重新发明轮子。 Java即将推出的即用型测试库。除了学习效果之外,实现自己的最小/最大功能毫无意义。

答案 6 :(得分:0)

这个解决方案怎么样?

private static int getMax(int a, int b, int c) {
    int[] values = new int[]{a, b, c};
    Arrays.sort(values);
    return values[2];
}

答案 7 :(得分:0)

您可以使用收藏集

public class MaxInteger {
 static List<Integer> list = new ArrayList<Integer>();  
 public static void main(String[] args) {
 System.out.print("Enter three integers: ");
    Scanner sc = new Scanner(System.in);
    for(int i = 0; i < 3; i++) {        
      list.add(sc.nextInt());
    }
    Collections.sort(list); // Sort the arraylist
    System.out.println("Maximum input integer is " + list.get(list.size() - 1));
    } 
}  

答案 8 :(得分:0)

Java 8解决方案,用于从任意数量的输入中查找最大值:

public static int maxOf(int... num) {
    return Arrays.stream(num).max().getAsInt();
}