2016-09-04 3 views
0

Hier bin ich versuchen, Array von Ganzzahlen mit Insertion Sortieren sortieren und drucken Sie das Array Schritt für Schritt nach dem Sortiermechanismus. Ich möchte wenig Verzögerung zwischen den einzelnen Sortierschritten haben. Ich habe Thread.sleep und einige andere Methoden ausprobiert, konnte aber keine Lösung finden. Bitte hilf mir, ich bin ein Anfänger im Programmieren.Wie Verzögerung in der For-Schleife hinzufügen?

public void insertionSort(int array[]){ 

     int j, k, key; 

     for(j=1; j<array.length; j++){ 

      key = array[j]; 
      k = j-1; 

      while(k>=0 && array[k]>key){ 
       array[k+1] = array[k]; 
       k = k-1; 
      } 
      array[k+1] = key; 
      for(int i=0; i<array.length; i++){ 
       txtArOutput.append(String.valueOf(arr[i])+"\t"); 
      } 
      txtArOutput.append("\n"); 
      //delay 
     } 
    } 
+0

Warum Sie eine Zeit der Ausführung der Methode steigern? –

+0

Sie möchten 1) einen [Swing Timer] (http://docs.oracle.com/javase/tutorial/uiswing/misc/timer.html) verwenden und 2) [Ihre Suchfähigkeiten verbessern] (https: // www.google.com/webhp?rct=j#q=site:stackoverflow.com+java+swing+loop+delay) –

+0

@NikolasCharalambidis Ich möchte nur wenig Verzögerung zwischen jeder Druckanweisung haben, wie ein Simulator – Isuru

Antwort

0

Hoffnung auf diese Weise hilft

public class InsertionSortDemo extends JFrame { 

    private JTextArea textArea; 
    private JButton button; 

    public InsertionSortDemo() { 

     textArea = new JTextArea(); 

     JPanel panel = new JPanel(new BorderLayout()); 
     panel.add(textArea, BorderLayout.CENTER); 

     button = new JButton("Run Simulation"); 
     button.addActionListener(e -> { 

      button.setEnabled(false); 
      textArea.setText(""); 

      new Thread(() -> { 

       Random r = new Random(); 

       int [] array = { 

         r.nextInt(100), 
         r.nextInt(100), 
         r.nextInt(100), 
         r.nextInt(100), 
         r.nextInt(100), 
         r.nextInt(100), 
         r.nextInt(100), 
         r.nextInt(100), 
         r.nextInt(100), 
         r.nextInt(100), 
         r.nextInt(100), 
         r.nextInt(100), 
         r.nextInt(100), 
         r.nextInt(100), 
         r.nextInt(100), 
         r.nextInt(100), 

       }; 
       insertionSort(array); 

      }).start(); 

     }); 

     panel.add(button, BorderLayout.SOUTH); 

     setContentPane(panel); 
     setSize(300, 400); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(() -> new InsertionSortDemo()); 
    } 

    public void insertionSort(int array[]){ 

     int j, k, key; 

     for(j=1; j<array.length; j++){ 

      key = array[j]; 
      k = j-1; 

      while(k>=0 && array[k]>key){ 
       array[k+1] = array[k]; 
       k = k-1; 
//    print(array); 
      } 
      array[k+1] = key; 

      print(array); 

      sleep(100); 

     } 

     SwingUtilities.invokeLater(() -> button.setEnabled(true)); 

    } 

    private void print(int array[]) { 

     SwingUtilities.invokeLater(() -> { 

      for (int i : array) { 
       textArea.append(i + ","); 
      } 
      textArea.append(System.lineSeparator()); 

     }); 

    } 

    private void sleep(long n) { 
     try { 
      Thread.sleep(500); 
     } catch (InterruptedException e) { 
     } 
    } 

} 
+0

kann nicht Ich verwende diese Methode, um die Ausgabe in einem Textbereich zu drucken, weil ich Swing – Isuru

+0

verwende Es druckt das ganze Ding auf einmal, keine Verzögerung :( – Isuru

+0

hoffe, dass dieser Weg hilft – guleryuz

Verwandte Themen