2017-10-27 19 views
0

do-whileループを使用してJavaプロジェクトを作成して、ユーザーから5〜15の数字を取得します。その後、ユーザーの番号を使用して正方形と三角形を作成します入力されました。有効な入力までJava doループを繰り返す

私は現在、私の質問を繰り返すことに固執しています。私はプログラムを実行した後、2回目にユーザーが番号を入力するように促されます。番号が無効であるかどうかは印刷されません。

私は「...番号を入力して」第二を動かすDOループの内側ちょうどプロンプト「申し訳ありませんが、無効」で印刷のことを試してみました。私はwhileループの中のcase文と同様のことをしましたが、うまく走っていましたが、doループに問題があります。

誰かが正しい方向に向かうことができますか?

import java.util.Scanner; 
public class doLoop { 

public static void main(String[] args) { 
    // TODO Auto-generated method stub 

    Scanner input = new Scanner(System.in); 

    int number; 
    int minimum = 5; 
    int maximum = 15; 

    System.out.print("Enter a number between " + minimum + " and " + maximum + ":"); 



     do { 
      number = input.nextInt(); 
      if (number >= minimum && number <= 15) 
       break; 
      else 
       System.out.print("Sorry, invalid"); 
      break; 
     } while (false); 
     System.out.print("\nEnter a number between " + minimum + " and " + maximum + ":"); 
     number = input.nextInt(); 
    } 
} 
+6

'break;'、 'break;'、while(false); '?コントロールフローについてもう一度考えてみましょう。 – tkausl

+0

@tkauslは完全に同意します。彼女は別の言語から来て、彼女はJavaプログラミングに関する何かを読んでいるようです。 – alseether

+0

do-whileセマンティクスはrepeat-untilセマンティクスと同じではありません... 'repeat ... until(false)'は 'do .. while(真) '。 – CoronA

答えて

1

一般的に、whileループ内ではbreakを使用してください。これは悪い方法です。このようなものがあるはずです

public static void main(String[] args) { 

    Scanner input = new Scanner(System.in); 

    int number; 
    int minimum = 5; 
    int maximum = 15; 

    do{ 
     System.out.print("Enter a number between" + " " + minimum + " " + "and" + " " + maximum + ":"); 
     number = input.nextInt(); 
     if (number < minimum || number > maximum) 
      System.out.print("Sorry, invalid"); 
    } while (number < minimum || number > maximum); 

} 
+0

うわー!たくさん助けてくれてありがとう! whileループの中でbreakを使うのはなぜ悪い習慣と考えられますか?それがif文またはcase文に含まれていれば、それは今の場合ですか? –

+0

'break'を使用すると、実行フローが壊れてしまいます(これは冗長です)。ほとんどの場合、コードを理解するのが難しくなります。ほとんどの場合、コードの流れに従うのが簡単ですが、それでもプログラミングを習得している場合は、使用しないでください。 – alseether

+0

私はプログラムの2番目の部分のdoループに別のループを追加できますか?私が入れ子になったループを調べるたびに、私はforループを使った例しか見ません。ネストされたループを使用してパターンを追加できない場合別のループを追加してユーザーの入力を使用してパターンを作成することはできますか?すべての質問を申し訳ありません。これは初めてのループです。 –

0

ブレークとスキャナ入力の配置にコードに論理エラーがあります。あなたが本当にあなたが持っているものに忠実にしたい場合は、私はブレイクを使用する代わりにブールチェックを追加するほうがずっと簡単です。下にも私は最終的なことをあなたが知っているように置くことができ、コード内でその変数を変更したり改ざんしたりしないことがベストプラクティスです。私はあなたがあなたが作ったifステートメントを渡す場合、それをtrueに設定します。

public static void main(String[] args) { 

Scanner input = new Scanner(System.in); 

int number; 
boolean check = false; 

// Final, because they are constant through-out the program 
final int minimum = 5; 
final int maximum = 15; 

do { 
    System.out.print("Enter a number between " + minimum + " and " + maximum + ":"); 
    number = input.nextInt(); 
    if (number >= minimum && number <= maximum) 
     check = true; 
    else 
     System.out.println("Sorry, invalid"); 
    break; 
} while (check); 


} 
関連する問題