Ujwal女子:
私は配列内で検索する必要があり、特定の番号を持つ配列の束を持つテキストファイルを持っています。テキストファイルには、次のようになります。
(8) {1, 4, 6, 8, 12, 22}
(50) {2, 5, 6, 7, 10, 11, 24, 50, 65}
(1) {1}
(33) {1, 2, 5, 6, 11, 12, 13, 21, 25, 26, 30, 33, 60, 88, 99}
(1) {1, 2, 3, 4, 8, 9, 100}
(1) {2, 3, 5, 6, 11, 12, 13, 21, 25, 26, 30, 33, 60, 88, 99}
括弧内の数字は番号です私は、バイナリ検索を使用して見つける必要があります。残りは、実際の配列です。私は、テキストファイルから、この配列を取得し、実際の配列としてそれを読むことができるだろうか分かりません。[これは私が取った前のコーディング競争上の問題であり、そして問題の上につもりです]
私はすでにバイナリ検索を行うための方法を持っている、と私はこのようなファイルを読み取るためにスキャナを使用しています:
Scanner sc = new Scanner(new File("search_race.dat"));
そして、ファイルをループのことができるようにし、それを読むためにwhileループを使用していました。
しかし、私は、中括弧内のものは、アレイと括弧内のものはそれを見つけるために、前記アレイ上のバイナリ検索を使用する必要があるものであることを知っているJavaの作成方法についてはこだわっています。
ABS:
あなたは、単に次のようにそれぞれの行(見つけるための番号や配列)を解析できます。
while (sc.hasNext()) {
int numberToFind = Integer.parseInt(sc.next("\\(\\d+\\)").replaceAll("[()]", ""));
int[] arrayToFindIn = Arrays.stream(sc.nextLine().split("[ ,{}]"))
.filter(x->!x.isEmpty())
.mapToInt(Integer::parseInt)
.toArray();
// Apply your binary search ! Craft it by yourself or use a std one like below :
// int positionInArray = Arrays.binarySearch(arrayToFindIn, numberToFind);
}
あなたがでReplaceAll好きではない場合は、下記の2により、ループ内の最初の行を置き換えることができます:
String toFindGroup = sc.next("\\(\\d+\\)");
int numberToFind = Integer.parseInt(toFindGroup.substring(1, toFindGroup.length()-1));
乾杯!