2013-10-12 6 views
0

사용자가 문자열 배열에 입력 한 각 문자열을 할당하려고합니다. 전체 내용은 for 루프에 있으며 배열 인덱스에 의해 평가됩니다.String 배열에 문자열 할당

String skillAssign[] = new String[100]; 

    for (int i=0; isDone == false; i++) 
    { 
     System.out.println(skillAssign[i]); 
     System.out.println(i); 
     skillAssign[i] = keyboard.nextLine(); 
     if ((!(skillAssign[i].equalsIgnoreCase("stats"))) && (!(skillAssign[i].equalsIgnoreCase("done")))) 
     { 
      assignmentValue = keyboard.nextInt(); 
      if (((skillAssign[i].equalsIgnoreCase("health"))) && (skillPoints - assignmentValue >=0)) 
      { 
       System.out.println("Added " + assignmentValue + " points to Health!"); 
       skillPoints = (skillPoints - assignmentValue); 
       newMaxHealth = (assignmentValue + newMaxHealth); 
      } 
     //code that evaluates the string located inside the skillAssign[i] for other stats 
    } 

첫 번째 문자열이 제대로 평가,하지만 난 입력에 두 번째 문자열을 갈 때, 나는 java.util.InputMisMatchException를 얻을 : 내 코드입니다. 어떻게하면 사용자가 입력 한 배열의 각 인덱스에 문자열을 할당 한 다음 평가할 수 있습니까? (비록 내가 평가 부분을 가지고 있다고 생각한다)

Scanner keyboard = new Scanner으로 키보드가 구성되고 으로 키보드가 구성된 경우 isDone은 생략되지만 isDone은 true로 변경된다. 스킬 포인트를 제외하고 0으로 설정됩니다.

+5

문제를 해결하기위한 정보를 너무 적게 제공했습니다. 'isDone'이 무엇인지를 말하지 않았습니다. 또한'for' 루프 안에서 무엇을하고 있습니까? 그 외에는 전체 스택 추적을 게시하십시오. –

+2

루프에서 isDone을 ​​수정하지 마십시오. 또한 isDone == false는'! isDone'으로 더 잘 표현 될 수 있습니다. – Tdorno

+0

isDone은 루프 내부의 생략 된 코드에서 수정되었지만 두 번째 루프 이후에 예외가 발생하기 때문에 실제로는 관련이 없습니다. –

답변

2

나는 상기의 코드를 테스트 한, 이것은 무슨이다 : 우리는 루프를 입력

  • .
  • 첫 번째 문자열 (keyboard.nextLine() 통해)을 입력해야합니다. '건강'을 입력했습니다.
  • 정수를 입력해야합니다 (keyboard.nextInt() 통해). ''을 입력했습니다.
  • 루프를 다시 시작합니다.
  • 정수를 입력해야합니다 (keyboard.nextInt() 통해).
  • 은 ...

내가 정수를 입력 두 번째 문자열을 물었지만, 즉시 아니에요 것으로 보인다.

왜 그런지 모르지만 nextInt()은 다음을으로 건너 뜁니다.

어쩌면 당신은 nextInt()nextLine() 건너 뛰는 이유를 간략하게 언급 내가 a post on StackOverflow을 보았다

try { 
    assignmentValue = Integer.parseInt(keyboard.nextLine()); 
} 
catch (NumberFormatException exc) { 
    throw new InputMismatchException(exc.getMessage()); 
} 

편집

assignmentValue = keyboard.nextInt(); 

을 대체 할 수 있습니다.

+0

그래,이 하나의 일을, 대단히 감사합니다! –

1

나는 이것이 당신의 의도에 더 가깝다고 생각합니다. 이 방법은 nextLine이 잡는 키보드 입력에 대한 참조가 각 반복에서 손실되지 않지만 새 String 인스턴스에서 유지됩니다. 옳은?

System.out.println(i); 
String getMe = keyboard.nextLine(); 
skillAssign[i] = new String(getMe); 
System.out.println(skillAssign[i]); 
+0

getMe라는 다른 String을 만들 수 없기 때문에이 메서드를 사용하면 한 번만 작동하지 않을까요? (나는 멍청이야.) –

+1

getMe는 루프 내부의 로컬 변수이다. 각 반복마다 이전 반복의 존재에 대한 어떠한 링크도없이 새로 태어난 것을 의미한다. – FoggyDew

+1

너무 혼란스럽고 getMe를 생략하고 skillAssign [i] = new String (keyboard.nextLine());을 사용하면; – FoggyDew