2013-10-22 4 views
0

교실에서 우리는 두 개의 클래스를 정렬하고 min에서 정렬하는이 클래스를 만들었습니다. ~ 최대. 이 클래스를 변경하여 이름이있는 텍스트 파일을 읽고 숫자 텍스트 파일에서 읽는 double 값 대신 사전 순으로 정렬하는 데 관심이 있습니다.double을 사용하는 대신 String을 읽도록이 클래스를 변경하는 방법에 대한 제안이 있으십니까?

package versionDouble; 

import java.io.File; 
import java.io.FileNotFoundException; 
import java.util.Arrays; 
import java.util.Scanner; 

public class Datos { 

    double[] datos; 


    public Datos(String fileString) { 

     int cuantos = contarDatos(fileString); 

     this.datos = new double[ cuantos ]; 

     leerDatos(fileString); 

    } // Datos 


    private void leerDatos(String fileString) { 

     try { 

      Scanner scanner = new Scanner(new File(fileString)); 

      for (int i = 0; i < this.datos.length; i++) { 

       this.datos[i] = scanner.nextDouble(); 

      } // for 

      scanner.close(); 



     } catch (FileNotFoundException e) { 

      e.printStackTrace(); 

     } // leerDatos 


    } // Datos class 


    @Override 
    public String toString() { 
     String string = ""; 

       string = Arrays.toString(this.datos); 

     return string; 

    } // toString 


    private int contarDatos(String fileString) { 


     int contador = 0; 

     try { 

      Scanner scanner = new Scanner(new File(fileString)); 

      while (scanner.hasNext()) { 

       scanner.nextDouble(); 

       contador++; 

      } // while 

      scanner.close(); 

     } catch (FileNotFoundException e) { 

      e.printStackTrace(); 

     } // catch 

     return contador; 

    } // contarDatos 


    public void selectionSort() { 


     for (int startScan = 0; startScan < this.datos.length; startScan++) { 

      int minIndex = startScan; 

      double minValue = this.datos[ minIndex ]; 

      for (int index = 0; index < this.datos.length; index++) { 

       if(this.datos[ index ] < minValue) { 

        minIndex = index; 
        minValue = this.datos[ index ]; 

       } // if 

      } // for interno 

      if( minIndex != startScan ) { 

       double temporary = this.datos[startScan]; 

       this.datos[ startScan ] = this.datos[ minIndex ]; 

       this.datos [ minIndex ] = temporary; 

      } // swap 

     } // for externo 

     Arrays.sort(this.datos); 

    } // selectionSort 

} // Class 

답변

0

당신은 예를 next() 또는 nextLine()를 들어, Scanner의 다른 멤버 함수를 호출해야합니다. 또한 여러 변수의 데이터 유형을 부동 소수점 수 대신 문자열을 저장하도록 변경하십시오. 또한 숫자 대신 알파벳 순으로 문자열을 비교하는 방법을 찾아야합니다.

+0

난 이미 당신이 제안 처음 두 가지 있지만, 세 번째, "알파벳 대신 숫자의 문자열을 비교하는 방법을 찾아"을했다, 그게 어디 있죠 나는 길을 잃었다. – Ehrmantraut

+0

문자열 클래스 메서드를 살펴 봅니다. –

0

가장 효율적이지는 않지만 빠른 해결책은 String.value(double d);을 호출하고 double의 String 표현을 얻을 수 있다는 것입니다.

예 :

import java.io.*; 

public class Test{ 
    public static void main(String args[]){ 
     double d = 102939939.939; 
     System.out.println("Return Value : " + String.valueOf(d)); 

    } 
} 

출력 : Return Value : 1.02939939939E8