如果情况继续在第3天崩溃

时间:2015-07-14 03:30:06

标签: c# .net if-statement

所以我对编程很感兴趣(16岁)我现在已经解决了一段时间的问题,但现在我正在解决这个问题(这很容易)似乎只有一件事情我在途中。问题很简单,它只需要我读3个整数并打印出最好的整数,我已经用C ++ / C解决了它并且完全没有问题。但是这一个,如果条件为真,它打印出来并完美地工作前两个(如果a是最大值,它打印一个,如果b是它打印的最大值b)但是当c是最大值时它会出现空。对不起,很长的帖子,希望有人可以帮助我。

 using System;

namespace MaxP351 { class MainClass { public static void Main (string[] args) { string[] input = Console.ReadLine ().Split (' '); // getting input as string int[] nums = new int[input.Length]; // declaring int array with same length as input for (int i = 0; i < input.Length; i++) { // starting a for loop to convert input string to int in nums[] nums[i] = Convert.ToInt32(input[i]); } int a, b, c; a = nums [0]; b = nums [1]; c = nums [2]; if (a > b && a > c) { Console.WriteLine (a); break; } else if (b > a && b > c) { Console.WriteLine (b); break; } else if (c > a && c > b) { Console.WriteLine (c); break; }

} }

7 个答案:

答案 0 :(得分:2)

如果c确实是最大的数字,那么您的代码应打印出c的值。如果这是我的代码,我会在你的if语句中设置一个断点,看看它们是什么。或者,您可以在if语句之前打印出a,b和c的值,并确保它们是您期望的值。例如:

Console.WriteLine("Values before if statement:")
Console.WriteLine (a);
Console.WriteLine (b);
Console.WriteLine (c);
if (a > b && a > c) {
...

再次 - 我建议使用断点路径,但如果你不熟悉visual studio调试,上面的内容可能是一种快速而又脏的方法来查看值。

总之 - 您的代码应该为您提供所需的输出。问题最有可能出现在其他地方。

答案 1 :(得分:2)

1。无需休息;对于if-else语句。

2. 根本不需要if语句来显示最大的整数。你可以在下面做。

 Console.WriteLine(nums.Max())

3. 如果您不想使用Max功能。如果条件的话,做一个比太多更好的循环;

    int? maxVal = null; // ? means nullable int. Set null just to initialize

    for (int i = 0; i < nums.Length; i++)
    {
      int currentNum = nums[i];
      if (!maxVal.HasValue || currentNum > maxVal.Value)
      {
        maxVal = currentNum;
      }
    }

   Console.WriteLine(maxVal);

答案 2 :(得分:0)

你不需要休息&#39;因为你正在使用if-else if。下面应该有帮助

connect.sid

答案 3 :(得分:0)

您的2015-07-14 15:34:32.507 My App Name[14254:2683449] application:didFailToRegisterForRemoteNotificationsWithError: with error = Error Domain=NSOSStatusErrorDomain Code=1 "The operation couldn’t be completed. (OSStatus error 1.)" (kCFHostErrorHostNotFound / kCFStreamErrorSOCKSSubDomainVersionCode / kCFStreamErrorSOCKS5BadResponseAddr / kCFStreamErrorDomainPOSIX / evtNotEnb / siInitSDTblErr / kUSBPending / dsBusError / kStatusIsError / kOTSerialSwOverRunErr / cdevResErr / EPERM: / Error code is the version of SOCKS which the server wishes to use / / POSIX errno; interpret using <sys/errno.h> / event not enabled at PostEvent / slot int dispatch table could not be initialized. / / bus error / / / Couldn't get a needed resource; alert / Operation not permitted) 语句无法处理具有相同值的数字

如下所示:

if

答案 4 :(得分:0)

试试这个

static void Main(string[] args)
    {
        try
        {
            Console.WriteLine("Input first number: ");
            var a = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Input second number: ");
            var b = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Input third number: ");
            var c = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine(a);
            Console.WriteLine(b);
            Console.WriteLine(c);
            if (a > b && a > c)
            {
                Console.WriteLine(a);
            }
            else if (b > a && b > c)
            {
                Console.WriteLine(b);
            }
            else if (c > a && c > b)
            {
                Console.WriteLine(c);
            }                
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
        Console.ReadKey();
    }

编辑: 如果你让它变得动态,那么

static void Main(string[] args)
    {
        try
        {
            Console.WriteLine("Enter numbers (Example 25,46,19)");
            var input = Console.ReadLine();
            if (input == null)
            {
                Console.WriteLine("Your input is wrong");
                return;
            }
            var numbers = input.Split(',');
            //Sort by descending order
            for (int i = 0; i < numbers.Length; i++)
            {
                for (int j = 0; j < numbers.Length - 1; j++)
                {
                    if (Convert.ToInt32(numbers[i]) > Convert.ToInt32(numbers[j]))
                    {
                        var temp = Convert.ToInt32(numbers[i]);
                        numbers[i] = numbers[j];
                        numbers[j] = temp.ToString();
                    }
                }
            }
            Console.WriteLine("Greater Number is {0}", numbers[0]);                
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
        Console.ReadKey();
    }

答案 5 :(得分:0)

我执行了你的代码,如果删除了break,它可以正常工作。 break语句没有循环断开和继续。它给出了编译错误。删除它,它会给出正确的结果。

http://i.imgur.com/O02akZx.jpg这是屏幕截图

答案 6 :(得分:0)

在if / else块中添加break;不会让您的代码编译:)修复此问题后,您的if / else代码块本身看起来是正确的。我测试了它,然后在我的机器上打印出来。

要回答与 If语句 相关的问题,如果我是你,我会检查:

  • 如果c真的是最大的(它可能大于a,但不是b,那么它会失败)
  • c之前或之后的不需要的空间(可能无法转换?您可以尝试在转换前修剪字符串。)

如果你可以使用.Max():

,这个更整洁
    public static void Main(string[] args)
    {
        string[] input = Console.ReadLine().Split(' '); // getting input as string            
        List<int> nums = new List<int>(); // declaring int array with same length as input
        for (int i = 0; i < input.Length; i++) // starting a for loop to convert input string to int in nums[]
        {                
            int intValue;
            if (Int32.TryParse(input[i].Trim(), out intValue))
            {
                nums.Add(intValue);
            }
        }

        int max = nums.Max();
        int min = nums.Min();

        Console.WriteLine("Largest: " + max);
        Console.WriteLine("Smallest: " + min);

        Console.WriteLine("Press Enter to exit.");
        Console.ReadLine();
    }

没有.Max():

    public static void Main(string[] args)
    {
        string[] input = Console.ReadLine().Split(' '); // getting input as string            
        List<int> nums = new List<int>(); // declaring int array with same length as input
        for (int i = 0; i < input.Length; i++) // starting a for loop to convert input string to int in nums[]
        {                
            int intValue;
            if (Int32.TryParse(input[i].Trim(), out intValue))
            {
                nums.Add(intValue);
            }
        }

        //int max = nums.Max();
        //int min = nums.Min();

        int min = nums[0];
        int max = nums[0];
        for (int i = 0; i < nums.Count(); i++)
        {
            if (nums[i] < min) min = nums[i];
            if (nums[i] > max) max = nums[i];
        }

        Console.WriteLine("Largest: " + max);
        Console.WriteLine("Smallest: " + min);

        Console.WriteLine("Press Enter to exit.");
        Console.ReadLine();
    }

注意:

  • List<int>用于容纳用户添加超过3个值。

  • 避免使用a,b,c,以便程序可以接受3个以上的值。

  • 使用Int32.TryParse(your_string, out outputInt)方便地检测解析错误并继续前进。使用.Trim()删除每个文本块之前和之后的空格。