2017-02-21 1 views
1

프로그램이 감사 (이름)를 인쇄하지 않습니다. 대신 줄이 완전히 건너 뛰고 주 메뉴로 돌아갑니다. 누군가 이유를 설명해 주시겠습니까? 그것은 표시된 인덱스를 기반으로 새로운 문자열을 생성하고 'firstName'에 결과를 저장 한 다음 'Thanks (name)!'로 출력해야합니다.왜 내 println이 작동하지 않습니까?

public static void main(String[] args) { 

    Scanner in = new Scanner(System.in); 

    String[] custInfo = new String[20]; 

    String MANAGERID = "ABC 132"; 
    String userInput; 
    String cust = "Customer"; 
    String pts = "Print to screen"; 
    String exit = "Exit"; 
    int counter = 0; 
    int full = 21; 
    boolean cont = true; 

    while(cont) { 

     System.out.println("Enter the word \"Customer\" if you are a customer or your ID if you are a manager."); 
     userInput = in.nextLine(); 

     if (userInput.equalsIgnoreCase(exit)) { 
      System.out.println("Bye!"); 
      System.exit(0); 
     } 

     try { 
      if (userInput.equalsIgnoreCase(cust)) { 
       System.out.println("Hello, please enter your name and DoB in name MM/DD/YYYY format."); 
       custInfo[counter] = in.nextLine(); 
       String firstName=custInfo[counter].substring(0,(' ')); 
       System.out.println("Thanks "+firstName+"!"); 
       counter++; 
      } 

      if (counter==full) { 
       System.out.println("Sorry, no more customers."); 
      } 
     } catch(IndexOutOfBoundsException e) { 
     } 
    } 
} 
+2

하위 문자열 (0, (''))은 어떻게해야하나요? –

+1

try/catch를 제거하거나 잡히는 오류 메시지를 인쇄하십시오. 그러면 문제가 보일 것입니다. – JBC

+1

'문자열 처리되지 않음 = custInfo [counter]' '문자열 firstName = unprocessed.substring (0, 처리되지 않은 .indexOf ('')); ' 도움이 될 것입니다. – marcushobson

답변

4

코드는 아래의 라인 상에 IndexOutOfBoundsException를 생성하고 상기 예외 핸들러 코드로 점프한다.

String firstName=custInfo[counter].substring(0,(' ')); 

String.substring

에 과부하가 두 개의 정의를 가지고있다 : 자바에서

substring(int startIndex) 
substring(int startIndex, int endIndex) 

하는 char 데이터 유형은 단순히 무대 뒤에서 16 비트 숫자입니다. ' ' (공백)을 32로 변환 중이고 그보다 짧은 임의의 문자열에서 오류가 발생합니다 (유효한 카운터를 나타내는 것으로 가정).

+0

카운터가 유효한 인덱스를 가리켜 야합니다. 이것은 매우 도움이되었지만, 대단히 감사합니다! – Chez

+0

내가 여기서하려고하는 올바른 코드의 예를 제공 하시겠습니까? 저는 아직 Java에 익숙하지 않고 답을 암시하는 데 어려움을 겪고 있습니다. – Chez

+0

당신이 기대하는 형식을 기반으로, 그것은 split 제공하는 기능을 찾고 있습니다. Split은 String을 취하고 사용자가 제공 한 문자 나 정규 표현식에서 문자열 배열을 반환합니다. 아래에 공백이 없으면 수행 할 작업이 아래에 나와야합니다. 문자열 firstName = custInfo [counter] .split ("") [0]; – HedonicHedgehog

1

대신 custInfo[counter].indexOf(" ")을 사용하여 이름과 DoB 사이의 공백을 가져옵니다.

String firstName = custInfo[counter].substring(0, custInfo[counter].indexOf(" ")); 
+0

안녕하세요. 시간을내어 의견을 보내 주셔서 감사합니다. 나는 이것을 시도하고 그것을 작동시키지 못했습니다. 똑같은 일을했지만 코드를 실행했지만 인쇄 줄을 무시했습니다. – Chez

관련 문제