这不仅在输入两个或多个相同值时有效,它将使输出全为零,而不是给出与第一个最高和第二个最高相同的结果。我们也不能使用数组和数组或任何排序函数。
例如,如果我输入4 4 2 2 1,它将使所有结果为0而不是给出:
first highest: 4
second highest:4
second lowest :2
first lowest :1
这是我的代码:
import java.util.Scanner;
public class Pres {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
System.out.print("Enter 5 numbers: ");
int fh = 0, sh = 0, sl = 0, fl = 0;
int a = s.nextInt();
int b = s.nextInt();
int c = s.nextInt();
int d = s.nextInt();
int e = s.nextInt();
if (a < b && a < c && a < d && a < e) {
fl = a;
} if (b < a && b < c && b < d && b < e) {
fl = b;
} if (c < a && c < b && c < d && c < e) {
fl = c;
} if (d < a && d < b && d < c && d < e) {
fl = d;
} if (e < a && e < b && e < c && e < d) {
fl = e;
}
if (a > b && a > c && a > d && a > e) {
fh = a;
} if (b > a && b > c && b > d && b > e) {
fh = b;
} if (c > a && c > b && c > d && c > e) {
fh = c;
} if (d > a && d > b && d > c && d > e) {
fh = d;
} if (e > a && e > b && e > c && e > d) {
fh = e;
}
//sh
if (a > b && a > c && a > d && a < e) {
sh = a;
} if (a > b && a > c && a > d && a < e) {
sh = a;
} if (a < b && a > c && a > d && a > e) {
sh = a;
} if (a > b && a < c && a > d && a > e) {
sh = a;
} if (a > b && a > c && a < d && a > e) {
sh = a;
}
if (b > a && b > c && b > d && b < e) {
sh = a;
} if (b > a && b > c && b > d && b < e) {
sh = b;
} if (b < a && b > c && b > d && b > e) {
sh = b;
} if (b > a && b < c && b > d && b > e) {
sh = b;
} if (b > a && b > c && b < d && b > e) {
sh = b;
}
if (c > b && c > a && c > d && c < e) {
sh = c;
} if (c > b && c > a && c > d && c < e) {
sh = c;
} if (c < b && c > a && c > d && c > e) {
sh = c;
} if (c > b && c < a && c > d && c > e) {
sh = c;
} if (c > b && c > a && c < d && c > e) {
sh = c;
}
if (d > b && d > c && d > a && d < e) {
sh = d;
} if (d > b && d > c && d > a && d < e) {
sh = d;
} if (d < b && d > c && d > a && d > e) {
sh = d;
} if (d > b && d < c && d > a && d > e) {
sh = d;
} if (d > b && d > c && d < a && d > e) {
sh = d;
}
if (e > b && e > c && e > d && e < a) {
sh = e;
} if (e > b && e > c && e > d && e < a) {
sh = e;
} if (e < b && e > c && e > d && e > a) {
sh = e;
} if (e > b && e < c && e > d && e > a) {
sh = e;
} if (e > b && e > c && e < d && e > a) {
sh = e;
}
//sl
if (a < b && a < c && a < d && a > e) {
sl = a;
} if (a > b && a > c && a > d && a < e) {
sl = a;
} if (a < b && a > c && a > d && a > e) {
sl = a;
} if (a > b && a < c && a > d && a > e) {
sl = a;
} if (a > b && a > c && a < d && a > e) {
sl = a;
}
if (b < a && b < c && b < d && b > e) {
sl = a;
} if (b < a && b < c && b < d && b > e) {
sl = b;
} if (b > a && b < c && b < d && b < e) {
sl = b;
} if (b < a && b > c && b < d && b < e) {
sl = b;
} if (b < a && b < c && b > d && b < e) {
sl = b;
}
if (c < b && c < a && c < d && c > e) {
sl = c;
} if (c < b && c < a && c < d && c > e) {
sl = c;
} if (c > b && c < a && c < d && c < e) {
sl = c;
} if (c < b && c > a && c < d && c < e) {
sl = c;
} if (c < b && c < a && c > d && c < e) {
sl = c;
}
if (d < b && d < c && d < a && d > e) {
sl = d;
} if (d < b && d < c && d < a && d > e) {
sl = d;
} if (d > b && d < c && d < a && d < e) {
sl = d;
} if (d < b && d > c && d < a && d < e) {
sl = d;
} if (d < b && d < c && d > a && d < e) {
sh = d;
}
if (e < b && e < c && e < d && e > a) {
sl = e;
} if (e < b && e < c && e < d && e > a) {
sl = e;
} if (e > b && e < c && e < d && e < a) {
sl = e;
} if (e < b && e > c && e < d && e < a) {
sl = e;
} if (e < b && e < c && e > d && e < a) {
sl = e;
}
if (a < fl) {
sh = fl;
fl = a;
}
if ((a > fl) && (a < sl)) {
sl = a;
}
if (b < fl) {
sl = fl;
fl = b;
}
if ((b > fl) && (b < sl)) {
sl = b;
}
if (c < fl) {
sh = fl;
fl = c;
}
if ((c > fl) && (c < sl)) {
sh = c;
}
if (d < fl) {
sl = fl;
fl = d;
}
if ((d > fl) && (d < sl)) {
sl = d;
}
if (e < fl) {
sl = fl;
fl = e;
}
if ((e > fl) && (e < sl)) {
sl = e;
}
else
fh = sh;
fl = sh;
sl = sh;
sh = fl;
System.out.println("First highest :" + fh);
System.out.println("Second highest :" + sh);
System.out.println("First lowest :" + fl);
System.out.println("Second lowest :" + sl);
答案 0 :(得分:1)
对于这类问题,此代码到目前为止很复杂。尽量缩短时间以简化操作 - 这也可以使调试变得更加容易:
int[] inp = new int[5];
//read input into array here
//here we have two options:
//either use the javaAPI to sort the array:
Arrays.sort(inp);
int min2 = inp[1];//second smallest element
int max2 = inp[3];//second highest element
//search for the value on your own:
int min = Integer.MAX_VALUE;//searching for a minimum -> greatest possible value
int min2 = min;
int max = Integer.MIN_VALUE;
int max2 = max;
for(int i : inp){
if(i < min){
min2 = min;
min = i;
}else if(i < min2){
min2 = i;
}
if(i > max){
max2 = max;
max = i;
}else if(i < max2){
max2 = i;
}
}
可能代码的这一部分是问题所在:
else
fh = sh;
fl = sh;
sl = sh;
sh = fl;
由于没有括号,最后3行将始终执行,与条件是否满足无关。
答案 1 :(得分:1)
public class Num {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
System.out.print("Enter 5 numbers: ");
int fh = 0, sh = 0, sl = 0, fl = 0;
int difference1 = 1;
int difference2 = 1;
boolean t1=false, t2=false;
int temp = 0, temp1, temp2;
int a = s.nextInt();//for first number
fh = sh = sl = fl = a;
for (int i = 2; i <= 5; i++) {
int b;
t2=false;
t1=false;
b = s.nextInt();
if (b > fh) {
sh=fh;
fh = b;
t1 = true;
}
if (b < fl) {
sl=fl;
fl = b;
t2 = true;
}
if (t2 == false) {
temp1 = b - fh;
if (temp1 < difference1) {
difference1 = temp1;
sl = b;
}
}
if (t1 == false) {
temp2 = b - fl;
if (temp2 > difference2) {
difference2 = temp2;
sh = b;
}
}
}
System.out.println("First lowest :" + fl);
System.out.println("Second lowest :" + sl);
System.out.println("Second highest :" + sh);
System.out.println("First highest :" + fh);
}
}
这段代码工作 我试用这个代码4个小时 我更改了我的代码plz删除评论自爆
答案 2 :(得分:1)
由于您不想使用数组和排序,因此稍微硬编码的解决方案对您有用。基本思想是两次解析输入,并将它们传递给一组硬编码的if()
条件以找到最高数字。在第一步中找到最高的数字并为其分配Integer.MIN_VALUE
的值,以便在输入的第二步中通过同一组if()
条件时,不考虑第一个最高值,现在确定的最高值将是第二高值。以下是查找最高和第二高数字的工作代码。您可以将其扩展为查找最低和最低的数字。
public class Test {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
System.out.print("Enter 5 numbers: ");
int fh = 0, sh = 0, sl = 0, fl = 0;
int a = s.nextInt();
int b = s.nextInt();
int c = s.nextInt();
int d = s.nextInt();
int e = s.nextInt();
for (int i = 1; i < 3; i++) {
if (a > b && a > c && a > d && a > e) {
// a is highest
if (i == 1) {
//for first iteration, since a is highest store its value in fh and assing it value Integer.MIN_VALUE
fh = a;
a = Integer.MIN_VALUE;
continue;
}
if (i == 2) {
//for second iteration, now highest number will be the second highest so store it in sh. Similar for all other inputs.
sh = a;
continue;
}
} else if (b > c && b > d && b > e) {
// b is highest
if (i == 1) {
fh = b;
b = Integer.MIN_VALUE;
continue;
}
if (i == 2) {
sh = b;
continue;
}
} else if (c > d && c > e) {
// c is highest
if (i == 1) {
fh = c;
c = Integer.MIN_VALUE;
continue;
}
if (i == 2) {
sh = c;
continue;
}
} else if (d > e) {
// d is highest
if (i == 1) {
fh = d;
d = Integer.MIN_VALUE;
continue;
}
if (i == 2) {
sh = d;
continue;
}
} else {
// e is highest
if (i == 1) {
fh = e;
e = Integer.MIN_VALUE;
continue;
}
if (i == 2) {
sh = e;
continue;
}
}
}
s.close();
System.out.println("First highest is:- " + fh);
System.out.println("Second highest is:- " + sh);
}
}