package arraySort;
import java.io.IOException;
import java.io.File;
import java.util.*;
public class openFile {
int x;
static int i;
static int[] myList = {100};
public static void main(String[] args){
try{
File myFile = new File("arraySort.txt");
Scanner scan = new Scanner(myFile);
while(scan.hasNext()){
myList[i] = scan.nextInt();
BubbleSort(myList);
System.out.println(myList[i]);
}
catch(IOException e){
System.out.println("File not found!");
}
}
public static void BubbleSort(int[] x){
if (x[i] > x[i + 1]){
int temp;
temp = x[i];
x[i] = x[i+1];
x[i+1] = temp;
}
}
}
4 に答える
あからさまな答えを与えるのではなく、いくつかのヒントを次に示します。
にループがありません
BubbleSort()
。ファイルからすべての番号を読み込んだ後
BubbleSort()
、一度だけ呼び出してください。つまり、呼び出しをループの外に移動します。while
変数をインクリメントすることはないため、ループのたび
i
に上書きするだけです。myList[0]
while
配列はサイズ変更できません。
myList[1]
またはに割り当てようとするmyList[2]
と、ArrayIndexOutOfBoundsException
エラーが発生します。これを解決するにはいくつかの方法があります。1 つは、 から に変更することint[] myList = {100}
ですArrayList myList = new ArrayList()
。で数値を追加しmyList.add(number)
、 で調べることができますmyList.get(i)
。
プログラムには、ソート部分だけでなく、いくつかの問題があります。
static int[] myList = {100};
この行はmyList
、単一の要素を含むサイズ1の配列として定義されます100
。次に、メインループは
while(scan.hasNext()) {
myList[i] = scan.nextInt();
BubbleSort(myList);
System.out.println(myList[i]);
}
このループでは増加しないため、ファイルから読み取ったi
値で単一の値を上書きするだけです。myList
また、Bubblesort
関数がにアクセスしようとすると、インデックスに要素がないためにがmyList[i+1]
スローされます(これは、増加しないため、に等しくなります)。ArrayIndexOutOfBoundsException
i+1
1
i
一般的に、そして特に初心者にとってはArrayList
、通常の配列よりも使用する方が良いでしょう。また、最初に配列に入力する必要があり、すべての要素が揃った後でのみ、配列を並べ替える必要があります。最後に、変数をクラスメンバーではなくローカルにすることをお勧めします。だからそれはあなたのmain
関数を次のようにするでしょう
ArrayList myList = new ArrayList();
while(scan.hasNext()) {
myList.append(scan.nextInt());
}
Bubblesort(myList);
Bubblesort
次に、をとるように変更しますArrayList
。次に、ループインデックスをメソッドi
に対してローカルにすることもできますBubblesort
。それが完了したら、バブルソートアルゴリズムを機能させる作業を行うことができます。配列の境界外にアクセスしないように、配列のインデックスに注意することを忘れないでください。
これを変える:
try{
File myFile = new File("arraySort.txt");
Scanner scan = new Scanner(myFile);
while(scan.hasNext()){
myList[i] = scan.nextInt();
BubbleSort(myList);
System.out.println(myList[i]);
}
catch(IOException e){
System.out.println("File not found!");
}
に:
try{
File myFile = new File("arraySort.txt");
Scanner scan = new Scanner(myFile);
while(scan.hasNext()){
myList[i] = scan.nextInt();
}
catch(IOException e){
System.out.println("File not found!");
}
BubbleSort(myList);
System.out.println(myList[i]);
}
@Federicoの回答に従ってソート方法を変更する