我如何更改此代码,使其停止循环但显示相同的内容
本文关键字:显示 循环 何更改 代码 | 更新日期: 2023-09-27 18:31:08
我正在尝试对我的程序进行编码,以便当输入的数组隔间被占用时,它会告诉用户哪些隔间是空的。但是,我不知道如何更改代码,使其停止循环但显示相同的内容。这是我的代码:
for (int i = 0; i < compartmentno.Length; i++)
{
if (compartmentno[i] == 0)
{
MessageBox.Show("Available compartments are" + (i + 1).ToString());
}
}
如何使程序只显示一个包含所有可用隔间的消息框,而不是显示 10 个消息框?提前感谢您的帮助!
你可以使用 LINQ 来实现它:
int availableCompartments = compartmentno.Count(x=> x == 0);
MessageBox.Show("Available compartments are:" + availableCompartments.ToString());
工作小提琴示例
这是公寓号码:
public static void Main()
{
int [] compartmentNo = { 1,3,5,6,7,8,9,0,4,0};
var availableCompartments = compartmentNo
.Select((value, index) => new {index, value})
.Where(x=> x.value == 0)
.Select(x=>x.index);
int Count = availableCompartments.Count();
string Values = String.Join(",",availableCompartments);
Console.WriteLine(String.Format("No of Aparments : {0} and aprtments No : {1}",Count,Values));
}
更新的小提琴演示
您可以在一个字符串中添加所有分栏,并在循环外显示消息。
using System.Text;
StringBuilder compartments = new StringBuilder();
for (int i = 0; i < compartmentno.Length; )
{
if (compartmentno[i] == 0)
{
compartments.Append(++i.ToString() + ", ");
}
}
MessageBox.Show("Available compartments are" + compartments.ToString());
试试这个:
int availableCompartments = 0;
for (int i = 0; i < compartmentno.Length; i++)
{
if (compartmentno[i] == 0)
{
availableCompartments++;
}
}
MessageBox.Show("Available compartments are " + availableCompartments.ToString());
请注意,这只会显示有多少个可用隔间,而不是哪些隔间。
注意:您必须为此使用相同的循环,而不是每次都显示消息,您可以在操作后显示一次。
使用以下代码:
int avli = 0;
for (int i = 0; i < compartmentno.Length; i++)
{
if (compartmentno[i] == 0)
{
avli++;
}
}
MessageBox.Show("Available compartments are" + avli.ToString());
你可以使用 linq 来实现这一点。
var avaiableItems= string.Join(",", compartmentno.Where(x => x == 0).Select((item, index) => index+1));
MessageBox.Show(string.Format("Available compartments are {0}",avaiableItems));
用这个在一行代码中做到这一点。 :)
它使用 Linq Select 语句中不太为人所知的索引器
MessageBox.Show(String.Format("Available compartments are {0}", String.Join(", ", compartmentno.Select((s, i) => new {i, s}).Where(p=>p.s == 0).Select(p=>p.i +1))));