2015-09-19 2 views
0

Я разрабатываю простую программу для печати номеров мест, где строка пронумерована от 1 до 5 и столбцы от a-e. код, который я использую, следующий:Элементы массива доступа в java вне цикла

public class JavaApplication5 { 
    public static void main(String[] args) { 
     int j =1,k; 
     int i; 
     char c; 
     String[] arr = new String[25]; 
     for(i = 0;i < arr.length;i++) 
     { 
      while(j <= 5) 
      { 
       for(k = 97;k < 102; k++) 
       { 
        c = ((char)k); 
        arr[i] = j + "" + c; 
        System.out.println(arr[i]); 
       } 
       j++; 
      } 
     } 
    } 
} 

Отображает желаемый результат. но когда я печатаю элемент за пределами цикла for, я получаю результат как нуль, как ниже

public static void main(String[] args) { 
    int j =1,k; 
    int i; 
    char c; 
    String[] arr = new String[25]; 
    for(i = 0;i < arr.length;i++) 
    { 
     while(j <= 5) 
     { 
      for(k = 97;k < 102; k++) 
      { 
       c = ((char)k); 
       arr[i] = j + "" + c; 
      } 
      j++; 
     } 
    } 
    System.out.println(arr[6]); 
} 

как решить эту проблему?

+0

Если у вас есть решение, которое отображает желаемый результат, что ваш вопрос? –

ответ

1

это не оставит все элементы утратившим

String[] arr = new String[25];

это будет перебирать до j == 5 так только до arr[5]

while(j <= 5) { 
    j++; 
} 

Поэтому arr[6] еще нулевой

0

Вы можете получить доступ к массиву элементы, которые обычно находятся вне цикла. В вашем примере arr [6] имеет значение null. Ошибка не в том, как вы к ней обращаетесь. (Хотя я не могу видеть эту ошибку еще;))

1

Изменить

обр [J] = J + "" + с;

вместо

обр [I] = у + "" + с;

Теперь это работает.

public static void main(String[] args) { 
    int j = 1, k; 
    int i; 
    char c; 
    String[] arr = new String[25]; 
    for (i = 0; i < arr.length; i++) { 
     while (j <= 5) { 
      for (k = 97; k < 102; k++) { 
       c = ((char) k); 
       arr[j] = j + "" + c; 
      } 
      j++; 
     } 
    } 
    System.out.println(arr[1]); 
    System.out.println(arr[2]); 
    System.out.println(arr[3]); 
    System.out.println(arr[4]); 
    System.out.println(arr[5]); 
    System.out.println(arr[6]); // null because your check j <= 5 in while loop 
} 
0

Проблема в вашем коде заключается в том, что вы просто пишете 5 раз по индексу 1, затем по 5 раз по индексу 2 и т. Д. Таким образом, вы никогда не писали на индекс 6. Ваш код должен быть изменен на код ниже:

String[] arr = new String[25]; 
int i = 0; 
int j = 1; 
while (j <= 5) { 
    for (k = 97; k < 102; k++) { 
     c = ((char) k); 
     arr[i++] = j + "" + c; 
    } 
    j++; 
} 
System.out.println(arr[6]); 

Потому что ваши петли пробежать 5 * 5 раз, то ваш индекс i никогда не будет проходить arr длину массива. Но вам лучше контролировать это так, чтобы ваш код от того, к ошибкам:

if(i < arr.length) { 
    arr[i++] = j + "" + c; 
} else { 
    break; 
} 
Смежные вопросы