我已经尝试了一切,但我不能得到这个代码打印5个数字从最大到最小的顺序。任何帮助将不胜感激。java网站告诉我要多写一些,所以我就开始写了。我会使用循环来实现这一点,但任务要求不使用循环。我有麻烦打印出这5个数字从最大到最小不使用循环。请帮忙
import java.util.Scanner;
public class InOrder{
public static void main(String[] args){
Scanner input = new Scanner(System.in);
int hi=0;
int hi2=0;
int mid=0;
int low=0;
int low2=0;
System.out.println("Enter 5 variables:");
int num1 = input.nextInt();
int num2 = input.nextInt();
int num3 = input.nextInt();
int num4 = input.nextInt();
int num5 = input.nextInt();
//Finds the highest number
if ((num1 >= num2) && (num1 >= num3) && (num1 >= num4) && (num1 >= num5)) {
hi = num1;
} else if ((num2 >= num1) && (num2 >= num3) && (num2 >= num4) && (num2 >= num5)) {
hi = num2;
} else if ((num3 >= num1) && (num3 >= num2) && (num3 >= num4) && (num3 >= num5)) {
hi = num3;
} else if ((num4 >= num1) && (num4 >= num2) && (num4 >= num3) && (num4 >= num5)) {
hi = num4;
} else if ((num5 >= num1) && (num5 >= num2) && (num5 >= num3) && (num5 >= num4)) {
hi = num5;
}
// Finds Second Highest
if ((num1 > mid) && (num1 > low) && (num1 > low2) && (num1 < hi)) {
hi2 = num1;
} else if ((num2 > mid) && (num2 > low) && (num2 > low2) && (num2 < hi)) {
hi2 = num2;
} else if ((num3 > mid) && (num3 > low) && (num3 > low2) && (num3 < hi)) {
hi2 = num3;
} else if ((num4 > mid) && (num4 > low) && (num4 > low2) && (num4 < hi)) {
hi2 = num4;
} else if ((num5 > mid) && (num5 > low) && (num5 > low2) && (num5 < hi)) {
hi2 = num5;
}
//Finds the middle number
if ((num1 < hi) && (num1 < hi2) && (num1 > low2) && (num1 > low)) {
mid = num1;
} else if ((num2 < hi) && (num2 < hi2) && (num2 > low2) && (num2 > low)) {
mid = num2;
} else if ((num3 < hi) && (num3 < hi2) && (num3 > low2) && (num3 > low)) {
mid = num3;
} else if ((num4 < hi) && (num4 < hi2) && (num4 > low2) && (num4 > low)) {
mid = num4;
} else if ((num5 < hi) && (num5 < hi2) && (num5 > low2) && (num5 > low)) {
mid = num5;
}
//Finds the lowest number
if ((num1 <= num2) && (num1 <= num3) && (num1 <= num4) && (num1 <= num5)) {
low = num1;
} else if ((num2 <= num1) && (num2 <= num3) && (num2 <= num4) && (num2 <= num5)) {
low = num2;
} else if ((num3 <= num1) && (num3 <= num2) && (num3 <= num4) && (num3 <= num5)) {
low = num3;
} else if ((num4 <= num1) && (num4 <= num2) && (num4 <= num3) && (num4 <= num5)) {
low = num4;
} else if ((num5 <= num1) && (num5 <= num2) && (num5 <= num3) && (num5 <= num4)) {
low = num5;
}
//Finds Second Lowest
if ((num1 < mid) && (num1 > low) && (num1 < hi2) && (num1 < hi)) {
low2 = num1;
} else if ((num2 < mid) && (num2 > low) && (num2 < hi2) && (num2 < hi)) {
low2 = num2;
} else if ((num3 < mid) && (num3 > low) && (num3 < hi2) && (num3 < hi)) {
low2 = num3;
} else if ((num4 < mid) && (num4 > low) && (num4 < hi2) && (num4 < hi)) {
low2 = num4;
} else if ((num5 < mid) && (num5 > low) && (num5 < hi2) && (num5 < hi)) {
low2 = num5;
}
System.out.println("The variables from greatest to least are:");
System.out.print("" + hi);
System.out.print("," + hi2);
System.out.print("," + mid);
System.out.print("," + low2);
System.out.print("," + low);
}
}
还有Roman Graf的回答你需要把它包含在文档的顶部
import java.util.Arrays;
试着这样做:
public class NoLoopSort {
static int[] values = new int[] { 4, 2, 5, 1, 3 };
public static void main(String[] args) {
printLower(0, values.length - 1);
printLower(0, values.length - 1);
printLower(0, values.length - 1);
printLower(0, values.length - 1);
printLower(0, values.length - 1);
}
private static void printLower(int start, int end) {
if (start == end) {
// this is currently the lowest number in array, print it.
System.out.println(values[start]);
// make current index biggest possible
values[start] = Integer.MAX_VALUE;
} else {
if (values[start] < values[end]) {
printLower(start, end - 1);
} else if (values[start] >= values[end]) {
printLower(start + 1, end);
}
}
}
}
上面是一个递归交换函数,基本上就是从开始开始,然后检查数组中的下一个数字是大还是小,如果小于,则交换两个数字并重新开始,否则移动到下一个数字。
[edit] java代码替换为测试版本
你不想使用循环?
System.out.println(Arrays.sort(new int[]{num1,num2,num3,num4,num5}));
有点不诚实。您可以创建一个数组,并使用api对该数组进行排序。还是禁止调用使用循环的函数?