2013-09-27 15 views
1

我在CLI电子表格程序上做了一个项目。我使用此代码从文件输入:Java在单元数量的一半之后开始读取空值

DataInputStream in=new DataInputStream(System.in); 
    System.out.print("\nEnter filename (with path) - "); 
    String fn=in.readLine(); 
    FileReader fr=new FileReader(fn); 
    BufferedReader br=new BufferedReader(fr); 

    String sen=""; 
    while(true) 
    { 
     String sn=br.readLine(); 
     if(sn==null) 
      break; 
     sen=sen+sn; 
    } 
    StringTokenizer st=new StringTokenizer(sen,"|"); 
    String s[][][]=new String[(st.countTokens()/9)][9][3]; 
    int r_0=(st.countTokens()/9); 
    int r,c; 
    r=c=0; 

    for(int i=0;i<st.countTokens();i++) 
    { 
     StringTokenizer st1=new StringTokenizer(st.nextToken(),"ɰ"); 
     s[r][c][0]=st1.nextToken(); 
     s[r][c][1]=st1.nextToken(); 
     s[r][c][2]=st1.nextToken(); 

     System.out.println(s[r][c][0]+"\t"+s[r][c][1]+"\t"+s[r][c][2]); // to be deleted 
     c++; 
     if(c==9) 
     { 
      r++; 
      c=0; 
     } 
    } 

该电子表格默认有8个可见行(总共9个)。直到第5行,第5列(或直到s [5] [5] [0/1/2]),程序才正确读取文件中的值。但在此之后,它开始读取空值。我想知道这种突然偏离正常行为的原因。它是否与内存使用有关? [更新 - 这是细胞数量的一半之后发生的,没有具体[5,5,0]

样品输入:

ɰ  ɰ  |Aɰ  ɰ  |Bɰ  ɰ  |Cɰ  ɰ  |Dɰ  ɰ  |Eɰ  ɰ  |Fɰ  ɰ  |Gɰ  ɰ  |Hɰ  ɰ  |1ɰ  ɰ  |8ɰ  ɰ  | ɰ  ɰ  | ɰ  ɰ  | ɰ  ɰ  | ɰ  ɰ  | ɰ  ɰ  | ɰ  ɰ  | ɰ  ɰ  |2ɰ  ɰ  | ɰ  ɰ  | ɰ  ɰ  | ɰ  ɰ  | ɰ  ɰ  | ɰ  ɰ  | ɰ  ɰ  | ɰ  ɰ  | ɰ  ɰ  |3ɰ  ɰ  | ɰ  ɰ  | ɰ  ɰ  | ɰ  ɰ  | ɰ  ɰ  | ɰ  ɰ  | ɰ  ɰ  | ɰ  ɰ  | ɰ  ɰ  |4ɰ  ɰ  | ɰ  ɰ  | ɰ  ɰ  | ɰ  ɰ  | ɰ  ɰ  | ɰ  ɰ  | ɰ  ɰ  | ɰ  ɰ  | ɰ  ɰ  |5ɰ  ɰ  | ɰ  ɰ  | ɰ  ɰ  | ɰ  ɰ  | ɰ  ɰ  | ɰ  ɰ  | ɰ  ɰ  | ɰ  ɰ  | ɰ  ɰ  |6ɰ  ɰ  | ɰ  ɰ  | ɰ  ɰ  | ɰ  ɰ  | ɰ  ɰ  | ɰ  ɰ  | ɰ  ɰ  | ɰ  ɰ  | ɰ  ɰ  | 
+2

3D阵列是一个恐怖的故事即将发生。 –

+0

@SotiriosDelimanolis但它输入正确,直到[5,5,0]。 – Saptashwa

+0

仔细检查数据,并确保它遵循您期望的格式。 –

回答

3

您应该交换的循环

while (st.hasMoreTokens()) 

而不是for -loop。无论如何,你并没有使用i

此外,countTokens()功能中检索令牌改变其值(见Javadoc

+0

是的,它解决了这个问题。 – Saptashwa

+0

@Saptashwa你能否也接受答案? – t7bdh3hdhb

相关问题