2016-05-20 5 views
0

私のコードが使用されていましたが、オブジェクトが配列に正しく保存されましたが、実際には動作しません。作業。これは、もともとどのように見えるかです:配列は情報を保存しません

私は入れ
if (a == 2) {  
     ObjectOutputStream utström = new ObjectOutputStream 
       (new FileOutputStream("register.data")); 
     int n = 0; 
     while (true) { 
      j[n] = new nyHund(); 
      String s1 = JOptionPane.showInputDialog("Hundens namn?"); 
       if (s1 == null) 
         break; 
       j[n].namn = s1; 
       s1 = JOptionPane.showInputDialog("Hundens mor?"); 
       j[n].mor = s1; 
       s1 = JOptionPane.showInputDialog("Hundens far?"); 
       j[n].far = s1; 
        } 
      n++;  
       } 

     utström.writeObject(j); 
     utström.close(); 
    } 

JOptionPane.showMessageDialog(null, j[n].namn + j[n].mor + j[n].far); 

を "write.object" はそれだけで私に "nullnullnull" を与えるが、私は

j[n].far = s1; 
直後にそれを置くとき後

これは機能します。だから、それはちょうど適切に保存されません。私は削除、追加、中括弧とコードの周りを移動しようとしましたが、それは動作していません。私はまだそれが中括弧と関係があると疑っています。 ここにプログラム全体があります。ローカルの入出力ストリームとそのようなものを持っている理由は、これを解決しようとする試みであり、最初にそれらを宣言することは何もしません。そして、それは非常に基本的ですが、これは私がJavaでやっている最初のもののようなものです。

import javax.swing.*; 
import java.util.*; 
import java.io.*; 
public class Kennel2 { 

public static void main(String[] args) throws IOException { 


    Object [] fönster = {"Avregistrera hund","Registrera intressent", 
    "Registrera hund"}; 
    int a = JOptionPane.showOptionDialog(null, "Välkommen till Hellbergs Kennel!", 
      "Hellbergs Kennel", JOptionPane.YES_NO_CANCEL_OPTION, 
      JOptionPane.QUESTION_MESSAGE, null, fönster, fönster[2]); 
    nyIntr[]i = new nyIntr[100]; 
    nyHund[]j = new nyHund[100]; 
    boolean ok = true; 


    if (a == 1) { 
     ObjectOutputStream utström = new ObjectOutputStream 
       (new FileOutputStream("register.data")); 
     int n = 0; 
     while (true) { //Registrera ny intressent 
      i[n] = new nyIntr(); 
      String s1 = JOptionPane.showInputDialog("Intressentens namn?"); 
      if (s1 == null) 
       break; 
      i[n].namn = s1; 
      s1 = JOptionPane.showInputDialog("Intressentens telefonnummer?"); 
      i[n].tlfNr = s1; 

      s1 = JOptionPane.showInputDialog("Vilken valp är hen intresserad av?"); 
      i[n].valp = new nyHund(); 
       if (i[n].valp.aktiv = true) { 
        j[n].intressent.namn = i[n].namn; 
        j[n].namn = i[n].valp.namn; 
       } 
      else { 
       JOptionPane.showMessageDialog(null, "Denna hund är ej tillgänglig"); 
        break; 
        } 
      n++;  
       } 
     JOptionPane.showMessageDialog(null, i[n].namn + i[n].tlfNr); 
     utström.writeObject(i); 
     utström.close(); 

} 
if (a == 0) { 
     ObjectInputStream inström = new ObjectInputStream 
       (new FileInputStream("register.data")); 
     ObjectOutputStream utström = new ObjectOutputStream 
       (new FileOutputStream("register.data")); 

    Scanner data = new Scanner (new File("register.data")); 
    int n = 0; 
    while (data.hasNext()) { 
     j[n] = new nyHund(); 
     j[n].namn = data.next(); 
     n++; 
    } 
    while (true) { 
     String sökt = JOptionPane.showInputDialog("Vilken hund söker du?"); 
     if (sökt == null) 
      break; 
     int k = 0; 
     for (; k<n; k++) 
      if (j[n].namn.equals(sökt)) 
       break; 
     if (k < n) { 
      j[n].aktiv = false; 
     JOptionPane.showMessageDialog(null, "Hunden är avaktiverad"); } 
     else { 
      JOptionPane.showMessageDialog(null, "Hunden kunde ej hittas"); 
      break; 
      } 
     utström.writeObject(j); 
     data.close(); 
     inström.close(); 
    utström.close(); 
    } 

} 
if (a == 2) {  
     ObjectOutputStream utström = new ObjectOutputStream 
       (new FileOutputStream("register.data")); 
     int n = 0; 
     while (true) { //Registrera ny hund 

      String s1 = JOptionPane.showInputDialog("Hundens namn?"); 
       if (s1 == null) 
         break; 
       j[n] = new nyHund(); 
       j[n].namn = s1; 
       s1 = JOptionPane.showInputDialog("Hundens mor?"); 
       j[n].mor = s1; 
       s1 = JOptionPane.showInputDialog("Hundens far?"); 
       j[n].far = s1; 
       s1 = JOptionPane.showInputDialog("Hundens födelseår?"); 
       for (int k=1; k<s1.length(); k++) 
        if (s1.charAt(k) < '0' || s1.charAt(k) > '9'){ 
         ok = false; 
         JOptionPane.showMessageDialog(null, "Ogiltigt format"); 
         break; 
} 
       else { 
       int l = Integer.parseInt(s1); 
       j[n].födelsedatum = l; 
        n++; 
        } 

       } 

     utström.writeObject(j); 
     utström.close(); 
    } 

} 
} 

答えて

0

あなたは、最後のループの呼び出しであなたの配列の最後の要素を過ぎnを繰り返してきました。配列に60個の要素(0-59)が含まれている場合は、ループが終了した後にn = 60となります。j[n]のデータをに設定した後にn++を実行したため、意味のあるデータが得られません。

ループの終了後にn--を追加するか、新しい要素を作成するときにのみnを繰り返します。

+0

しかし、私はそれがちょうど私にNullPointerExceptionを与えることを修正した – elushh

1

あなたのコードが正しく

これはあなたのwhileループでは実装されていないので、その中に、あなたはあなたが入れているすべての値が0指標であり、その都度、それn

while (true) { 
     j[n] = new nyHund(); 
     String s1 = JOptionPane.showInputDialog("Hundens namn?"); 
      if (s1 == null) 
        break; 
      j[n].namn = s1; 
      s1 = JOptionPane.showInputDialog("Hundens mor?"); 
      j[n].mor = s1; 
      s1 = JOptionPane.showInputDialog("Hundens far?"); 
      j[n].far = s1; 
    } 

をインクリメントされていません新しいオブジェクトに置き換えられます。

ループが壊れた後、n++によって1に増分され、インデックス1には値がないため、nullが表示されます。

修正するには、n++をwhileループに入れて、正確な配置をnew nyHund()にしてください。

while (true) { 

      String s1 = JOptionPane.showInputDialog("Hundens namn?"); 
      if (s1 == null) 
        break; 
      j[n] = new nyHund(); 
      j[n].namn = s1; 
      s1 = JOptionPane.showInputDialog("Hundens mor?"); 
      j[n].mor = s1; 
      s1 = JOptionPane.showInputDialog("Hundens far?"); 
      j[n].far = s1; 
      n++; 
    } 

また、値の印刷には正しいインデックスを使用します。

希望します。

+0

それは私がそれをするときに私にNullPointerExceptionを与える:/ – elushh

+0

それはあなたにNPEを与えるか?唯一のn ++後 – Sanjeev

+0

、それが動作する前に、問題は、それがあなたのshowMessageDialogを削除するか、showMessageDialog – elushh

関連する問題