2012-12-11 68 views
-1

为什么我的petArray null? 的myArray的数组是好的,但IDK的为什么petArray是空为什么这个数组为null?

这是我的.txt文件:

112|C|Fluffy|4/1/2011|Tabby|Gray|M|Y|N|N 
332|D|Phydeaux|6/3/2009|Collie|White/Tan|M|N|N|N 
237|C|Snagglepuss|5/13/2010|Siamese|Sable|M|Y|Y|N 
165|C|Sylvester|1/12/2008|Tuxedo|Black/White|F|N|N|N 
113|C|Fluffy|499/1/2011|Tabby|Gray|M|Y|N|N 
333|X|Phydeaux|6/3/2009|Collie|White/Tan|M|N|N|N 
238|C|Snagglepuss|5/13/2010|Siamese|Sable|M|Y|Y|N 
166|C|Sylvester|1/12/2008|Tuxedo|Black/White|F|N|G|N 
114|C|Fluffy|4/1/2011|Tabby|Gray|M|Y|N|N 
334|D|12/4/2005|Phydeaux|Collie|White/Tan|M|N|N|N 
239|C|Snagglepuss|5/13/2010|Siamese|Sable|M|Y|Y|N 
167|P|Sylvester|1/12/2008|Tuxedo|Black/White|F|N|E|N 
115|C|Fluffy|4/1/2011|Tabby|Gray|M|Y| 
335|D|Phydeaux|6/3/2009|Collie|White/Tan|M|N|N|N 
240|C|Snagglepuss|5/13/2010|Siamese|Sable|M|Y|Y|N 
168|C|Sylvester|1/12/20085|Tuxedo|Black/White|F|N|N|N 

PetGUI.java:

import java.awt.BorderLayout; 
import java.awt.Component; 
import java.util.*; 
import java.awt.TextArea; 
import java.util.LinkedList; 
import javax.swing.*; 

import javax.swing.JFrame; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
/* 
* Makes a new JFrame thats makes two textareas, fills in the textareas 
* from the array and linkedlist. 
*/ 
public class PetGUI extends JFrame{ 
static int number; 
static String[] animalArray; 
static TextArea north; 
static TextArea south; 
public PetGUI(TextFileInput tfi){ 

    int lines = 0; 
    TextFileInput tfil = new TextFileInput("project4.txt"); 
    String rlines = tfil.readLine(); 
    while(rlines != null){ 
     lines++; 
     rlines = tfil.readLine(); 
    } 
    tfil.close(); 

    String [] myArray = new String[100]; 
    number = lines; 
    animalArray = myArray; 
    this.setSize(400,400); 
    this.setLocation(200, 200); 
    this.setTitle("Adoptable Pets"); 
    createFileMenu(); 
    createEditMenu(); 

    TextArea north = new TextArea(9,20); 
    TextArea south = new TextArea(9,20); 
    this.getContentPane().add(north,BorderLayout.NORTH); 

    this.getContentPane().add(south,BorderLayout.SOUTH); 
    north.setEditable(false); 
    south.setEditable(false); 
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    this.setVisible(true); 

    Cat c; 
    Dogs d; 


    AdoptablePet [] petArray = new AdoptablePet[lines]; 
    for(int i = 0; i < lines; i++){ 
     myArray[i] = tfi.readLine();; 
    } 
    tfi.close(); 

    for(int i = 0; i < lines; i++){ 
     if(myArray[i].charAt(4) == 'C'){ 
      String[] r = myArray[i].split("\\|"); 
      if(r.length != 9){ 
      try{ 

        throw new IllegalPetInput("Not the right length of input"); 
      } 
      catch(IllegalPetInput a){ 

      } 
      } 
      else 
       try{ 
       c = new Cat(Integer.parseInt(r[0]),r[1],r[2],r[3],r[4],r[5],r[6],r[7],r[8],Boolean.parseBoolean(r[9])); 
       petArray[i] = c; 
       } 
       catch(AdoptablePetException a){ 
        System.out.println("Wrong information for the cat."); 
       } 
     } 

     if(myArray[i].charAt(4) == 'D'){ 
      String[] r = myArray[i].split("\\|"); 
      if(r.length != 9){ 
      try{ 

        throw new IllegalPetInput("Not the right length of input"); 
      } 
      catch(IllegalPetInput a){ 

      } 
      } 
      else 
       try{ 
       d = new Dogs(Integer.parseInt(r[0]),r[1],r[2],r[3],r[4],r[5],r[6],r[7],r[8],Boolean.parseBoolean(r[9])); 
       petArray[i] = d; 

       } 
      catch(AdoptablePetException a){ 
       System.out.println("Wrong information for the cat."); 
      } 
     } 
    } 


    LinkedList l = new LinkedList(); 




    for(int i = 0; i < lines; i++) 
     System.out.println(myArray[i]); 
    System.out.println(); 
    for(int i = 0; i < lines; i++) 
     System.out.println(petArray[i]); 





    //Appends the north side of the texarea with all of the lines  
for(int i = 0; i < l.size(); i++) 
    north.append((String) l.get(i)); 


} 
+1

把一些调试语句到你的代码或使用调试器,和你可能会看到为什么数组为null。 –

+1

虽然不是你的问题的原因,但你在做空尝试的唯一方法是做一次投掷。也许你只是想在这些情况下在if和nix try/catch中投掷? – RonaldBarzell

+0

你正在捕捉并抛出一堆例外,我打赌每一行都无法解析,所以一切都是空的。 –

回答

2

我算10字段在你的数据,你的支票说应该只有9,然后抛出一个异常,被捕获并扔掉。

if(r.length != 9) 
{ 
    try 
    { 
      throw new IllegalPetInput("Not the right length of input"); 
    } 
    catch(IllegalPetInput a) 
    { 
     // you're throwing this away! bad form! 
    } 
} 

后来,你看看10个字段的数据!

c = new Cat(Integer.parseInt(r[0]),r[1],r[2],r[3], 
    r[4],r[5],r[6],r[7],r[8], 
    Boolean.parseBoolean(r[9])); // field number 10! 

你也行计数后关闭你的输入流:

TextFileInput tfil = new TextFileInput("project4.txt"); 
String rlines = tfil.readLine(); 
while(rlines != null){ 
    lines++; 
    rlines = tfil.readLine(); 
} 
tfil.close(); // stream closed! any reads after this should hypothetically have failed! 
你永远也重新开放,所以没有其他任何有效的方式

摆脱阵列并使用ArrayList,不要一次读取文件以查看您将提前有多少行。

+0

这个数组不能解释为'petArray'为'null'。也许它只是空的(长度为0)? –

+0

我解决了这些问题,仍然数组为空。任何其他想法? – user1893242

+0

我的回答可能有用? – sgowd

0

我怀疑问题是,你已经阅读文件来计算行数。再次将它们存储在一个数组中,您正在阅读它们。但是当你读取行数时,光标已经在文件的末尾。现在当你读这些字符串时,readline()返回null,这可能是你的数组为null的原因。

0

因为r.length总是10,从不9,就像你的if语句条件一样。你说

if(r.length != 9){ 
      try{ 

        throw new IllegalPetInput("Not the right length of input"); 
      } 
      catch(IllegalPetInput a){ 

      } 

所以,如果语句评估为真,抛出异常,然后立即引起了(你为什么这样做?)