2017-04-14 6 views
1

私の質問は、ユーザーがどのような種類の並べ替え(クイック、挿入、バブル、選択)を選択できるように4つのラジオボタンを持つGUIを実装しようとしています。 3つのラジオボタンから選択し、既にソートされた、ランダムな、逆ソートされたいずれかを選択することができます。次に、配列の入力サイズとブロックサイズを選択できるテキストフィールドがあります。ユーザがラジオボタンを選択して情報を入力サイズのテキストフィールドとブロックサイズのテキストフィールドに入れた後、プログラムは配列をソートし、並べ替えられた配列をコンソールに出力します。javaFxラジオボタンとテキストフィールドのユーザー選択とユーザー入力

私が助けが必要なのは、ラジオボタンとテキストフィールドからの情報を取得するために、goボタ​​ンのアクションイベントまたはリスナーを実装することです。私はその背後にあるロジックを理解していますが、イベントハンドラ/アクションイベントにリンクする方法をすべて理解できませんでした。これまでコンパイルしたコードで、 'go'ボタンを押すと100から100までの数字の配列がすでに1-100の順に並べられています。ユーザーがラジオボタンで選択したものやブロックサイズと入力サイズのテキストフィールドは考慮されていません。ここに私のコードは次のとおりです。

package project4practice; 

import java.util.Random; 
import javafx.application.Application; 
import javafx.event.ActionEvent; 
import javafx.event.EventHandler; 
import javafx.scene.Scene; 
import javafx.scene.control.Alert; 
import javafx.scene.control.Button; 
import javafx.scene.control.Label; 
import javafx.scene.control.RadioButton; 
import javafx.scene.control.TextField; 
import javafx.scene.control.ToggleGroup; 
import javafx.scene.layout.BorderPane; 
import javafx.scene.layout.GridPane; 
import javafx.stage.Stage; 

public class Project4practice extends Application { 

    @Override 
    public void start(Stage primaryStage) { 
     BorderPane rootPane = new BorderPane(); 
     GridPane gp = new GridPane(); 
     rootPane.setCenter(gp); 
     gp.setVgap(5); 
     gp.setHgap(5); 
     rootPane.prefWidth(700); 
     rootPane.prefHeight(400); 
     gp.prefWidth(400); 
     gp.prefHeight(400); 
     Label sort = new Label(" Sorting Algorithm "); 
     RadioButton selection = new RadioButton("selection "); 
     RadioButton bubble = new RadioButton("bubble "); 
     RadioButton insertion = new RadioButton("insertion"); 
     RadioButton quick = new RadioButton("Quick "); 
     Label inputType = new Label(" Input Type "); 
     RadioButton sorted = new RadioButton("Already Sorted "); 
     RadioButton reverse = new RadioButton("Reverse "); 
     RadioButton random = new RadioButton("Random "); 
     Label inputSize = new Label(" Input Size: "); 
     TextField inputText = new TextField(); 

     inputText.setOnAction((ActionEvent inputText1) -> { 
      String inputText2 = inputText.getText(); 
      double inputText3 = Double.parseDouble(inputText2); 
      System.out.println(inputText3); 
     }); 
     Label blockSize = new Label(" Block Size: "); 
     TextField block = new TextField(); 

     block.setOnAction((ActionEvent block1) -> { 
      String block2 = block.getText(); 
      double block3 = Double.parseDouble(block2); 
      System.out.println(block3); 
     }); 

     Button go = new Button("Go "); 
     ToggleGroup tg = new ToggleGroup(); 

     selection.setToggleGroup(tg); 
     selection.setSelected(true); 
     bubble.setToggleGroup(tg); 
     insertion.setToggleGroup(tg); 
     quick.setToggleGroup(tg); 
     ToggleGroup tg1 = new ToggleGroup(); 
     sorted.setToggleGroup(tg1); 
     sorted.setSelected(true); 
     reverse.setToggleGroup(tg1); 
     random.setToggleGroup(tg1); 

     gp.add(sort, 0, 0); 
     gp.add(selection, 0, 1); 
     gp.add(bubble, 0, 2); 
     gp.add(insertion, 0, 3); 
     gp.add(quick, 0, 4); 
     gp.add(inputType, 0, 7); 
     gp.add(sorted, 0, 8); 
     gp.add(reverse, 0, 9); 
     gp.add(random, 0, 10); 
     gp.add(inputSize, 0, 12); 
     gp.add(inputText, 1, 12); 
     gp.add(blockSize, 0, 13); 
     gp.add(block, 1, 13); 
     gp.add(go, 0, 16); 

     go.setOnAction(new EventHandler<ActionEvent>() { 
      @Override 
      public void handle(ActionEvent go1) { 
       //selection sorted 
       if (selection.isSelected() && sorted.isSelected()) { 
        int arraySize = Integer.parseInt(inputText.getText()); 
        int chunk = Integer.parseInt(block.getText());//block size user input 

        //   for(int i=0;i<block.length;i+=chunk){ 
        //   System.out.println(Arrays.toString(Arrays.copyOfRange(block, i, Math.min(block.length,i+chunk)))); 
        //   } 
        int[] array = getSorted(arraySize, true); 
        print(array); 
        selectionSort(array); 

       }//selction sorted reverse 
       else if (selection.isSelected() && reverse.isSelected()) { 
        int arraySize = Integer.parseInt(inputText.getText()); 
        int[] array = null; 
        array = getReverse(array); 
        print(array); 
        selectionSort(array); 
       } //selection sorted random 
       else if (selection.isSelected() && random.isSelected()) { 
        int arraySize = Integer.parseInt(inputText.getText()); 
        int[] array = getRandom(arraySize); 
        print(array); 
        selectionSort(array); 
       }//quick sort random 
       else if (quick.isSelected() && random.isSelected()) { 
        int arraySize = Integer.parseInt(inputText.getText()); 
        int[] array = getRandom(arraySize); 
        print(array); 
        quickSort(array, 0, array.length - 1); 

       }//quick sort sorted 
       else if (quick.isSelected() && sorted.isSelected()) { 
        int arraySize = Integer.parseInt(inputText.getText()); 
        int[] array = getSorted(arraySize, true); 
        print(array); 
        quickSort(array, 0, array.length - 1); 
       }//quick reverse sort 
       else if (quick.isSelected() && reverse.isSelected()) { 
        int arraySize = Integer.parseInt(inputText.getText()); 
        int[] array = null; 
        array = getReverse(array); 
        print(array); 
        quickSort(array, 0, array.length - 1); 
       }//insertion sorted sort 
       else if (insertion.isSelected() && sorted.isSelected()) { 
        int arraySize = Integer.parseInt(inputText.getText()); 
        int[] array = getSorted(arraySize, true); 
        print(array); 
        insertionSort(array); 
       }//insertion random sort 
       else if (insertion.isSelected() && random.isSelected()) { 
        int arraySize = Integer.parseInt(inputText.getText()); 
        int[] array = getRandom(arraySize); 
        print(array); 
        insertionSort(array); 
       }//insertion reverse 
       else if (insertion.isSelected() && reverse.isSelected()) { 
        int arraySize = Integer.parseInt(inputText.getText()); 
        int[] array = null; 
        array = getReverse(array); 
        print(array); 
        insertionSort(array); 
       }//bubble sort 
       else if (bubble.isSelected() && sorted.isSelected()) { 
        int arraySize = Integer.parseInt(inputText.getText()); 
        int[] array = getSorted(arraySize, true); 
        print(array); 
        bubbleSort(array); 
       }//bubble random sort 
       else if (bubble.isSelected() && random.isSelected()) { 
        int arraySize = Integer.parseInt(inputText.getText()); 
        int[] array = getRandom(arraySize); 
        print(array); 
        bubbleSort(array); 
       }//bubble reverse sort 
       else if (bubble.isSelected() && reverse.isSelected()) { 
        int arraySize = Integer.parseInt(inputText.getText()); 
        int[] array = null; 
        array = getReverse(array); 
        print(array); 
        bubbleSort(array); 
       } 
       Alert alert = new Alert(Alert.AlertType.INFORMATION); 
       alert.setTitle("Thread Sorted!"); 
       alert.setHeaderText("Finished"); 
       alert.setContentText("Sort completed in milliseconds "); 
       alert.showAndWait(); 
      } 
     }); 
     Scene scene = new Scene(rootPane, 500, 350); 
     primaryStage.setTitle("Project 4"); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 
//insertion sort 

    public static void insertionSort(int array[]) { 
     // int loopCount = 0; 
     int n = array.length; 
     for (int j = 1; j < n; j++) { 
      int key = array[j]; 
      int i = j - 1; 
      while ((i > -1) && (array[i] > key)) { 
       array[i + 1] = array[i]; 
       i--; 

      } 
      array[i + 1] = key; 
     } 
     //return loopCount; 
    } 
//quick sort 

    int partition(int arr[], int left, int right) { 
     int i = left, j = right; 
     int tmp; 
     int pivot = arr[(left + right)/2]; 

     while (i <= j) { 
      while (arr[i] < pivot) { 
       i++; 
      } 
      while (arr[j] > pivot) { 
       j--; 
      } 
      if (i <= j) { 
       tmp = arr[i]; 
       arr[i] = arr[j]; 
       arr[j] = tmp; 
       i++; 
       j--; 
      } 
     } 

     return i; 
    } 
//quick sort 

    public void quickSort(int arr[], int left, int right) { 
     int index = partition(arr, left, right); 
     if (left < index - 1) { 
      quickSort(arr, left, index - 1); 
     } 
     if (index < right) { 
      quickSort(arr, index, right); 
     } 
     //return index; 
    } 
//bubble sort 

    public static void bubbleSort(int[] arr) { 
     int n = arr.length; 
     // int loopCount = 0; 
     int temp = 0; 
     for (int i = 0; i < n; i++) { 
      for (int j = 1; j < (n - i); j++) { 
       if (arr[j - 1] > arr[j]) { 
        temp = arr[j - 1]; 
        arr[j - 1] = arr[j]; 
        arr[j] = temp; 
       } 

      } 
     } 
     //return loopCount; 
    } 
//selection sort 

    public static void selectionSort(int[] arr) { 

     for (int i = 0; i < arr.length - 1; i++) { 
      int index = i; 
      for (int j = i + 1; j < arr.length; j++) { 
       if (arr[j] < arr[index]) { 
        index = j; 
       } 

      } 
      int smallerNumber = arr[index]; 
      arr[index] = arr[i]; 
      arr[i] = smallerNumber; 
     } 

    } 

    public static int[] getRandom(int size) { 
     Random rand = new Random(); 
     int[] array = new int[size]; 
     for (int i = 1; i <= size; i++) { 
      array[i - 1] = Math.abs(rand.nextInt()) % 100; 
     } 
     return array; 
    } 

    public static int[] getSorted(int size, boolean accending) { 
     int[] array = new int[size]; 
     if (accending) { 
      for (int i = 1; i <= size; i++) { 
       array[i - 1] = i; 
      } 
     } else { 
      for (int i = size; i > 0; i--) { 
       array[size - i] = i; 
      } 
     } 
     return array; 
    } 
    public static int[] getReverse(int[] arrayw) { 
     int[] array = new int[arrayw.length]; 
     for (int i = 0,j = array.length-1; i<array.length;i++,j--) { 
       array[j] = arrayw[i]; 
      } 
     return array; 
    } 


    public static void print(int[] array) { 

     for (int i = 0; i < array.length; i++) { 
      System.out.print(" " + array[i]); 
     } 
     System.out.println(); 
    } 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     launch(args); 
    } 
} 
+1

あなたが最初にすべきことは、スキャナを削除しています。 – Sedrick

+1

私はあなたがテキストフィールドで何をしているのかよくわかりません。テキストフィールドにあるものを印刷する以外には、実際の機能はありません。 – Sedrick

+1

これは間違っていました - >次は似ています:bubble!= null to:bubble.isArmed()。 bubble.isSelected()にする必要があります。 – Sedrick

答えて

1

あなたの潜在的なラジオのオプションは次のとおりです。

"すでにソートの選択、": "選択は、リバース":...: "クイックランダム"

2つのToggleGroupの間にあるさまざまなケースをすべて処理する必要があります。更新コメント

に追加

 if(selection.isSelected() && sorted.isSelected()){ 
      int arraySize = Integer.parseInt(inputText.getText()); 

      int[] array = getSorted(arraySize,true); 
      print(array); 
      int loopCount = selectionSort(array); 

     } 
     else if(selection.isSelected() && reverse.isSelected() 
     { 
      //do Something 
     } 
     else if(...) 
     { 

     } 
     . 
     . 
     . 
     else if(quick.isSelected() && random.isSelected()) 
     { 
      //do Something 
     } 

今すぐあなたの印刷方法は、次のようになります。

public static void print(int[] array, int blockSize) { 

    for (int i = 0; i < array.length; i++) { 
     System.out.print(" " + array[i]); 
     if((i + 1) % blockSize == 0) 
     { 
      System.out.println(); 
     } 
    } 
    System.out.println(); 
} 

そして、印刷方法に古い呼び出しから変更します。

print(array); 

はへ:

print(array, Integer.parseInt(block.getText())); 
関連する問題