2012-12-02 76 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行有多少个成员。