0

У меня возникли проблемы с доступом к моему 2D-массиву (myArray) за пределами этого цикла. Я хочу получить к нему доступ с помощью других методов, но я не могу даже получить доступ к нему в этом методе. Он печатается правильно, поскольку он зацикливается, но пробная печатьПочему я не могу получить доступ к своему 2D-массиву за пределами цикла?

System.out.println(myArray[10][2]); 

всегда имеет значение null. Так что это похоже на то, что массив на самом деле не заполняется или что-то еще. Кто-нибудь знает, что я здесь делаю неправильно?

package titanic; 

import java.io.*; 
import java.util.*; 

public class Titanic { 


public static final int ROW = 1309; 
public static final int COLUMN = 6; 
public static String [][] myArray = new String[ROW][COLUMN]; 


public static String[][] arraySetup(){ 

    int recordCounter = 0; 
    String[][] myArray = new String[ROW][COLUMN]; 
    String[] name = new String [ROW]; 
    try { 
     BufferedReader br = new BufferedReader(new FileReader("C:/Users/Tom/Desktop/Titanic.txt")); 
     String line; 
     for (int i = 0; i < 1309; i++){ 
     while((line = br.readLine()) != null){ 

      String tmp[] = line.split("\t"); 
       myArray[i][0] = tmp[0]; 
       myArray[i][1] = tmp[1]; 
       myArray[i][2] = tmp[2]; 
       myArray[i][3] = tmp[3]; 
       myArray[i][4] = tmp[4]; 
       myArray[i][5] = tmp[5]; 
       System.out.println("myArray[i][5] = " + myArray[i][5]); 
       recordCounter++; 

      } 
     } 

    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    System.out.println(myArray[10][2]); 

    System.out.println(recordCounter + " records."); 
    return myArray; 
} 
+0

Сколько строк данных в вашем входном файле? Сколько вы читали? –

+0

Спасибо всем за помощь в первую очередь. Поэтому я исправил его так, чтобы массив инициализировал правильно, но теперь я не могу получить доступ к нему из других методов. Этот метод возвращает myArray, но по какой-либо причине значения имеют значение null в других методах. Не знаете, как это исправить. – AnecdotalEvidence

+0

@AnecdotalEvidence Обновите свой вопрос. – hrust

ответ

1

Как вы вам while цикл внутри for цикла, который используется для индексации вашего выходного массива while цикла всегда записывает в myArray[0][0] к myArray[0][5]

for (int i = 0; i < 1309; i++){ // i is 0 
    while((line = br.readLine()) != null){ // you go through all the lines while i is 0 

     String tmp[] = line.split("\t"); 
      myArray[i][0] = tmp[0]; 
      myArray[i][1] = tmp[1]; 
      myArray[i][2] = tmp[2]; 
      myArray[i][3] = tmp[3]; 
      myArray[i][4] = tmp[4]; 
      myArray[i][5] = tmp[5]; 
      System.out.println("myArray[i][5] = " + myArray[i][5]); 
      recordCounter++; 

     } 
    } 

Из-за того, что ваш чек всегда возвращает нуль.

System.out.println(myArray[10][2]); 
0

Не используйте для и пока петля вместе. Во время цикла for while вы читаете все содержимое файла, а все остальные позиции массива остаются пустыми. Попробуйте вместо этого:

int i=0; 
while ((line = br.readLine()) != null){ 
    String tmp[] = line.split("\t"); 
    myArray[i][0] = tmp[0]; 
    myArray[i][1] = tmp[1]; 
    ...  
    myArray[i][5] = tmp[5]; 

    i++; 
    System.out.println("myArray[i][5] = " + myArray[i][5]); 
    recordCounter++; 
} 
+0

Это то, что я закончил, и как только я переместил «int i = 0;» вне моей попытки это работало отлично! По какой-то причине я просто не могу получить доступ к массиву вне этого метода. – AnecdotalEvidence

0

Я думаю, что проблема в вашем коде прямо

for (int i = 0; i < 1309; i++){ // you loop 1308 time 
     while((line = br.readLine()) != null){ /* in each loop, you loop 
until you have read all the file so you read 1308 time the file. But when 
you reach the end of file on the first iterration, it wont read the file on the 1307 
other iterration and all data will be store in myArray[0][0-5]*/ 

      String tmp[] = line.split("\t"); 
       myArray[i][0] = tmp[0]; 
       myArray[i][1] = tmp[1]; 
       myArray[i][2] = tmp[2]; 
       myArray[i][3] = tmp[3]; 
       myArray[i][4] = tmp[4]; 
       myArray[i][5] = tmp[5]; 
       System.out.println("myArray[i][5] = " + myArray[i][5]); 
       recordCounter++; 

      } 
     } 
+1

Благодарим вас за это, я понял, что передумал структуру for/while loop. – AnecdotalEvidence

Смежные вопросы