0

配列に入れたtxtファイルがあります。txt ファイル内のデータには、次のような形式のデータがあります。

Order #     Date     Name     City     State    Zip Code    Transaction Amount

各アイテムが列を表す行全体。

次に、これらに回答が入力された行がさらに 1000 行あります。取引金額でソートしたいのですが。

これが私のコードです:

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;

public class Rewards {

public static void main(String[] args) throws FileNotFoundException {

    String fileName = ("test.txt");
    FileReader fin = new FileReader("C:/Users/Jordan/Desktop/Project5Text.txt");
    Scanner src = new Scanner(fin);
    ArrayList<String> lines = new ArrayList<String>();
    src.useDelimiter(":");

    Random rand = new Random();

    while (src.hasNext()) {
        String l = src.nextLine();
        if (!l.equals(""))
            lines.add(l);
    }
    String[] randomChoices = new String[1]; // Number of random choices

    for (int i = 0; i < randomChoices.length; i++) {
        String randomString = lines.get(1 + rand.nextInt(lines.size() - 1));
        randomChoices[i] = randomString;
    }

    for (String s : randomChoices)
        System.out.println("Random Winner for $20 gift card is:       " +s);

    String[] randomChoices1 = new String[1]; // Number of random choices

    for (int i = 0; i < randomChoices1.length; i++) {
        String randomString = lines.get(1 + rand.nextInt(lines.size() - 1));
        randomChoices1[i] = randomString;
    }

    for (String s : randomChoices1)
        System.out.println("Random Winner for $40 gift card is:       " +s);

    String[] randomChoices2 = new String[1]; // Number of random choices

    for (int i = 0; i < randomChoices2.length; i++) {
        String randomString = lines.get(1 + rand.nextInt(lines.size() - 1));
        randomChoices2[i] = randomString;
    }

    for (String s : randomChoices2)
        System.out.println("Random Winner for $60 gift card is:       " +s);

    String[] randomChoices3 = new String[1]; // Number of random choices

    for (int i = 0; i < randomChoices3.length; i++) {
        String randomString = lines.get(1 + rand.nextInt(lines.size() - 1));
        randomChoices3[i] = randomString;
    }

    for (String s : randomChoices3)
        System.out.println("Random Winner for $80 gift card is:       " +s);

    String[] randomChoices4 = new String[1]; // Number of random choices

    for (int i = 0; i < randomChoices4.length; i++) {
        String randomString = lines.get(1 + rand.nextInt(lines.size() - 1));
        randomChoices4[i] = randomString;
    }

    for (String s : randomChoices4)
        System.out.println("Random Winner for $100 gift card is:      " +s);

}
}

ここに私が使用しているテキストファイルの一部があります。

注文番号 日付 名 ミドルネーム イニシャル 姓 住所 市区町村 州 郵便番号 電子メール 取引金額

1 2012 年 8 月 26 日 Kristina H Chung 947 Martin Ave. Muncie CA 46489 khchung@business.com $593

2 2012 年 11 月 16 日 Paige H Chen 15 MainWay Rd. ダラス HI 47281 phchen@business.com $516

3 2012 年 11 月 10 日 シェリー E メルトン 808 ワシントン ウェイ ブラジル CA 47880 semelton@business.com $80

4 2012 年 9 月 20 日 Gretchen I Hill 56 Washington Dr. Atlanta FL 47215 gihill@business.com $989

5 2012 年 3 月 11 日 Karen U Puckett 652 Maplewood Ct. ブラジル FL 46627 kupuckett@business.com $826

6 2012 年 7 月 4 日 パトリック O ソング 679 MainWay Rd. ラファイエット GA 47161 posong@business.com $652

4

3 に答える 3

0

これを行う 1 つの方法は、ファイル内の行を表すことができるクラスを作成することです。このクラスでは、すべての列にフィールドがあります。このクラスに Comparable インターフェースを実装させます。これにより、compareTo() メソッドの実装が強制されます。

これが完了したら、このクラスで ArrayList を作成し、組み込みの sort() メソッドを使用して並べ替えることができます。

于 2013-11-10T18:36:03.310 に答える
0

行を論理的な方法で格納するクラスを最初に作成することをお勧めします。

class Transaction{
    String date;
    String name;
    String address;
    int amount;
    // etc...
}

次に、各トランザクションを List に保存し、カスタム Comparator を記述できます。

List<Transaction> transactions = new ArrayList<Transaction>();
...
Collections.sort(transactions, new Comparator<Transaction>(){
    public int compare(Transaction t1, Transaction t2){
        return Double.compare(t1.amount, t2.amount);
    }
});
于 2013-11-10T18:38:35.343 に答える