#c#
#c#
Вопрос:
class Asient
{
private List<String> letras = new List<String> {
"A","B","C","D","E","F","G","H","J"};
private List<string> fila = new List<string> {
"1","2","3","4","5","6","7","8"};
private List<string> asientos= new List<string>();
public Asient(){
for (int i = 0; i < letras.Count; i ){
for (int n = 0; n < letras.Count; n ){
string sillaletra = letras[i] fila[n];
asientos.Add(sillaletra);
}
}
}
public List<string> GetAsientos(){
return this.asientos;
}
}
class Mainn
{
static void Main(string[] args)
{
Asient sillas = new Asient();
sillas.GetAsientos();
}
}
И код выдает мне эту ошибку во время выполнения:
Unhandled exception. System.ArgumentOutOfRangeException: Index was out of range.
Must be non-negative and less than the size of the collection. (Parameter 'index')
at System.Collections.Generic.List`1.get_Item(Int32 index)
at A05CINE.Asient..ctor() in D:Usersxxxxxc#xxx.cs:line 15
at A05CINE.Mainn.Main(String[] args) in D:UsersxDesktopxxxc#A05xx.cs:line 31
Кто-нибудь знает, как это исправить?
Я попытался использовать
asientos.Add(letras[i] fila[n]);
string sillaletra = letras[i] fila[n];
asientos.Add(sillaletra);
Комментарии:
1. Спасибо, Шон. Для меня уже слишком поздно, но вы спасли других от участи разделить мою судьбу.
2. У вас больше букв (9), чем цифр (8). Также, пожалуйста, переведите и укажите отступы на свои вопросы, чтобы людям было легче помочь вам. Отладка перед публикацией.
3. «Кто-нибудь знает, кто это исправит?» Да, не пытайтесь обращаться к индексам, которые больше длины массива.
Ответ №1:
Кажется, вы ищете декартово соединение, т. Е. Вы хотите List<string>
быть
{ "A1", "A2", ..., "A8", "B1", ..., "B8", ..., "J8" }
Если это ваш случай, вы можете задать для этого простой запрос Linq:
using System.Linq;
...
public Asient() {
asientos = letras
.SelectMany(letter => fila.Select(digit => letter digit))
.ToList();
}
Ответ №2:
У вас больше букв, чем цифр, добавьте
private List<string> fila= new List<string>{"1","2","3","4","5","6","7","8","9"};
и это будет работать.
Комментарии:
1. Спасибо, я ценю вашу помощь <3, я решаю ее, выполняя правильное for . если вы видите for(), который я делаю для for() в for(), для того же списка я, что и его способ, не работает. извините за мой плохой английский. @Hasse
Ответ №3:
Вы перебираете ту же длину. В вашем цикле оба конца находятся в позиции letras.Count
, но список имеет разную длину.
Ваш цикл должен повторяться по длине каждого массива следующим образом:
for (int i = 0; i < letras.Count; i )
{
for (int n = 0; n < fila.Count; n )
{
//...
}
}
Обратите внимание, что первый массив имеет значение от 0 до letras.Count
.
И второй идет от 0 до fila.Count
.
Теперь каждая позиция повторяется.