2016-04-30 4 views
-2

Очень новичок в java. Моя программа печатает только длинный столбец вместо 2d-массива. Для тестирования я использую файл с 10 строками и 20 столбцами, но фактический файл будет состоять из 20 столбцов и нескольких тысяч строк, я не знаю, сколько. Я прочитал все сообщения, которые я мог найти в Интернете по этой теме, но все еще не мог заставить программу работать. Есть идеи?чтение txt-файла в 2d-массив java

1 2 4 6 9 13 15 16 21 28 34 37 41 48 50 52 53 54 57 68 
6 7 10 17 23 24 27 28 31 39 42 43 46 48 50 55 60 61 67 70 
2 3 5 7 11 14 15 20 28 45 46 47 48 52 56 61 62 63 66 70 
4 5 7 11 13 15 19 23 24 27 28 35 38 40 48 50 57 58 64 66 
3 8 20 26 27 32 36 38 39 43 45 47 50 53 54 56 59 61 67 68 
1 3 5 7 15 19 26 30 31 36 41 44 48 49 56 58 59 60 61 65 
1 2 4 6 9 13 15 16 21 28 34 37 41 48 50 52 53 54 57 68 
6 7 10 17 23 24 27 28 31 39 42 43 46 48 50 55 60 61 67 70 
2 3 5 7 11 14 15 20 28 45 46 47 48 52 56 61 62 63 66 70 
4 5 7 11 13 15 19 23 24 27 28 35 38 40 48 50 57 58 64 66 

Вот код

try { 
    FileInputStream fstream = new FileInputStream("C:\\keno.txt"); 

    // Get the object of DataInputStream 
    DataInputStream in = new DataInputStream(fstream); 
    BufferedReader br = new BufferedReader(new InputStreamReader(in)); 
    String strLine = ""; 
    String[] tokens; 

    //Read File Line By Line 
    int row = 0; 
    String userdata [][]= new String [10][21]; 
    while ((strLine = br.readLine()) != null) { 
     // Copy the content into the array 
     tokens = strLine.split(" +"); 
     for(int j = 0; j < tokens.length; j++) { 
      userdata[row][j] = tokens[j]; 
     } 
     row++; 
    } 
    for(int i = 0; i < userdata.length; i++) { 
     for(int j=0; j < userdata[i].length; j++){ 
      System.out.println(userdata[i][j]); 
     } 
    } 
    in.close(); 
} catch (Exception e) { 
    System.err.println("Error: " + e.getMessage()); 
} 
+0

'' «Любые идеи?» - разбить большую проблему в свои более мелкие шаги, в том числе и чтение в текстовых файлах, разбор строки текста, создания массивов и т.д., а затем вернуться с гораздо более конкретный и ответный вопрос, если вы застряли на одном из этих шагов. «Я читал все сообщения, которые я мог найти в Интернете по этой теме, но все еще не мог заставить программу работать». «И вы не показали нам, что не работает для вас, и без этого , как можно приветствовать? Пожалуйста, покажите нам свой уместный код и любые описания неправильного поведения. Голосование, чтобы закрыть вашу публикацию этой важной информации. –

+0

укажите код –

+0

[Вы уже задали этот вопрос на этом сайте] (http://stackoverflow.com/questions/36656388/processing-range-of-lines-in-a-2d-array-or-file) ! –

ответ

0


я написал короткую программку, которая делает то, что я думаю, что вы хотите сделать. мой код сначала извлекает все данные из txt-файла в stringarray, а затем разбивает каждую строку на разделитель "" (пробел). В конце строка разбирается в длинном формате. надеюсь, это поможет вам.
ВАЖНОЕ ПРИМЕЧАНИЕ: txt-файл должен иметь равные размеры, то есть если первая строка содержит 20 элементов, у EACH ROW должно быть 20 элементов. И: каждая строка должна заканчиваться элементом, а не пробелом. Дайте мне знать, если это было полезно, а если нет, то у вас были проблемы!
Greetz

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

public class ReadFileInto2dArray{ 

    public static void main(String[] arg) throws FileNotFoundException, IOException, NumberFormatException { 

     // IMPORT DATA FROM TXT FILE AS STRINGARRAY 
     String filedirectory = "C:\\Users\\thomas\\Desktop\\Neuer Ordner\\keno.txt"; 
     BufferedReader b = new BufferedReader(new FileReader(filedirectory)); 
     String str=null; 
     ArrayList<String> lines = new ArrayList<String>(); 
     while((str = b.readLine()) != null){ 
      lines.add(str); 
     } 
     String[] strArr = lines.toArray(new String[lines.size()]); 
     b.close(); 

     // GET DIMENSIONS: number of rows  
     int nRows = strArr.length;                   
     // GET DIMENSIONS: number of elements in the first line 
     int nCols = (strArr[0].length()-strArr[0].replace(" ", "").length())+1;  

     // INITIALIZE LONG 2D ARRAY (MATRIX) 
     long[][] data = new long[nRows][nCols]; 

     // SPLIT EACH STRING OF ROW INTO SUBSTRING AND PARSE TO LONG FORMAT 
     String[] split = new String[nCols]; 
     for (int r=0; r<nRows; r++){ 
      split = strArr[r].split(" "); 
      for (int c=0; c<nCols; c++) { 
       data[r][c] = Long.parseLong(split[c]); 
      } 
     } 
     b.close(); 

     // SHOW THAT IT WORKED 
     System.out.println("first element: data[0][0] should be 1: " + data[0][0]); 
     System.out.println("last element data[9][19] should be 66: " + data[9][19]); 

    } 
} 
+0

это дает мне ошибку «Исключение в потоке» main «java.lang.NumberFormatException: для строки ввода:« » – greuceanu

+0

и еще несколько: на java.lang.NumberFormatException.forInputString (NumberFormatException.java:65) \t на java .lang.Long.parseLong (Long.java:601) \t на java.lang.Long.parseLong (Long.java:631). Вы используете Netbeans? – greuceanu

+0

Я использовал eclipse !, но я нашел ошибку, я забыл за исключением одного исключения, теперь его исправлено (я обновил код)! он работает, когда вы вообще не используете какую-либо IDE и просто компилируете его в окне cmd. ВАЖНО: если вы используете mac, то строка «filedirectory» должна разделять папки с «/» вместо «\\». надеюсь, что это работает сейчас, дайте мне знать. – thomas