Я пишу string[], чтобы показать несколько строк в выводе. Глупый вопрос, почему на выходе не 5 х 5? (я использовал i и j от 0 до 4, тогда на выходе должен быть массив 5 х 5), может кто-нибудь помочь?
<ArrayOfstring xmlns:i = "http://www.w3.org/2001/XMLSchema-instance" xmlns = "http://schemas.microsoft.com/2003/10/Serialization/Arrays">
<string>0 30 3 13 25 30 </string>
<string>0 30 10 22 27 </string>
<string>0 30 12 17 </string>
<string>0 30 5 </string>
<string>0 30 </string>
</ArrayOfstring>
Вот мой вклад: .../3/10/12/5
Коды ниже:
public IEnumerable<string> route5(int city1, int city2, int city3, int city4)
{
int[] city = new int[] { 0, city1, city2, city3, city4 };
string[] layout = new string[5];
for (int i = 0; i < 5; i++)
{
string message = "";
for (int j = 0; j < 5; j++)
{
if (j - i == 0) message= "0"+" ";
if (j > i)
{
if (j - i == 1) message+= (city[j]).ToString()+" ";
else if (j - i == 2) message+= (city[j] + city[j - 1]).ToString()+" ";
else if (j - i == 3) message+= (city[j] + city[j - 1] + city[j - 2]).ToString() + " ";
else message+= (city1 + city2 + city3 + city4).ToString() + " ";
}
else
{
if (i - j == 1) message+= (city[i]).ToString()+" ";
else if (i - j == 2) message+= (city[i] + city[i - 1]).ToString() + " ";
else if (i - j == 3) message+= (city[i] + city[i - 1] + city[i - 2]).ToString()+ " ";
else message+= (city1 + city2 + city3 + city4).ToString() + " ";
}
}
layout[i]= message;
}
return layout;
}
К вашему сведению, я также только что заметил, что ваша следующая строка if (j > i), скорее всего, должна быть else if (j > i). В настоящее время у вас добавляется одно дополнительное значение, а не только предполагаемые 5 значений.
@JohnOmielan, ты прав, я обновил. Но показывает только половину.
@JohnOmielan <string>0 3 13 25 30 </string> <string>0 10 22 27 </string> <string>0 12 17 </string> <string>0 5 </string> <string>0 </ строка> </ArrayOfstring>
@JohnOmielan Мне нужен 0 по диагонали, когда i = j.
Кажется, вы внесли только второе предложенное мной изменение (т. е. добавили else ) на основе ваших двух комментариев выше. Кроме того, реализация моего первого предложенного изменения (т. е. замена = на +=) должна решить, что 0 всегда будет слева, а не по диагонали, как вы сказали.
@JohnOmielan Я обновил еще если, и это половина серии, треугольник. Кажется, что нет числа, если i>j...
@JohnOmielan Спасибо за подробности. Извините, я пока не очень понял смысл сообщения+=0, так как я задал условие i=j, то оно и произойдет. Но почему он стирает начальные значения i в строке i для i = 0, 1, 2, 3, 4)?
Добро пожаловать за подробностями. Обратите внимание, что когда j - i == 0, то j тогда i, но это было раньше 0, 1, ..., i - 1, где значения добавлялись ко всему, что было в message, потому что в коде использовался +=. Однако ваш исходный код с использованием message= означает стирание всего, что находится в message (т. е. совокупную строку, созданную от того места, где j было 0, до i - 1), а затем присвоение ей запрошенного вами текста, т. е. "0"+" ". Надеюсь, теперь вы понимаете, что происходит, но если я неправильно понял, о чем вы спрашиваете, или если это все еще неясно, пожалуйста, дайте мне знать.
@JohnOmielan Понятно, это имело большой смысл. Еще раз спасибо и очень ценю. :)
Я не уверен, что вы на самом деле пытаетесь здесь сделать, вам следует описать предполагаемую цель вашего кода (в вопросе). У вас есть два вложенных цикла, но у вас есть условие if () для каждого возможного смещения между ними? Такое ощущение, что вам следует подсчитывать совокупную сумму.
@JeremyLakeman, проблема решена, спасибо!





Как я уже говорил в комментариях, есть 2 проблемы:
В вашей строке if (j - i == 0) message= "0"+" ";message= должно быть message+=. Как и в вопросе, этот код перезаписывает строку сообщения (именно это приводит к тому, что 0 всегда находится слева, а не по диагонали, и стирает начальные значения i в строке i для i = 0, 1, 2, 3, 4), но вы намеревались вместо этого добавьте к строке.
Вместо этого следующая строка if (j > i) должна быть else if (j > i). Как и сейчас, это приводит к добавлению одного дополнительного значения (поскольку вместо обхода случая j - i == 0 оно снова обрабатывается в коде составного оператора else (т. е. внутри { и }), приведенном ниже, в результате чего message+= (city1 + city2 + city3 + city4).ToString() + " "; выполняется, поскольку ни один из if (i - j == 1), if (i - j == 2) или if (i - j == 3) верны), а не иметь только намеченные 5 значений.
Своим комментарием вы подтвердили, что эти изменения решают ваши проблемы.
оно работает!!! Спасибо оооочень большое.
Похоже, проблема вызвана опечаткой. В вашей строке
if (j - i == 0) message= "0"+" ";вместоmessage=должно бытьmessage+=. В настоящее время этот код перезаписывает строкуmessage, а не добавляет к ней, что, я полагаю, вы и имели в виду.