我想知道问题出在哪里,我可以解决这个问题。
int a = 15, b = 5, c = 1, d = 30, e = 25;
int num1 = 0, num2 = 0, num3 = 0, num4 = 0, num5 = 0;
// checking value of A against the other fourth values
if (a < b && a < c && a < d && a < e)
num1 = a;
if (a > b && a < c && a < d && a < e)
num1 = b;
if (a > b && a > c && a < d && a < e)
num1 = c;
if (a > b && a > c && a > d && a < e)
num1 = d;
if (a > b && a > c && a > d && a > e)
num1 = e;
// checking value of B against the other fourth values
if (b < a && b < c && b < d && b < e)
num2 = a;
if (b > a && b < c && b < d && b < e)
num2 = b;
if (b > a && b > c && b < d && b < e)
num2 = c;
if (b > a && b > c && b > d && b < e)
num2 = d;
if (b > a && b > c && b > d && b > e)
num2 = e;
// checking value of C against the other fourth values
if (c < a && c < b && c < d && c < e)
num3 = a;
if (c > a && c < b && c < d && c < e)
num3 = b;
if (c > a && c > b && c < d && c < e)
num3 = c;
if (c > a && c > b && c > d && c < e)
num3 = d;
if (c > a && c > b && c > d && c > e)
num3 = e;
// checking value of D against the other fourth values
if (d < a && d < b && d < c && d < e)
num4 = a;
if (d > a && d < b && d < c && d < e)
num4 = b;
if (d > a && d > b && d < c && d < e)
num4 = c;
if (d > a && d > b && d > c && d < e)
num4 = d;
if (d > a && d > b && d > c && d > e)
num4 = e;
// checking value of E against the other fourth values
if (e < a && e < b && e < c && e < d)
num5 = a;
if (e > a && e < b && e < c && e < d)
num5 = b;
if (e > a && e > b && e < c && e < d)
num5 = c;
if (e > a && e > b && e > c && e < d)
num5 = d;
if (e > a && e > b && e > c && e > d)
num5 = e;
Console.WriteLine("Ranks from Lowest to Highest" + num1 + " " + num2 + " " + num3 + " " + num4 + " " + num5);
Console.ReadKey();
输出应该为Ranks from Lowest to Highest 1, 5, 15, 25, 30
,但是当我运行控制台时,输出为Ranks from Lowest to Highest 0, 15, 25, 30
。
答案 0 :(得分:0)
我想知道问题出在哪里...
首先,总体逻辑不健全。
第一个if
和第二个a
语句都可以,并且可以正确地将b
或if (a > b && a > c && a < d && a < e)
num1 = c;
标识为最小的值。但是现在考虑第三条语句。
a
如果返回true,则仅显示c
的相对位置,而不显示 b c a d e
c b a d e
b c a e d
c b a e d
的位置!如果我们手动对变量进行排序,它们可能会以以下任何顺序排列,并且if语句将对所有变量返回true。
if (a > b && a > c && a < d && a < e)
num3 = a;
因此该行代码可以重写为
a
同样,整个五个if语句的第一组都是关于if (a < b && a < c && a < d && a < e)
num1 = a;
if (a > b && a < c && a < d && a < e)
num2 = a;
if (a > b && a > c && a < d && a < e)
num3 = a;
if (a > b && a > c && a > d && a < e)
num4 = a;
if (a > b && a > c && a > d && a > e)
num5 = a;
所处的位置,而不是第一个元素是什么!甚至您的代码注释都表明它是关于'A'的,因此分配都是错误的。
因此,您可能会想尝试以下方法:
if (a > b && a > c && a > e && a < d)
num4 = a;
if (a > b && a > d && a > e && a < c)
num4 = a;
if (a > c && a > d && a > e && a < b)
num4 = a;
如果您这样做了,那么这些值在技术上将是正确的... 但是它们并不能涵盖所有可能的组合!这只是您可能会遗漏的几句话...
a
,这些仅用于变量if
!您必须至少再增加35条n!
语句才能捕获所有可能性。从数学上讲,这种情况的总数像import java.util.Scanner;
public class LoopsEndingRemembering {
public static void main(String[] args) {
while(true){
Scanner reader = new Scanner(System.in);
System.out.println("Type numbers: ");
int input = Integer.parseInt(reader.nextLine());
if(input == -1){
break;
}
}
System.out.println("Thank you and see you later!");
}
}
一样增加(阶乘... 1 * 2 * 3 * 4 * 5 * ...),因此,仅将一个数字加到变量列表中的数量会更多荒谬。哦,如果任何数字相等,会发生什么?整个操作将再次失败,您必须将某些运算符更改为<=和> =。
...,我可以解决这个问题...
如果这是针对编程课程的,您可能需要返回并回顾所学到的知识,以正确处理此问题。
类似于其他注释,您需要学习如何使用数组,循环和其他形式的编程思想进行编程。这不仅使这些任务更加容易,而且您可能会更喜欢编程。但是,学习对数组进行排序也不是一件容易的事,对于初学者来说,这是一个重要的话题。排序算法有很多,适当的编程知识通常会梳理至少4或5种基本的数组排序算法(气泡排序,插入排序,快速排序等),甚至不包括链接列表和二叉树
更简单的方法是学习如何使用预编程的对象,例如已经具有排序功能的列表和字典。但即使在那之前,也应该对对象和编程库进行适当的介绍。
答案 1 :(得分:0)
问题是您以非常不实际的方式编写了它。基本上,您有要排序的数字集合。
写成千上万的{{1}}并不是很容易阅读和维护。
这里有一个问题:
if
与您的输出不匹配:
Console.WriteLine("Ranks from Lowest to Highest" + num1 + " " + num2 + " " + num3 + " " + num4 + " " + num5);
因为您要打印5个数字,并且您的输出仅显示四个数字,所以它不可能是您的实际输出。
使用集合,例如Ranks from Lowest to Highest 0, 15, 25, 30
,借助LINQ扩展方法,有一种非常干净的数字赋值方式:
Array