2014-12-09 5 views
0

입니다.이 문제는 오랜 시간 동안 문제가 있었는데 마침내 이에 대한 대답을 얻을 수 있다면 좋을 것입니다. 학교의 강사가이 문제를 해결하기 위해 항상 공예품 해결책을 제시하는 것 같지만 해결 방법을 알아야합니다.for 루프의 범위에 대한 규칙은

/** 
* This program lets you enter your students names and grades 
* 
* @author (Austin) 
* @version (1.0.0) 
*/ 

import java.io.*; 
import java.util.*; 
public class Tester 
{ 
    public static void main (String args[]) 
    { 
     Scanner kb = new Scanner(System.in); 

    System.out.println ("How many students do you have?"); 
    int numOfStudents = kb.nextInt(); 

    String studentName[] = new String [numOfStudents]; 
    int studentGrade[] = new int[numOfStudents]; 

    System.out.println ("Please enter student name, then hit enter. Then enter student grade."); 
    int x; 
    int y; 
    for (x = 0; x <= numOfStudents - 1; x++) 
    { 
     String name = kb.next(); 
     studentName[x] = name; 
     for (y = 0; y <= 0; y++) 
     { 
      int grade = kb.nextInt(); 
      studentGrade[y] = grade; 
     } 
     if (x != numOfStudents -1) 
     { 
      System.out.println (""); 
      System.out.println ("Next Student:"); 
      System.out.println (""); 
     } 
    } 

    System.out.println ("What would you like to do?"); 
    System.out.println ("1. Find class average\n2. Find student grade"); 
    int user = kb.nextInt(); 

    Grade_Methods g1 = new Grade_Methods(); 
    int z; 

    if (user == 1) 
    { 
     for (z = 0; z <=numOfStudents - 1; z++) 
     { 
      int a =+ studentGrade[z]; 
     } 
     g1.gradeAverage(a,numOfStudents); 
    } 
} 
} 

문제는 if 문 내부의 코드 하단에 있습니다. 이 프로그램은 배열을 더 잘 이해할 수 있도록 도와 주며 for 루프를 사용하는 것 외에는 데이터를 꺼내는 방법을 모르겠습니다. 내 문제는 배열 studentGrade의 모든 값을 모든 성적의 총 가치로 a에 저장하려고하면 메소드로 호출하려고하는 아래의 행이 해당 int를 인식하지 못한다는 것입니다. a이 선언되었습니다. . 루프 종료 후 그 범위 내에서 유지

int a = 0; 
    for (z = 0; z <=numOfStudents - 1; z++) 
    { 
     a += studentGrade[z]; 
    } 

이 방법을, 그리고 당신은 그 값에 액세스 할 수 있습니다

+0

{} 안에 선언 된 변수는 그 안에 범위가 있습니다. ex {int a}, 범위는 {} 안에 있습니다. 문제는 int a = 0과 같은 ouside를 선언합니다. for (some condition) {}; –

답변

1

당신은 a 변수 전에 루프를 선언해야합니다.

+0

나는 그것을 이전에 시도했지만 작동하지 않았다. 그러나 int a = 0; 그것은 효과가 있었다. 그게 왜? –

+0

루프의 블록 내부에서 선언 된 @DiamondBrook 변수는 루프가 끝날 때까지만 존재합니다. 루프의 blcok 전에 선언 된 변수는 루프가 끝난 후에도 남아 있습니다. 그래서 루프 앞에 'a'를 선언해야합니다. – Eran

1

int a은 for 루프 범위 내에서 선언되었습니다. 당신은 루프 외부 변수에 액세스하려면이를 사용

int a = 0; 
for (z = 0; z <=numOfStudents - 1; z++) 
{ 
    a += studentGrade[z]; 
} 
g1.gradeAverage(a,numOfStudents); 
0

을 당신은 루프의 내부 INT 선언은 for 루프의 외부에 액세스 할 수 없습니다 것을 의미하고있다. 해결 방법은 다음과 같습니다.

if (user == 1) { 
    int a = 0; 
    for(z = 0; z <= numOfStudents - 1; z++) { 
     a += studentGrade[z]; 
    } 
    g1.gradeAverage(a, numOfStudents); 
} 
0

범위는 가시성에 대한 것입니다. 해당 범위 외부에서 볼 수없는 변수입니다. 예를 들면 다음과 같습니다.

이 경우 b는 for 루프 외부에서 선언되므로 b에 대한 할당은 for 루프 외부에서 볼 수 있습니다. for 루프 외부에서 그 값을 사용하는 것이 좋습니다.

반면에 a는 이 for 루프 내에으로 선언 되었기 때문에 a의 할당이 잘못되었습니다. 따라서 루프를 빠져 나면 더 이상 사용할 수 없으므로 d에 할당 할 수있는 "a"가 없습니다.