2013-07-24 17 views
-1

안녕하세요, 저는 자바에서 몇 가지 연습을하고 싶습니다. 숫자로 채워진 .txt 파일을 읽은 다음 최대에서 최소까지 숫자로 만드는 것이 좋습니다.실행 오류가있는 정렬 알고리즘

내가 그렇게하기 위해 나는 몇 개의 수업을 만들었다.

import java.io.*; 
import java.util.LinkedList; 

public class Texto { 

    String fileName; 

    public Texto(String nombreArchivo) { 
     this.fileName = nombreArchivo;     
    } 

    public LinkedList storeArray() { 
     LinkedList list = new LinkedList(); 
     int a=0; 
     try { 
      FileReader file = new FileReader(fileName); 
      BufferedReader buffer = new BufferedReader(file); 
      String temp=""; 
      while (temp!=null) { 
       list.add(buffer.readLine()); 
       temp=list.get(a).toString(); // line 25 
       a++;     
      } 
      list.remove(a); 
     } catch (IOException e) { 
      e.getMessage(); 
     } 
     return list; 
    } 

    public int getLength() { 
     return storeArray().size(); // line 41 
    } 

    public void orderFile() { 
     try { 
      FileWriter file = new FileWriter("archivoOrdenado.txt"); 
      BufferedWriter buffer = new BufferedWriter(file); 
      PrintWriter print = new PrintWriter(buffer); 
      int array[] = new int[getLength()]; // line 52 

      for (int i=0;i<getLength();i++) { 
       array[i]=(Integer)storeArray().get(i); 
      } 

      int temp; 

      for (int i=0;i<getLength();i++) { 
       for (int j=1;i<getLength();j++) { 
        if (array[i]<array[j]) { 
         temp=array[i]; 
         array[i]=array[j]; 
         array[j]=temp; 
        } 
       } 
      } 

      for (int i=0;i<getLength();i++) { 
       print.println(array[i]); 
      } 
      print.close(); 
      buffer.close(); 

     } catch (IOException e) { 
      e.getMessage(); 
     } 

    } 
} 

그리고 다른 클래스 y를 호출

이 같은이 방법 :

Exception in thread "main" java.lang.NullPointerException 
    at Texto.storeArray(Texto.java:25) 
    at Texto.getLength(Texto.java:41) 
    at Texto.orderFile(Texto.java:52) 
    at Main.main(Main.java:6) 

이 라인 25 :

public class Main { 
    public static void main(String[] args) { 
     Texto t = new Texto("numeros.txt"); 
     t.orderFile(); 
    } 
} 

실행 오류가 말한다 temp=list.get(a).toString();
이 내 코드입니다 41 : return storeArray().size();
52 : int array[] = new int[getLength()];

이 사실이를 해결하기 바로 거기로, list.remove(a); 루프의 끝 부분도 삭제 될 수 있습니다 후 있다는 그런 다음이

String temp=""; 
    while (temp!=null) { 
     temp=buffer.readLine(); 
     if (temp != null) { 
      list.add(temp); 
     } 
    } 

같은으로 재 작성

String temp=""; 
    while (temp!=null) 
    { 
     list.add(buffer.readLine()); // buffer.readLine() will return null at EOF 
            // but that isn't tested here 
     temp=list.get(a).toString(); // so at EOF you .toString() null - NPE. 
     a++;     
    } 

:

+0

컴파일러 오류 메시지가 무엇입니까? 게시 해주세요. – rgettman

+2

그럼, 이제는 컴파일을 거부하는 곳을 추측해야합니다. – fvu

+0

오케이, 미안, 내가 서둘러 2 게시 할 생각합니다. 그것은 말한다 Texto.storeArray (Texto.java:25) Texto.getLength에서 \t (Texto.java:41) Texto.orderFile에서 \t (Texto.java에서 스레드 예외 "주"java.lang.NullPointerException이 \t : 52) \t at Main.main (Main.java:6) –

답변

2

는 의견에 따라 너는 null로 끝났다.

편집 : 단지 1 비교, 더 컴팩트하지만 어쩌면 조금 덜 읽을 수 비트 버전

String temp=""; 
    while ((temp = buffer.readLine()) != null) { 
     list.add(temp); 
    } 
+0

덕분에,이게 도움이되었다, 그런 생각이었고, 그냥 2 "temp! = null"아이디어가 마음에 들지 않았다. 이제 오류 코드 예외 "main"스레드 java.lang.ClassCastException : java.lang.String을 java.lang.Integer로 변환 할 수 없습니다.\t at Texto.orderFile (Texto.java:56) \t at Main.main (Main.java:6) –

+0

새로운 오류가 무슨 일이 일어나고 있는지 정확히 말합니다. : array [i] = (Integer) storeArray(). get (i);'문자열을 정수로 형 변환 (변환 변환)하려고하면 할 수 없다. 증가하는 숙제로 인해 팁이 있습니다. [Integer 's JavaDoc] (http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html)에서 몇 가지 방법이있을 수 있습니다. String에서 Int를 파싱하려면 :-) – fvu