2016-09-04 67 views
0

在這裏,我嘗試使用插入排序對整數數組進行排序,並根據排序機制逐步打印數組。我希望在每個排序步驟之間有一點延遲。我嘗試了Thread.sleep和其他一些方法,但找不到解決方案。請幫助我,我是編程初學者。如何在for循環中添加延遲?

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

你爲什麼要提高方法的執行時間? –

+0

你想要1)使用[Swing Timer](http://docs.oracle.com/javase/tutorial/uiswing/misc/timer.html),2)[提高你的搜索技巧](https:// www.google.com/webhp?rct=j#q=site:stackoverflow.com+java+swing+loop+delay) –

+0

@NikolasCharalambidis我只是想在每個打印語句之間有一點延遲,就像模擬器 – Isuru

回答

0

希望這樣有助於

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

不能我使用這種方法在文本區域打印輸出,因爲我正在使用鞦韆 – Isuru

+0

它一次打印整個東西,沒有延遲:( – Isuru

+0

希望這種方式可以幫助 – guleryuz