所以我对编程很感兴趣(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; }
} }
答案 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语句没有循环断开和继续。它给出了编译错误。删除它,它会给出正确的结果。
答案 6 :(得分:0)
在if / else块中添加break;
不会让您的代码编译:)修复此问题后,您的if / else代码块本身看起来是正确的。我测试了它,然后在我的机器上打印出来。
要回答与 If语句 相关的问题,如果我是你,我会检查:
如果你可以使用.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()
删除每个文本块之前和之后的空格。