防止 for 循环在计数器未到达索引的最后一个时打印出重复的内容



这可能是从一开始就是一个脑屁,我很抱歉。我了解for 循环在每次迭代中打印内容的方式。但是有没有办法仅在计数器到达索引的最后一个时才在满足的条件下打印出内容?

我只是无法解决这个问题,当结合if 条件时,我可能会过度思考一个简单的任务并想到错误的方法。

起初我有这样的想法。当然,当到达索引的最后一个时,这并不总是正确的:(numbers[i] == randomNums[j] && i+1 == numbers.Length)

有什么想法吗?

使用的 for 循环:

for (int i = 0; i < numbers.Length; i++)
{
for (int j = 0; j < randomNums.Length; j++)
{
if (numbers[i] == randomNums[j]) 
{
Console.WriteLine("#######################################");
Console.WriteLine("############## B I N G O ##############");
Console.WriteLine("#######################################");
}
else
{
Console.WriteLine("Better luck next time!");
}
}
}

您可能正在寻找类似以下内容的内容:

private static void CheckBingo(int[] numbers, int[] randomNums)
{
var intersect = numbers.Intersect(randomNums).Count();
var mess = intersect > 0 ? "BINGO" : "Better luck next time!";            
Console.WriteLine(mess);
}

private static void CheckBingo(int[] numbers, int[] randomNums)
{
var hasMatch = numbers.Any(x => randomNums.Contains(x));
var mess = hasMatch? "BINGO" : "Better luck next time!";            
Console.WriteLine(mess);
}

您将需要添加引用:

using System.Linq;

编辑

如果您希望保持循环格式,您可以这样做:

private static void CheckBingo(int[] numbers, int[] randomNums)
{
foreach (var n in numbers)
{
foreach (var r in randomNums)
{
if (n == r)
{
Console.WriteLine("#######################################");
Console.WriteLine("############## B I N G O ##############");
Console.WriteLine("#######################################");
return;
}
}
}
Console.WriteLine("Better luck next time!");
}

试试这个:

using System;
public class Program
{
public static void Main()
{       
var numbers = new int[] {1,2,8,7,69};
var randomNums = new int[] {2,3,5,76,4,42};
var firstLoopEnd = false;
var secondLoopEnd = false;
var lastNumFromNum = 0;
var lastNumFromRnd = 0;
for (int i = 0; i < numbers.Length; i++)
{
if (numbers.Length - 1 == i)
{
firstLoopEnd = true;
lastNumFromNum = numbers[i];
}
for (int j = 0; j < randomNums.Length; j++)
{               
if (randomNums.Length - 1 == j) 
{
secondLoopEnd = true;
lastNumFromRnd = randomNums[j];
}
}
if (firstLoopEnd && secondLoopEnd)
{
Console.WriteLine("#######################################");
Console.WriteLine("############## B I N G O ##############");
Console.WriteLine("#######################################");
Console.WriteLine("Last number from 'numbers': " + lastNumFromNum + ", Last number from 'randomNums': " + lastNumFromRnd);
}
else
{
Console.WriteLine("Better luck next time!");
}
}
}
}

这个想法是知道每个循环何时完成。

在.NET Fiddle上测试: https://dotnetfiddle.net/rcP6FM

感谢您的回复!

我找到了我正在寻找的解决方案,设置一个布尔变量并在外面放一个 if 以防止宾果消息多次打印出来:

for (int i = 0; i < numbers.Length; i++)
{
for (int j = 0; j < randomNums.Length; j++)
{
if (numbers[i] == randomNums[j]) 
{
winner = true;
}
}
}
if (winner == true)
{
Console.WriteLine("#######################################");
Console.WriteLine("############## B I N G O ##############");
Console.WriteLine("#######################################");
}
else
{
Console.WriteLine("n Inga rätt här, bättre lycka nästa gång!");
}

最新更新