2011-11-08 10 views
0

私はファイルから浮動小数点整数の束を読んでサブセットにソートする必要があるプロジェクトに取り組んでいます。サブセットは、その距離だけ離れてソートされる必要があります。私は最初にファイルから最初の要素を引き出し、それを距離比較として使用する必要があります。次に、次の要素aをとり、それを別のリストに入れて比較し、3番目の要素bを読み込み、aと比較します。 bはaから少なくともd離れている必要があります。そうであればaでサブセットに入れられます。それからbはaと等しくなり、最後まで下に移動してそれらの集合を作ると、それ以上要素がなくなるまで最初からやり直すことになります。ファイルから読み込んでサブセットにソートする

私は配列リストを使ってこれをしようとしていますが、これまでのところファイルを読み込んで配列リストに入れて並べ替えています。私は、最初の要素を引き出してから比較することに助けが必要です。

import java.io.File; 
import java.io.FileNotFoundException; 
import java.util.ArrayList; 
import java.util.Scanner; 
import java.util.Collections; 

public class FloatFromFile 
{ 
public static void main(String[] args) 
{ 
    Scanner file = null; 
    ArrayList<Float> list = new ArrayList<Float>(); 

    try 
    { 
     file = new Scanner(new File("test.txt")); 
    } 
    catch (FileNotFoundException e) 
    { 
     e.printStackTrace(); 
    } 

    while(file.hasNext()) 
    { 
     if (file.hasNextFloat()) list.add(file.nextFloat()); 
     else file.next(); 
    } 

    // display unsorted list 
    System.err.print("Origional List is:\n"); 
    for (Float i: list) System.out.println(i); 

    Collections.sort(list); 

    // display sorted list 
    System.err.print("Sorted List is:\n"); 
    for (Float i: list) System.out.println(i); 

      ArrayList<Float> sorted = new ArrayList<Float>(); 
    while (file.hasNext()) 
    { 
     Float val = file.nextFloat(); 
     int i = sorted.size(); 
     float temp = sorted.get(i-1); 
     while (i > 0 && temp > val) 
     { 
      i--; 
      temp = sorted.get(i-1); 
     } 
     sorted.insert(i, val); 
    } 
    for (Float i: sorted) System.out.println(i); 

    } 
} 

は、私は新しい方法で追加しましたが、私はまだ私がFloatFromFile.java:50エラー

を取得しています を動作するようになって問題があります:エラー:シンボルに sorted.insertを見つけることができません( i、val); ^ シンボル:メソッド(int型、フロート)を挿入 場所:変数の型のArrayListのソート 1エラー

+0

これは宿題ですか? –

+1

浮動小数点整数とは何ですか? – Thom

+0

申し訳ありません浮動小数点 – Drew

答えて

0

あなたが試すことができmany sorting algorithmsがあります。いずれにしても、各要素を1つずつ処理するため、挿入の並べ替えを使用できます。

List<Float> sorted = new ArrayList<Float>(); 
while (file.hasNext()) { 
    float val = file.nextFloat(); 
    int i = sorted.size(); 
    if (i == 0) { 
    sorted.add(val); 
    break; 
    } 
    float temp = sorted.get(i-1); 
    while (i > 1 && temp > val) { 
    i--; 
    temp = sorted.get(i-1); 
    } 
    if (temp > val) sorted.add(0, val); 
    else sorted.add(i, val); 
} 

これはエディタでコード化されているため、バグがある可能性がありますが、このようなものにする必要があります。

+0

エラーが発生しました – Drew

+0

「エラーが発生しました」より詳細を教えてもらえますか?どのようなエラー?どの行? – dee

+0

私の答えを変更しました。私はそれがNULLポインターの例外だと仮定していますか? – dee

関連する問題