0

私はJavaの初心者です。バイナリファイルの入出力リストを使用して問題が発生しています。私はファイル上の配列リストにデータを格納し、それをコンソールに表示するために使用しようとしています。ここで私のコードのいくつかは、それが実行されますが、間違った情報を表示し、私も警告を得ています。この問題を引き起こしていることについての助け?ありがとう!Java - バイナリファイルI/O with array-list

public class Towers { 
    public static ArrayList<String> allMoves= new ArrayList<String>(); 
    static{ 
     allMoves.add("These Are the Disk Moves:"); 
    } 

    public static void move(final int aNumDisks){ 
     move(aNumDisks, 1, 2, 3); 
     String fileName = "solution.dat"; 
     try{ 
      ObjectOutputStream outputStream = 
        new ObjectOutputStream(
          new FileOutputStream (fileName)); 
      outputStream.writeObject(allMoves); 
      outputStream.close(); 
     } 
     catch (IOException e){ 
      System.out.println("Error writing to file " + fileName); 
      System.exit(0); 
     } 
    } 

出力ファイルをコンソールに表示します。

=== 0 disks move(int) === 
These Are the Disk Moves: 

=== 0 disks move(,,) === 
These Are the Disk Moves: 

=== 1 disk move(int) === 
These Are the Disk Moves: 
Move disk from 1 to 3 

=== 2 disks === 
These Are the Disk Moves: 
Move disk from 1 to 2 
Move disk from 1 to 3 
Move disk from 2 to 3 

=== 2 disks move(2,3,2,1) === 
These Are the Disk Moves: 
Move disk from 3 to 2 
Move disk from 3 to 1 
Move disk from 2 to 1 

=== 3 disks move(3) === 
These Are the Disk Moves: 
Move disk from 1 to 3 
Move disk from 1 to 2 
Move disk from 3 to 2 
Move disk from 1 to 3 
Move disk from 2 to 1 
Move disk from 2 to 3 
Move disk from 1 to 3 

をしかし、イムはこれを取得:

public class TReporter {   
    public static void reportSol(){ 
     String fileName = "solution.dat"; 
     ArrayList<String> allMovesA = null; 
     try{ 
      ObjectInputStream inputStream = 
        new ObjectInputStream(
          new FileInputStream (fileName)); 
      allMovesA = (ArrayList<String>)inputStream.readObject(); //WARNING! 
          //Type safety: Unchecked cast from Object to ArrayList<String> 
      inputStream.close(); 
     } 
     catch (Exception e){ 
      System.out.println("Problem reading the file " + fileName); 
      System.exit(0); 
     } 
     for (int i = 0; i < allMovesA.size(); ++i){ 
      System.out.println(allMovesA.get(i)); 
     } 

それはこのようなものが表示されます、あなたが得る

=== 0 disks move(int) === 
These Are the Disk Moves: 
Move disk from 1 to 3 
Move disk from 1 to 2 
Move disk from 3 to 2 
Move disk from 1 to 3 
Move disk from 2 to 1 
Move disk from 2 to 3 
Move disk from 1 to 3 

=== 0 disks move(,,) === 
These Are the Disk Moves: 
Move disk from 1 to 3 
Move disk from 1 to 2 
Move disk from 3 to 2 
Move disk from 1 to 3 
Move disk from 2 to 1 
Move disk from 2 to 3 
Move disk from 1 to 3 

=== 1 disk move(int) === 
These Are the Disk Moves: 
Move disk from 1 to 3 

=== 2 disks === 
These Are the Disk Moves: 
Move disk from 1 to 2 
Move disk from 1 to 3 
Move disk from 2 to 3 

=== 2 disks move(2,3,2,1) === 
These Are the Disk Moves: 
Move disk from 1 to 2 
Move disk from 1 to 3 
Move disk from 2 to 3 

=== 3 disks move(3) === 
These Are the Disk Moves: 
Move disk from 1 to 3 
Move disk from 1 to 2 
Move disk from 3 to 2 
Move disk from 1 to 3 
Move disk from 2 to 1 
Move disk from 2 to 3 
Move disk from 1 to 3 
+2

あなたは何を表示すると思われますか?現在表示されているものは何ですか?あなたはどんな警告を受けていますか?これらは、人々があなたのプログラムがなぜ機能しないのかを理解するために投稿する必要があるものです。 –

+1

宿題ですか?はいの場合は、そのままタグを付けます。私は主な方法も動きも見ません(int、int、int、int)。それらも投稿してください –

答えて

2

警告が完全に正常です。あなたは警告して行の前に次の行を挿入して、それを抑制することができます。

@SuppressWarnings("unchecked") 

そして、あなたが得た間違った情報のため:

  • あなたは、あなたがそれを読み取ろうとする前にファイルを書き込むことを確認してください古いバージョンのファイルを使用している可能性があります。
  • ArrayListのにはに正しい動きが含まれていることを確認してください。