2017-03-20 1 views
1

이력서 작성기 코딩. 나는 각 학교에 대응해야하는 설명 섹션에 붙어 있지만 사용자 입력에 따라 가변적입니다 (사용자는 각 학교에 대한 설명 포인트 수를 결정합니다). 이 루프에서 인쇄 할 때마다 변수를 찾을 수 없다는 오류가 발생합니다. 어떻게 고치는 지? 입력 학교for 루프에서 배열을 인쇄하는 방법은 무엇입니까?

루프 :

//numberOfSchools is int entered by user 

for (int i = 0; i < numberOfSchools; i++) { 
     System.out.println("What was school " + (i + 1) + " name?"); 
     schoolInfo[i][0] = scan.nextLine(); 
     System.out.println("Where was " + schoolInfo[i][0] + " ?"); 
     schoolInfo[i][1] = scan.nextLine(); 
     System.out.println("What was your start date at " + schoolInfo[i][0]); 
     schoolInfo[i][2] = scan.nextLine(); 
     System.out.println("What was your end date at " + schoolInfo[i][0] + 
       "enter 'present' if still attending"); 
     schoolInfo[i][3] = scan.nextLine(); 

     System.out.println("How many description points would you like to add for School" + i); 
     int eduDescAmount = scan.nextInt(); 
     String eduDesc[][] = new String[numberOfSchools][eduDescAmount]; 
     scan.nextLine(); 
     for(int j = 0; j < eduDescAmount; j++){ 
      System.out.println("Enter detail " + (j+1) + " for " + schoolInfo[i][0]); 
      eduDesc[i][j] = scan.nextLine(); 
     } 
    } 

인쇄 루프 :

for (int r = 0; r < schoolInfo.length; r++) { 
     for (int q = 0; q < schoolInfo.length; q++){ 
      System.out.println(eduDesc[r][q]); 
     } 
+0

무엇이 문제입니까? – Matt

+0

질문에 대한 설명이 필요합니다. 필요한 것을 이해할 수 없습니다. – Adil

+0

자세한 코드 설명이 필요합니다. – Adil

답변

0

eduDesc마다 반복에 for 루프마다 다시 선언된다. 또한 루프 내부에서만 볼 수 있습니다. 여기에 올바른 구조와 같은 모습입니다 :

String[][] eduDesc = new String[numberOfSchools][]; 
for (int i = 0; i < numberOfSchools; i++) { 
    ... 
    int eduDescAmount = scan.nextInt(); 
    eduDesc[i] = new String[eduDescAmount]; 
    ... 
} 
+0

이것은 올바른 해결책이었고 완벽하게 작동했습니다! 나는 upvote 그러나 나의 명망은 낮다. 고맙습니다! –

0

eduDesc 변수는 인쇄 루프 범위에 있지 않습니다. 블록을 열 때마다 (예 : 메서드 본문, 루프 또는 조건부에서 내부 범위를 입력합니다. 이것은 외부 범위의 모든 변수에 대한 액세스 권한을 갖지만 내부에서 정의 된 모든 항목은 블록을 종료 한 후에는 범위에 포함되지 않습니다.

두 루프에서 액세스 할 수있는 범위의 변수를 첫 번째 루프 전에 선언하여 eduDesc 변수를 선언하면 액세스 할 수 있습니다.

+0

'for()'루프를 while 루프로 대체하는 것이 가능할까요? –

+0

'eduDescAmount'가 루프 전에 알려지지 않았기 때문에 이것은 작동하지 않습니다. – maraca

+0

@EmanuelSaunders 루프를 바꾸려면 그 이유를 이해해야합니다. while 루프에서 동일한 동작을 수행 할 수 있지만 외부 범위 (클래스 수준 또는 두 루프를 수행하는 메서드 내에서)에서 eduDesc 변수가 여전히 필요합니다. 반복의 미리 결정된 양을 가지고 있기 때문에, 여기가 여전히 더 나은 선택입니다. –

0

문제는 eduDesc 변수의 범위에있는 것으로 생각됩니다. 당신이 쓸 때 :

for (int i = 0; i < numberOfSchools; i++) { 
    /* Your Code */ 
    int eduDescAmount = scan.nextInt(); 
    String eduDesc[][] = new String[numberOfSchools][eduDescAmount]; // This means eduDesc[][] is declared as a local variable 
    /* More code */ 
} 

로컬 변수는 정의 된 범위 내에서 범위가 제한되는 변수를 의미합니다. 귀하의 경우 변수 eduDesc[][]for 루프 내에 선언되어 for 루프 내에서만 액세스 할 수 있습니다.
JVM이 for 루프의 실행을 완료하자마자 변수 eduDesc[][]에 더 이상 액세스 할 수 없으므로 루프 외부의 코드에서 컴파일러가 변수에 액세스하려고하면 "Whoa!"변수가 for 루프, 해당 블록에만 로컬! "

int numberOfSchools = `some int`; 
String eduDesc[][] = new String[numberOfSchools][]; 
for (int i = 0; i < numberOfSchools; i++) { 
    /* n No of schooling work */ 
    eduDescAmount = scan.nextInt(); 
    /* More schooling here */ 
} 

희망이 답변을 :

솔루션처럼 루프 외부로 선언하는 것입니다.

+0

다른 대답과 같은 문제는 'eduDescAmount'가 루프 앞에 알려지지 않았기 때문입니다. – maraca

+0

유용하지만, 다른 질문을 모두 한 후에 설명 점의 양을 물어보고 각 학교에 배치해야합니다. 즉 학교 정보 1 : x, y, z; 사용자가 2 개의 세부 정보를 추가하려고합니다. (사용자 입력) (사용자 입력) 학교 2 : x, y, z; 사용자가 1을 (를) 추가하려고합니다. (사용자 입력) 제안 사항? –

+0

foru 루프에 들어가기 전에'numberOfSchools'와'eduDescAmount'에 대한 가치를 가져다가'eduDesc [] []'변수를 선언하기 전에 할당하면 문제가 없습니다. – Adil

관련 문제