在C#中使用If else升序5个数字

时间:2019-07-11 03:24:54

标签: c#

我想知道问题出在哪里,我可以解决这个问题。

        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

2 个答案:

答案 0 :(得分:0)

  
    

我想知道问题出在哪里...

  

首先,总体逻辑不健全。

第一个if和第二个a语句都可以,并且可以正确地将bif (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