2014-12-09 2 views
0

Это проблема, с которой у меня была проблема в течение длительного времени, и было бы неплохо, если бы я мог наконец получить ответ на этот вопрос. Мой инструктор в школе всегда, кажется, придумывает решение для корабля вокруг этого, но мне нужно знать, как его исправить.Правила области для циклов в java

/** 
* 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 в int a в качестве общего значения для всех классов, строка ниже, где я пытаюсь вызвать ее в метод, не будет распознавать, что int a был объявлен ,

+0

Переменная, объявленная внутри {}, имеет область видимости внутри, только ex {int a}, область видимости будет внутри {{}, в вашей задаче объявить int ausid подобно int a = 0; для (некоторого условия) {}; –

ответ

1

Вы должны объявить переменную a до цикла:

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

Таким образом, он остается в пределах области после окончания цикла, и вы можете получить доступ к его стоимости.

+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 внутри для цикла, а это означает, что он не будет доступен за пределами этого цикл. Обходной путь может быть примерно таким.

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

Сфера применения - видимость. Переменная не видна вне ее области. Например:

int b; 

for ... { 
    int a = 1; 
    b = 2; 
} 

int c = b; 
int d = a; // error 

В этом случае б объявлен вне для цикла, так что назначение сделаны б виден снаружи для цикла. Использование этого значения вне цикла for отлично.

С другой стороны, назначение от a является незаконным, поскольку a было , объявленное внутри цикла for. Таким образом, он больше не доступен после выхода из цикла, поэтому нет возможности «a» для назначения d.

Смежные вопросы