2012-12-02 144 views
2

我試圖返回數組「席位」,本質上應該從文本文件返回數據 - 15x30網格的「#」。我已經嘗試了很多東西,但是我感到沮喪,因爲我對java有很少的經驗。我的代碼編譯但調用方法時無法正確打印。Java - 字符char文本文件讀入二維數組

如果任何人都可以幫助解決構造函數或方法,我將不勝感激......如果有什麼辦法可以避免使用非常複雜的代碼,我也會很感激。並解釋!謝謝!

import java.io.IOException; 
import java.io.BufferedReader; 
import java.io.FileReader; 
import java.io.FileNotFoundException; 
import java.util.*; 

public class TicketManager 
{ 
    private static int NUMROWS = 15; 
    private static int NUMCOLS = 30; 
    private char[][] seats = new char[NUMROWS][NUMCOLS]; 
    private double[] price = new double[NUMROWS]; 
    private int seatsSold; 
    private int totalRevenue; 

    public TicketManager() 
    { 
     try 
     { 
      BufferedReader br = new BufferedReader(new FileReader("seatAvailability.txt")); 
      String line = br.readLine();  

      while (line != null) 
      { 
       for (int i = 0; i < 15; i++) 
       { 
        seats[i] = line.toCharArray(); 
       } 
      } 
     } 
     catch(IOException exception) 
     { 
      System.out.println("Error processing file: " + exception); 
     } 
    } 

    public String returnSeats() 
    { 
     String result = ""; 
     for (int i =0; i <seats.length; i++) 
     { 
      for (int j = 0; j < seats.length; j++) 
      { 
       result += seats[i][j] + " "; 
      } 
      System.out.println(""); 
     } 
     return result; 
    } 
} 
+0

對不起,我的意思是第一個也是唯一的方法。我一直在使用構造函數很久,以至於我誤認爲它是一種方法! – user1869650

+1

'for(int i = 0; i

+0

*「我很抱歉」*編輯(和通知)是我所需要的。不需要道歉。 :) –

回答

0

循環中的輕微問題。更新下面的代碼段:

public TicketManager(){ 
    try{ 
    BufferedReader br = new BufferedReader(new FileReader("seatAvailability.txt")); 
     for (int i = 0; i < 15; i++) 
     String line = br.readLine();  
     seats[i] = line.toCharArray(); 
     } 
    }catch(IOException exception){ 
     System.out.println("Error processing file: " + exception); 
    } 
} 

它會讀取15行(行)的輸入。確保您在每行中輸入精確的30字符。 也不要在輸入行字符例如你的每一個線路輸入應該是這樣X0000xx00xx0xx0xx000xx0xxx0x00

在你returnSeats方法,在內部循環使用seats[0].lengthseats[i].length和StringBuilder的是:

public String returnSeats(){ 
    StringBuilder result = new StringBuilder(); 
    for (int i =0; i <seats.length; i++){ 
     for (int j = 0; j < seats[i].length; j++){ 
      //append seat character in the result string 
      result.append(seats[i][j]); 
     } 
     //append new line character in the string in between 
     result.append(System.lineSeparator()); 
    } 
    return result.toString(); 
} 
+0

修好了!謝謝! – user1869650

+0

@ user1869650如果是這樣,那麼不要忘記接受答案。 –

0

如果你有for (int j = 0; j < seats.length; j++),你需要有for (int j = 0; j < seats[i].length; j++)

這與多維數組的工作方式有關。它們是數組的數組。所以當你寫seats.length時,你在問有多少行。調用seats[i].length詢問第i行有多少個成員。