问题描述
我试图在这段代码中显示 3 个不同的值,最高的数字,最低的数字,如果所有的数字都相同,输出应该表明它们是相等的,到目前为止我只能显示更大的或者相等的值,但是不知道怎么实现较小值的显示,请问这个结构是帮我实现还是应该使用其他类型的结构?
import java.util.Scanner;
public class values
{
public static void main(String[] args)
{
int x,y,z;
Scanner s = new Scanner(system.in);
System.out.print("First Value:");
x = s.nextInt();
System.out.print("Second Value:");
y = s.nextInt();
System.out.print("Third Value:");
z = s.nextInt();
if (x == y && x == z)
{
System.out.println("All numbers are equal");
}
else if(y > z && y > x)
{
System.out.println("The highest value is: "+y);
}
else if(x > y && x > z)
{
System.out.println("The highest value is: "+x);
}
else
{
System.out.println("The highest value is: "+z);
}
}
}
解决方法
编写涉及所有三个变量的所有条件可能会很麻烦。我将按以下步骤进行:
- 初始化单独的变量以分别存储最高值和最低值。例如
int highest = x; int lowest = x;
- 分别用
y
和z
比较当前最高和当前最低,必要时进行更改。例如highest = y > highest : y ? highest; lowest = y < lowest ? y : lowest;
- 完成所有比较后,如果最大值与最小值相同,则所有
x
、y
和z
都相同。
if (x == y && x == z) {
System.out.println("All numbers are equal");
} else {
System.out.println("The highest value is: "+ IntStream.of(x,y,z).max().getAsInt());
System.out.println("The lowest value is: "+ IntStream.of(x,z).min().getAsInt());
}
,
像这样尝试最小和最大。
int x = 10; int y = 20; int z = 30;
int min = Math.min(Math.min(x,y),z);
int max = Math.max(Math.max(x,z);
System.out.println("max = " + max);
System.out.println("min = " + min);
印刷品
max = 30
min = 10
如果您不想使用 Math 类方法,请编写自己的方法并以相同的方式使用它们。这些使用 ternary operator ?:
表示对于 expr ? a : b
,如果表达式为真,则返回 a
,否则返回 b
;
public static int max (int x,int y) {
return x > y ? x : y;
}
public static int min (int x,int y) {
return x < y ? x : y;
}
最后,您可以编写方法来接受任意数量的参数并返回适当的参数。这些首先检查空数组,然后检查空数组。
public static int min(int ...v) {
Objects.requireNonNull(v);
if (v.length == 0) {
throw new IllegalArgumentException("No values supplied");
}
int min = v[0];
for(int i = 1; i < v.length; i++) {
min = min < v[i] ? min : v[i];
}
return min;
}
public static int max(int ...v) {
Objects.requireNonNull(v);
if (v.length == 0) {
throw new IllegalArgumentException("No values supplied");
}
int max = v[0];
for(int i = 1; i < v.length; i++) {
max = max > v[i] ? max : v[i];
}
return max;
}