0
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

4 に答える 4

6

あからさまな答えを与えるのではなく、いくつかのヒントを次に示します。

  1. にループがありませんBubbleSort()

  2. ファイルからすべての番号を読み込んだBubbleSort()、一度だけ呼び出してください。つまり、呼び出しをループの外に移動します。while

  3. 変数をインクリメントすることはないため、ループのたびiに上書きするだけです。myList[0]while

  4. 配列はサイズ変更できません。myList[1]またはに割り当てようとするmyList[2]と、ArrayIndexOutOfBoundsExceptionエラーが発生します。これを解決するにはいくつかの方法があります。1 つは、 から に変更することint[] myList = {100}ですArrayList myList = new ArrayList()。で数値を追加しmyList.add(number)、 で調べることができますmyList.get(i)

于 2009-10-31T08:44:55.687 に答える
2

プログラムには、ソート部分だけでなく、いくつかの問題があります。

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]スローされます(これは、増加しないため、に等しくなります)。ArrayIndexOutOfBoundsExceptioni+11i

一般的に、そして特に初心者にとってはArrayList、通常の配列よりも使用する方が良いでしょう。また、最初に配列に入力する必要があり、すべての要素が揃った後でのみ、配列を並べ替える必要があります。最後に、変数をクラスメンバーではなくローカルにすることをお勧めします。だからそれはあなたのmain関数を次のようにするでしょう

ArrayList myList = new ArrayList();
while(scan.hasNext()) {
    myList.append(scan.nextInt());
}
Bubblesort(myList);

Bubblesort次に、をとるように変更しますArrayList。次に、ループインデックスをメソッドiに対してローカルにすることもできますBubblesort。それが完了したら、バブルソートアルゴリズムを機能させる作業を行うことができます。配列の境界外にアクセスしないように、配列のインデックスに注意することを忘れないでください。

于 2009-10-31T08:55:11.110 に答える
1

http://www.leepoint.net/notes-java/data/arrays/32arraybubblesort.html <- バブル ソートの例 ;)

于 2009-10-31T08:36:46.197 に答える
0

これを変える:

 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の回答に従ってソート方法を変更する

于 2009-10-31T08:47:25.223 に答える