0

私のコードは機能していますが、不要な番号が表示され、それらを取り除く方法がわかりません。何か提案をいただければ幸いです。

import java.util.Scanner;
import java.io.*;


 public class ArraySort1 {

  public static void main(String[] args) throws IOException {
  Scanner inputFile; 
  inputFile = new Scanner(new File("arrayex1.txt"));
  PrintWriter outputFile;
outputFile = new PrintWriter(new FileWriter("sorted.txt"));

      /* Declare the array */

int[] numbers = new int[10000];
int index = 0;

      int temp, smallest, smallest_index;

      /* Read the first number */
      numbers[index] = inputFile.nextInt();

      while(inputFile.hasNextInt()) {
        numbers[index] = inputFile.nextInt();
        index++;
        }
// Local variable
int swValue;

// Display menu graphics
System.out.println("============================");
System.out.println("|   MENU SELECTION DEMO    |");
System.out.println("============================");
System.out.println("| Options:                 |");
System.out.println("|        1. Selection Sort |");
System.out.println("|        2.  Bubble Sort   |");
System.out.println("|        3. Exit           |");
System.out.println("============================");
swValue = Keyin.inInt(" Select option: ");

// Switch construct
switch (swValue) {
case 1:
  System.out.println(" Selection Sort Starting....");
  for (int i = 0; i < index - 1; i++) {

      smallest = numbers[i];
      smallest_index = i;

      for (int j = i + 1; j < index; j++) {

        if (numbers[j] < smallest) { 
              smallest = numbers[j];
              smallest_index = j;
          }
      }

      /* If needed switch numbers[i] and numbers[smallest_index] */

      if (numbers[i] != numbers[smallest_index]) {

          temp = numbers[i];
          numbers[i] = numbers[smallest_index];
          numbers[smallest_index] = temp;
      }
  }
  for (int i = 0; i < index; i++) {          
    System.out.print (numbers[i] + " ");
          outputFile.print (numbers[i] + " ");
      }

      inputFile.close();
      outputFile.close();



  break;
case 2:
 //2 System.out.println("Bubble Sort Sorting 2 selected");

    //int i = 0, t=0;
    boolean swapped = true;

    while(swapped){

    swapped = false;

    for(int i1 = 0; i1 < index  - 1; i1++){
        smallest = numbers[i1];
        smallest_index = i1;

    if(numbers[i1] > numbers[i1 + 1]){
    swapped = true;
    int tmp = numbers[i1];
    numbers[i1] = numbers[i1 + 1];
    numbers[i1 + 1] = tmp;
    } 
    } 

    for(int i1 = 0; i1 < numbers.length; i1++){
   System.out.print(numbers[i1] + "\t");
    } 
   System.out.println();

    }




 break;

case 3:
  System.out.println("Exit selected");
  break;
default:
  System.out.println("Invalid selection");
  break; // This break is not really necessary
   }
 }

}

オプション2を選択した場合:バブルソートを取得します

1   2   4   1   5   7   9   56  67  0   0   0
1   2   4   5   7   9   56  67   0               0  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0       0   0   0   0   0   0   0   0   0   0   0   0   0   0   
1   1   2   4   5   7   9   56  67  0

私が問題を抱えているコードはバブルソートです。前もって感謝します。

4

1 に答える 1

1

問題は、配列の長さが10000であるということです。

int[] numbers = new int[10000];

これは、1を選択したときに出力を生成する方法です。

for (int i = 0; i < index; i++) {  

index最大(ファイルから読み取った整数の量)までしか印刷できません。

オプション2を選択すると、次のように出力が生成されます。

for(int i1 = 0; i1 < numbers.length; i1++){

ここnumbers.lengthで、は配列のすべての要素を意味します。ここから自分で解決できるはずなので、今は解決策を書いていません。

于 2012-12-15T10:24:33.603 に答える