2014-09-21 5 views
1
public class Registration { 

    public static void main(String[] args) { 

      final String MY_DELIMITER = "','"; 
      boolean tryAgain = true; 
      String fName = ""; 
      String A = fName.substring(0,2); 
      String lName = ""; 
      int lNameLength = lName.length(); 
      String B = lName.substring(lNameLength-4,lNameLength); 
      String address = ""; 
      String zip = ""; 
      String C = zip.substring(0,5); 
      String age = ""; 
      String D = age.substring(0,1); 
      String gender = ""; 
      String race = ""; 
      String regList = ""; 
      Scanner myScanner = new Scanner(System.in); 
      boolean showList = false; 

     // Get input from the user until they type "q"  
     // For each input check for "q" 
     // if not q, append the input 
     // to the existing String + the delimiter  
     while(tryAgain) 
     { 
       System.out.println("Name: (q to quit)"); 
       fName = myScanner.nextLine(); 
       System.out.println("Last Name: (q to quit)"); 
       lName = myScanner.nextLine(); 
       System.out.println("Addess: "); 
       address = myScanner.nextLine(); 
       System.out.println("Age: "); 
       age = myScanner.nextLine(); 
       System.out.println("Gender: "); 
       gender = myScanner.nextLine(); 
       System.out.println("Race: "); 
       race = myScanner.nextLine(); 

      if(fName.equals("q")) 
      { 
        tryAgain = false; 
      } 
      else 
      { 
       // Append new name to the list using a delimiter 
       regList = fName + lName + "\n" + address + "\n" + age + "\n" + gender + "\n" + race + MY_DELIMITER; 
      }   
     } // end of while() 

     System.out.println("Here is your registration:" + regList); 
     // Convert the String into an array, using the same delimiter 
     String[ ] regArray = regList.split(MY_DELIMITER); 

     // Ask the user if they want to display the contents of the array 
     // If "y" then display the list using a foreach loop 
     System.out.println("Would you like to see the registration from the Array? [y-n]"); 
     fName = myScanner.nextLine(); 

     myScanner.close(); 

     fName = fName.toLowerCase(); 

     showList = fName.equals("y")?true:false; 

     if(showList) 
     { 
      // Display the results using for each 
      System.out.println("Here is your registration from the array: "); 
      // Use a for each statement instead of the more complex for() loop 
      // for(int counter=0; counter < employeeArray.length; counter++) 
      for(String thisReg:regArray) 
      { 
        System.out.println(thisReg); 
        System.out.printf("USER ID: ", A + "-" + B + "-" + C + "-" + D); 
      } 
     } // end of if(showList) 
    } 
} 

fName 입력의 첫 3 글자를 추출하려고하므로 fName.substring을 사용하여이 작업을 수행 할 수 있다고 생각했지만이 오류가 발생합니다.fName.substring out of bounds

죄송합니다. 시간을 절약하기 위해 모든 코드를 추가하지 않았습니다. 명백하게 그것은 혼란스럽게 보였다. 어떤 식 으로든 fName 입력은 사용자의 이름입니다. 그 순서대로 될 수 없습니까?

+0

* empty * 문자열의 처음 세 글자는 무엇이라고 생각합니까? – dasblinkenlight

+0

이름의 입력은 무엇입니까? – ares

답변

1

음 ... 귀하의 작업 순서가 의심됩니다. 사실, 어디에서나. 다음과 같은 상호 작용에서

봐 :

String fName = ""; 
String A = fName.substring(0,2); 

당신은 빈 문자열을 선언 한 후 즉시 그것의 문자열을. 하위 문자열의 데이터는 어디에서 가져 왔습니까? 여기서 부분 문자열을 지정할 필요는 없습니다. 빈 문자열의 길이는 0입니다.

당신은해야 특정 당신이 그것의 문자열을 복용하기 전에 문자열에 데이터를 넣는 것입니다. Scanner을 사용하면 먼 길을 갈 것입니다.

의 인스턴스를 main의 맨 위로 이동하면 그 위치가 어디로 가고 어떻게 작동하는지 훨씬 명확하게 알 수 있습니다.

0

문자열의 길이를 항상 확인한 후에 문자열을 검사하십시오. 특히 사용자가이 변수를 제공 할 때.

+0

어쩌면 나는 그것을 볼 수는 없지만, 프로그램이 어떻게 시작하여 값을 얻는가? – Makoto

+0

저는 java (obv.)에 익숙하지 않습니다. 코드를 작성할 때 변수를 선언하는 데 익숙합니다. – Brownbagger11

0

빈 문자열의 부분 문자열을 가져 오려고합니다. 일부 실제 String

String fName = ""; 
String A = fName.substring(0,2); // here fName is empty!!! 

변경 FNAME 또한 당신이 존재 원하는 크기의 확인 문자열을 만들기 위해 문자열을 호출하기 전에 String의 길이를 확인합니다.

String fName = "somestring"; 
if(fName.length() >= 2) { 
    String A = fName.substring(0,2); 
    System.out.println(A); // prints out "so" 
} 

다른 모든 String도 마찬가지입니다.

+0

글쎄, 이건 내가 감각을 많이 만들어! 고맙습니다 – Brownbagger11