2016-11-06 9 views
2

ドイツ語のポストコードを入力フォームで検証しようとしています。 しかし、どういうわけか私は15行目で立ち往生し、私の機能は無限ループで「入力してください」という印字だけです。ユーザー入力の検証中にエンドレスループが発生する

私は、sc_plz.nextLine()がブロック機能になると思っていましたが、何とかそうではありません。

import View.AddressView; 

import java.io.IOException; 
import java.util.Scanner; 

public class AddressController { 
    AddressView view = new AddressView(); 

    public Address addAddress()throws IOException{ 
     //other input questions 

     Scanner sc_plz = new Scanner(System.in); 
     int code = 0; 
     while (!validatePostcode(code)) 
      view.askPostcode(); //simple System.out.println("Input something") 
      String postcode = sc_plz.nextLine(); 

      try { 
       code = Integer.parseInt(postcode); 
      } 
      catch (NumberFormatException e){ 
       view.invalidData(); //warning about not got a number 
      } 
     //other input questions 
    } 

    private boolean validatePostcode(int plz) throws IOException { 
     //legal postcodenumbers are between 01000 -99999 
     if (1000 <= plz && plz <= 99999){ 
      return true; 
     } 
     else { 
      return false; 
     } 
    } 
} 
+0

「入力してください」はどこに印刷されていますか?これは 'view.askPostcode();'によって行われますか? – pathfinderelite

答えて

7

whileステートメントの角括弧は忘れましたか?今のように、それは常にview.askPostcode();にあるものを実行します。

while (!validatePostcode(code)) { 
    view.askPostcode(); //simple System.out.println("Input something") 
    String postcode = sc_plz.nextLine(); 
    try { 
     code = Integer.parseInt(postcode); 
    } catch (NumberFormatException e){ 
     view.invalidData(); //warning about not got a number 
    } 
} 
+0

ugh ...はい。何時間もそれを見ていたが、これは盲目だった。どうも! –

+0

@DennyCraneは、コードを自動インデントするようにエディタを設定することで、このような間違いがはっきりと分かります。 – Hulk

関連する問題