2013-10-05 6 views
0

Я действительно новичок в Java. Я пытаюсь принимать значения из входного файла, который я сделал в eclipse, и пытаюсь сохранить их в 2D-массиве. Вход:Java, входной файл в 2D-массив

20 -33 33 1

3 -1 46 -6

Я могу сохранить его в обычный массив тонкой, но не имеет значения, что я попробуйте, я не могу понять, как его сохранить в 2d-массив в приведенной выше форме. Я пробовал для циклов, но он сохранил все 12 чисел для каждой итерации цикла. Я пытался использовать переменные и просто увеличивал их, как для обычного массива, и просто ничего не сохранял. Любая помощь в том, как это сделать, код для регулярного массива ниже, выводит на экран следующее:

[31, 22, 23, 79, 20, -33, 33, 1, 3, -1, 46 , -6]

import java.io.*; 
import java.util.Arrays; 
import java.util.StringTokenizer; 

public class ArrayMatrix2d { 

public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    if (args.length == 0){ 
     System.err.println("Usage: java Sum <filename>"); 
     System.exit(1); 
    } 

    try { 
     //int[][] matrix = new int[3][4]; 
     int MyMat[] = new int[12]; 
     int num = 0; 

     //int row = 0; 
     //int column = 0; 
     BufferedReader br = new BufferedReader(new FileReader(args[0])); 
     String line; 
     while((line = br.readLine()) != null) { 
      StringTokenizer st = new StringTokenizer (line); 
      while (st.hasMoreTokens()){ 
       int value1 = Integer.parseInt(st.nextToken()); 
       MyMat[num] = value1; 
       num++;    
      } 
     } 
     System.out.println(Arrays.toString(MyMat)); 
     br.close(); 
    }  
    catch(Exception e) {}   
} 

}

ответ

1

Вы можете сделать свой matrix так

int[][] matrix=new int[3][]; //if the number of columns is variable 

int[][] matrix=new int[3][4]; //if you know the number of columns 

и в петле вы получаете

int i=0; 
while((line = br.readLine()) != null) { 
     StringTokenizer st = new StringTokenizer (line); 
     int num=0; 
     //the next line is when you need to calculate the number of columns 
     //otherwise leave blank 
     matrix[i]=new int[st.countTokens()]; 
     while (st.hasMoreTokens()){ 
      int value1 = Integer.parseInt(st.nextToken()); 
      matrix[i][num] = value1; 
      num++;    
     } 
     i++; 
} 
+0

Спасибо за помощь. Теперь я получаю следующий вывод: [[31, 22, 23, 79], null, null]. Я, наверное, сделал опечатку или что-то в этом роде, попытаюсь ее проследить, но, безусловно, идет в правильном направлении. – user2849168

+0

Кажется, что ваша вторая и третья строки не построены. – hamon

+0

Ага, получилось, спасибо миллион. Просто моя заявка на печать не в том месте. Спасибо! – user2849168

1

Если вы используете Java 7 вы можете загрузить текстовый файл List. Как я знаю, что это кратчайший путь для создания String [] []

String[][] root; 

List<String> lines = Files.readAllLines(Paths.get("<your filename>"), StandardCharsets.UTF_8); 

lines.removeAll(Arrays.asList("", null)); // <- remove empty lines 

root = new String[lines.size()][]; 

for(int i =0; i<lines.size(); i++){ 
    root[i] = lines.get(i).split("[ ]+"); // you can use just split(" ") but who knows how many empty spaces 
} 

Теперь вы заселены root[][]

Надеются, что это поможет вам

+0

Привет, я очень ценю помощь, но мой Java является настолько основополагающим, что я просто не понимаю, что здесь происходит. Спасибо хоть! – user2849168

+1

Вы можете попробовать отладить и посмотреть, как это работает. С 1-й строкой вы помещаете имя файла и получаете список строк. Вторая строка удаляет все пустые строки в файле. Итак, вы отрезали свой код от 20 строк до 4 –

+0

Кстати, узнать не поздно;) –

0

С надеждой, что мой код будет полезен для вас:

java.util.Scanner scan = new java.util.Scanner(System.in); 
int [] ar= Arrays.stream(scan.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray(); 
int m=ar[0]; 
int n=ar[1]; 
int myArray[][]=new int[m][n]; 
for (int i = 0; i < m; i++) 
    myArray[i]= Arrays.stream(scan.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray(); 
Смежные вопросы