0

タイトルはちょっと言葉遣いなので、質問をもっとよく説明しようと思います。

したがって、基本的にこのプログラムが行うことは、テキストファイル(このようにソートされている)からインポートされた数値の大きなリストを取得することです。

3679       87
196        60
17914      12
18618      64
2370       65
... ...
etc. (for 45 more lines), 

次に、2つの列を2つの異なる配列に並べ替えてから、整数値で並べ替えます。左の列はアイテムID、右の列は在庫数です。

これまでに試したこと:リスト全体を1つの文字列配列にした後、配列を2つの配列リストに分割し、コンマごとに区切ってみました。しかし、私はそれをうまく行うことができませんでした。また、コンマをスキップして次の値を2つの異なる配列リストに追加するforループでそれを実行しようとしました。

これが私の現在のコードです:

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

public class Store {

public static void main(String[] args) {

    // **************Scanner s = new
    // Scanner(input).useDelimiter("\\s*,\\s*");
    ArrayList<Integer> numbers = new ArrayList<Integer>();
    ArrayList<Integer> ids = new ArrayList<Integer>();
    ArrayList<Integer> inventory = new ArrayList<Integer>();
    ArrayList<String> numbersString = new ArrayList<String>();
    try {
        int x = 0;
        int s = 0;
        Scanner in = new Scanner(new File("file50.txt"));
        in.useDelimiter(",");

        while (in.hasNext()) {// grabs all numbers in text file
            String f = in.next();
            numbersString.add(f);
            String toPrint = "";
            for (int i = 0; i < numbersString.size(); i++) {
                toPrint += numbersString.get(i) + " ";
            }

            String[] nums = toPrint.split("\\s+");
            // System.out.println(toPrint);
            System.out.print(Arrays.toString(nums));
            // System.out.print(nums);
        }

    } catch (Exception i) {

        i.printStackTrace();
    }

}
   }

誰かが私を助けて、私の目標を達成するために私が何をすべきかを提案することができれば、それは大いにありがたいです。それでも私がやろうとしていることを十分に明確にできなかった場合は、私に知らせてください。できる限り説明しようと思います

コードをコピーして貼り付けるのではなく、何をすべきかを考えただけです。

ありがとう

4

1 に答える 1

1

まず、テキストファイルの値がスペースで区切られている場合は、を削除しますin.useDelimiter(",");

ファイルから行を読み取るときの2番目のことは、String f = in.nextLine();代わりにを使用するString f = in.next();

したがって、IDと在庫アイテムをスペースで区切って、ファイルから各行を読み取ります。

IDと在庫アイテムを別々に取得したい場合は、次のように実行できます。

String[] tokens = f.split(" "); //splits the input by spaces

これで、IDtokens[0]と在庫アイテムがになりました。tokens[1];

したがって、行を読み取るたびにスペースで分割すると、を使用してIDをIDのリストに追加し、を使用tokens[0]して在庫を在庫のリストに追加できます。tokens[1]

別の注意点として、Map複数のリストを使用する代わりに、IDがキーで、在庫アイテムが値であるaを使用することをお勧めします。

だから次のようなもの:

Map<String,String> map = new HashMap<String,String>();
map.put(tokens[0],tokens[1]);

IDと在庫アイテムを整数にする代わりに、String次のようにすることができます。

int ID = Integer.parseInt(tokens[0]);
于 2013-03-19T19:52:20.757 に答える