2017-10-27 4 views
0

do-while 루프를 사용하여 Java 프로젝트를 생성하여 5에서 15 사이의 숫자를 얻습니다. 이후에 사용자 번호를 사용하여 사각형과 삼각형을 만듭니다. 입력되었습니다.Java 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은 완전히 동의합니다. 그녀가 다른 언어에서 온 것 같고 그녀는 자바 프로그래밍에 대해 뭔가 읽어야한다. – alseether

+0

do-while 의미는 repeat-until 의미와 동일하지 않다. ... repeat ... until (false)'는 do ..와 동일하다. while (true)'. – CoronA

답변

1

일반적으로 break은 while 루프를 사용하는 것이 좋지 않은 것으로 간주됩니다. 이 같은 것이 있어야합니다.

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-statement 나 case-statement에서 여전히 그렇습니까? –

+0

'break'를 사용하면 실행 흐름이 깨지고 (대부분 중복되는 경우), 대부분의 경우 코드를 이해하기 어렵게 만듭니다. 대부분의 경우 사용하기에 동의하는 경우가 있습니다. 코드의 흐름을 따르기 쉽기 때문입니다. 그렇지만 프로그래밍을 배우는 경우 특별히 사용하지 않는 것이 좋습니다. – alseether

+0

다른 루프를 프로그램의 두 번째 부분에 대한 do 루프에 추가 할 수 있습니까? 언제든지 중첩 된 루프를 연구 할 때마다 for 루프가있는 예제 만 볼 수 있습니다. 중첩 루프를 사용하여 패턴을 추가 할 수없는 경우 다른 루프를 추가하고 사용자 입력을 사용하여 패턴을 만들 수 있습니까? 모든 질문에 죄송합니다. 루프를 처음 사용합니다. –

0

휴식 및 스캐너 입력 배치에 논리적 오류가 있습니다. 당신이 가지고있는 것에 진실되게 말하고 싶다면, 나는 휴식을 사용하는 대신 부울 검사를 추가하는 것이 훨씬 더 간단하다는 것을 느낍니다. 아래에서도 알 수 있듯이 결승선을 놓고 코드에서 변경하거나 변경해서는 안되는 것이 가장 좋습니다. 나는 false를 위해 do를 체크하고 싶었 기 때문에 boolean을 추가했다. 그리고 나서 당신이 만든 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); 


}