我是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;
}
}
编辑:编辑此问题,以便在看到可能被视为偏离主题的回复后使其更好。
我收到的错误消息是“缺少退货声明”。
我知道有一种Math.max方法可以找到最大值,但在这种特殊情况下,该任务被赋予转换为“if else”语句。
我的原始代码中没有任何缺少的括号,括号和括号。它们可能发生在我复制代码中。为任何困惑道歉。
“tl; dr”版本: 对不起由我造成的任何错误,遗漏或混淆。
答案 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 语句。你只是没有看到,因为你写下/格式化/缩进代码的方式!
因此,这里的主要教训是:
答案 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();
}