0

저는 Java 초보자이고 배열 목록의 이진 파일 입력 및 출력을 사용하는 데 문제가 있습니다. 배열 목록의 데이터를 파일에 저장하고 콘솔에 표시하려고합니다. 여기 내 코드 중 일부가 실행되지만 잘못된 정보가 표시되고 경고 메시지가 표시됩니다. 이 문제의 원인에 대한 도움이 필요하십니까? 감사!Java - 배열 목록이있는 이진 파일

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의 에는에 올바른 동작이 포함되어 있는지 확인하십시오.