2016-09-04 7 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] (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

не может Я использую этот метод для вывода вывода в текстовой области, потому что я использую swing. – Isuru

+0

Он печатает всю вещь сразу, без задержки :( – Isuru

+0

надеюсь, что этот способ поможет – guleryuz