2014-10-15 3 views
-3

이 사이트에서 비슷한 코드를 시도했지만 나에게 아무런 문제가 없습니다. 따라서 정수가 아닌 정수를 입력하도록 사용자에게 요청하는 프로그램이 필요합니다. 신용 카드가 정수이면 만료 날짜로 이동하여 유효하면 송장을 인쇄하십시오. if 및 while 루프를 시도해 보았습니다. 또한 잡으려고했지만 논리가 깨졌습니다. 어떤 도움을 주시면 감사하겠습니다.사용자 입력이 정수가 아닌 경우 루프가 계속됩니다.

Scanner s = new Scanner(System.in); 
    System.out.println("Type 'quit' to exit payment"); 
    System.out.println("Enter name: "); 
    String name = s.next(); 
    s.nextLine(); 

    if (name.equals("quit")) 
    { 
     return; 
    } 

    System.out.println("Enter address: "); 
    String address = s.nextLine(); 

    if (address.equals("quit")) 
    { 
     return; 
    } 

    System.out.println("Type '000' to exit payment"); 
    System.out.println("Enter card number: "); 
    @override 
    int cardNo = s.nextInt(); 
    if (cardNo == 000) 
    { 
     return; 
    } 

    System.out.println("Enter card expiration date: (DDMMYY)"); 
    int expirationDate = s.nextInt(); 

    if (expirationDate == 000) 
    { 
     return; 
    } 

    //if input is ok then printing invoice 
} 
+0

시도한 'while'루프를 게시하면 도움이 될 것입니다. – Justin

+0

전체 코드를 붙여 넣으십시오. – SMA

+0

이 코드는 사용자를 위해 컴파일됩니까? –

답변

0

다음을 시도, 나는 또한 응용 프로그램 종료에 대해 나중에 몇 가지를 알게 될 것이다

Scanner s = new Scanner(System.in); 
String name = "", address = ""; 
int cardNo = 0, expirationDate = 0; 

while(name == "" || address == "" || cardNo == 0 || expirationDate == 0) 
{ 
    System.out.println("Type 'quit' to exit payment"); 

    //Get Name 
    System.out.print("Enter name: "); 
    name = s.nextLine(); 
    if (name.equals("quit")){return;} 

    //Get address 
    System.out.print("Enter address: "); 
    address = s.nextLine(); 
    if (address.equals("quit")){return;} 

    System.out.println("Type '-1' to exit payment"); 

    //Get card number continually until an integer is entered 
    do { 
     System.out.print("Enter card number: "); 
     try { 
      cardNo = Integer.parseInt(s.nextLine()); 
      break; 
     } catch (Exception e) { 
      continue; 
     } 
    } while (true); 
    if (cardNo == -1) {return;} 

    //Get card expiration date continually until an integer is entered 
    do { 
     System.out.println("Enter card expiration date: (DDMMYY)"); 
     try { 
      expirationDate = Integer.parseInt(s.nextLine()); 
      break; 
     } catch (Exception e) { 
      continue; 
     } 
    } while (true); 
    if (expirationDate == -1){return;} 
} 
당신은 내가의 카드 번호와 유효 기간 부분에 종료 할 때 입력 무엇을 변경주의 수도

프로그램은 000에서 -1까지입니다. 이는 000을 int로 변환하면 0의 값을 가지므로 사용자가 응용 프로그램을 종료 할 수 없기 때문입니다.

0

.nextLine()은 메소드를 호출 할 때마다 다음 요소를 가져옵니다. 따라서 처리하기 전에이를 변수에 할당하는 것이 더 좋습니다. docs에서

,

발전, 현재의 행 과거이 스캐너와 생략 된 입력을 반환합니다. 이 메서드는 끝에 현재 줄 구분 기호를 제외한 나머지 현재 줄 을 반환합니다. 위치는 다음 행의 시작 부분으로 설정됩니다. 이 메서드는 행 구분 기호를 찾기 위해 입력을 계속 검색하므로 줄 구분 기호가없는 경우 줄 건너 뛰기를 검색하는 모든 입력을 버퍼링 할 수 있습니다.

관련 문제