2016-11-20 5 views
2

私はこれを回避する方法がわかりませんが、私のコードの目的はcsvファイルを反復し、ユーザーが特定の項目を検索することです。私は自分のアイテムをCSVReaderでタイプリストの文字列配列から読み込んだので、問題はありません。forループ内でボタンを押すのを待っていますか?

ユーザーがアイテムを検索すると、forループを作成して、自分のcsvファイルの行と列を繰り返し処理し、見つかったらコードを出力します。

私がしたいことは、アイテムが見つかったら、別のフレームを開き、再びユーザーがテキストフィールドを使用して入力を行います。次に、別のボタンを押して、変更を行うコードを実行するために他のforループで中断したところで続けます。 forループを1回だけ反復することができます。そうしないと、行と列の値が2回繰り返されることになります。ここで

は私のコードです:

editTigerFrame obj = new editTigerFrame(); 

    String getLocation = obj.editLocationField.getText(); 
    javax.swing.JButton saveButt = obj.saveEditButton; 


    try{ 

     String strSearch = searchSerialField.getText(); 

     CSVReader reader = new CSVReader(new FileReader("test.txt"), ','); 
     List<String[]> myEntries = reader.readAll(); 
     reader.close(); 

     for (int row = 0; row < myEntries.size(); row++) 
     { 
      for (int column = 0; column < myEntries.get(row).length; column++) 
      { 
       if (myEntries.get(row)[column].trim().equalsIgnoreCase(strSearch)) 
       { 
         System.out.println("Found - Your item is on row: " + row + ", column: " + column); 

         //If serial is found, open the editTigerFrame to edit details 
         new editTigerFrame().setVisible(true); 

         //Replace with user input 
         //When button is pressed in other class, execute this code 
         System.out.println("Saved"); 
         String newLocation = getLocation; 

ボタンを他のフォームに押された後、文字列を変更するコードを実行し、コードスニペットの底部付近に見ることができるように。

for-loop内で一時停止して続行する方法はありますか?

ご協力いただきありがとうございます。何か他のものが必要な場合は、私にお知らせください。私が提供します。

+0

ループとボタンのクリックに共通の「フラグ」を使用すると便利です。ボタンクリックハンドラで 'flag'を更新し、' break'をしたいと思う最も内側のループに同じ 'flag'を使います。新しい 'Thread'を使うと効果的です。 – Arvind

答えて

0

for-loop内で一時停止して継続する方法はありますか?

入力を使用するように尋ねるJOptionPaneが表示されることがありますか?

詳細と例については、How to Make DialogsのSwingチュートリアルのセクションを参照してください。

収集するデータがさらに複雑な場合は、モーダルJDialogを使用します。

+0

ダイアログボックスが開き、ユーザーの入力を求めたら、forループを一時停止する必要があります。そうしないと、テキストフィールドに何も入力していないかのようにコードが続行されます。 – juiceb0xk

+0

@ juiceb0xkの場合、ループはJOptionPane/JDialogが表示されている間一時停止し、ダイアログが閉じるとすぐに再起動します。したがって、ループを続行する前にダイアログが閉じたときに、データを取得して処理を行う必要があります。 – camickr

1

forループはbreak;のままにできます。記憶された値でループを離れる前に、行、列などを覚えておいてください。

forループを独自のメソッドに配置することをお勧めします。同じことが入力の「ポップアップ」にも当てはまります。その後、必要に応じて呼び出すことができます。 ^^ - D

編集:いくつかのサンプルコード:で

起動ループ:行= 0の列= 0、何か= 11

残し

 package pauseLoop; 


public class pauseLoop { 
     int rows; 
     int columns; 
     int something; 
     static int[] a; 

    public static void main(String[] gnarrr){ 
     pauseLoop myLoop = new pauseLoop(); 

     myLoop.Loop(); 

     myLoop.Loop(); 
    } 

    public pauseLoop(){ 
     this.rows = 0; 
     this.columns = 0; 
     this.something = 11; //just random data 
    } 

    public void Loop(){ 
     System.out.println("starting loop with: rows = " + rows + " columns = " + columns + " something = " + something); 

     for(int count = rows; count < 99999 ;count++){ 
      /* do some black magic ;) */ 

      if(count % 23 == 22){ // !condition to pause the loop! i chose something that can occur more than once 
       this.rows += count; //remember rows 
       this.columns += 5; // columns got 5 more by some black magic (nested loop or so) 
       this.something += 31; //just some data needed to be remembered for later 
       System.out.println("leaving loop with: rows = " + rows + " columns = " + columns + " something = " + something+ "\n"); 
       break; //leave loop! 
      } 
     } 
    } 

} 

が実行した場合、次の出力を生成しますループ:行= 22列= 5何か= 42

開始ループ:行= 22列= 5何か= 42

ループを残して:行= 44列= 10何か= 73

ハッピーコーディング!

+0

記憶された値でループを再開するにはどうしたらいいですか? – juiceb0xk

+0

@ juiceb0xkは例コードを追加しました^^ –

+0

@ juiceb0xk調整されたコードで、ループが本当に "行"で再開するようになっています - 原則は同じ厳しいままです^^ –

関連する問題