2017-12-26 45 views
1

저는 프로젝트를 수행하고 있으며 코드에 어떤 문제가 있는지 알지 못합니다. 그것은, 주제에, #ofSubjects를 입력 학생의 이름을 이름을 물어 볼게요, 학년 inputed 주제에 대한, 학생 당 평균 등급 및 평균 가장 높은 . 학생 당 평균 학년은 맞았지 만 가장 높은 평균을 나열하면 그 값이 정확하지 않습니다. 나의 영어로 유감스럽게 생각합니다. 제 첫 언어가 아니며, 제 질문에 대해 유감스럽게 생각합니다. 나는 아직도 배우고 있습니다. 이 사실을 알면 고맙습니다. 여기에 코드배열 값이 잘못 표시되었습니다.

for (c=0; c<a; c++){ 
     System.out.print(e+ ". Name: "); 
     students [c] = read.readLine(); 
     e++; 
     for (f=0; f<b; f++){ 
      System.out.print("\t Grade in " +subjects[f] + ": "); 
      grade [f] = Integer.parseInt(read.readLine()); 
      for (g = 0; g<b; g++){ 
       total [g] = grade[f] + grade[g]; 
       average [g] = total[g]/b;}   

     } 
     System.out.println("Average: "+ (double)average[c]); 
    } 

    for (c=0; c<b; c++){ 
     System.out.print((double)average[c]+ "\n");} 


/*Here's the output: 

    MIDTERM EXAM: STUDENT RANKING 
    Enter # of Student: 2 
    Enter # of Subject: 2 
    ---------------------------------- 
    Enter your 2 subjects: 
    1. Java 
    2. Phyton 
--------------------------------- 
    1. Name: Proud 
     Grade in Java: 90 
     Grade in Phyton: 100 
Average: 95.0 
2. Name: Sone 
    Grade in Java: 100 
    Grade in Phyton: 65 
Average: 65.0 
82.0 
65.0 

The 82.0 should be 95.0. 
*/ 

가 [편집]이이 질문은 코멘트에 마지막으로 대답했다입니다! 고맙습니다. 그러나 또 다른 문제가 생겼습니다. 입력 한 모든 성적을 나열하려고 시도하고 있지만 반복 될 때마다 다시 설정되는 것으로 보입니다. 따라서 2 명의 학생들로부터 2 개의 2 과목을 입력하면 마지막으로 2를 입력 한 것입니다.

예 : 내 경우

MIDTERM EXAM: STUDENT RANKING 
Enter # of Student: 2 
Enter # of Subject: 2 
---------------------------------- 
Enter your 2 subjects: 
1. Java 
2. Phyton 
--------------------------------- 
1. Name: Proud 
    Grade in Java: 90 
    Grade in Phyton: 100 
Average: 95.0 
2. Name: Sone 
    Grade in Java: 100 
    Grade in Phyton: 65 
Average: 82.5 
95.0 
82.5 
List of Grades: 
90 
100 
100 
65 

, 그냥 100 & 65이 도와주세요 수있는 3, 4 수를 기록합니다.

List of Grades: 
100 
65 
+0

오신 것을 환영합니다 시도 잘못된 장소에 [질문 ]. 게시물 [mcve]. 자바 애플리케이션을 디버깅하는 방법을 잘 모른다면 IDE 디버거를 배워야한다. – OldProgrammer

+6

코드의 이해를 위해 a, b, c 등의 의미가있는 변수 이름을 사용하는 것이 좋습니다. – GuyKhmel

+1

나는 (g ...)에 대해 생각합니다. 올바른 장소에 있지 않습니다. 평균 [g]는 루프 밖에서 설정해야합니다. –

답변

1

귀하의 평균 배열, 루프의 외부해야

그래서, 읽어주십시오하기

public void studentRanking() { 
     Scanner read = new Scanner(System.in); 

     System.out.println("MIDTERM EXAM: STUDENT RANKING"); 
     System.out.print("Enter # of Student: "); 
     int noOfStudent = read.nextInt(); 
     System.out.print("Enter # of Subject: "); 
     int noOfSubject = read.nextInt(); 

     String[] subjects = new String[noOfSubject]; 
     System.out.println("Enter your " + noOfSubject + " subjects: "); 
     for (int i = 0 ; i < noOfSubject; i++) { 
      System.out.print((i+1) + ". "); 
      subjects[i] = read.next(); 
     } 
     String[] students = new String[noOfStudent]; 
     double[] grade = new double[noOfSubject]; 
     double[] total = new double[noOfStudent]; 
     double[] average = new double[noOfStudent]; 
     double[] allGrades = new double[noOfStudent * noOfSubject]; 
     int t = 0; 

     for (int i = 0, k = 0; i < noOfStudent; i++, k++) { 
      System.out.print((i + 1) + ". Name: "); 
      students[i] = read.next(); 
      for (int j = 0; j < noOfSubject; j++) { 
       System.out.print("\t Grade in " + subjects[j] + ": "); 
       grade[j] = read.nextDouble(); 
       allGrades[t++] = grade[j]; 
      } 
      for (int g = 0; g < noOfSubject; g++) { 
       total[k] += grade[g]; 
      } 
      average[k] = total[k]/noOfSubject; 
      System.out.println("Average: " + average[i]); 
     } 

     for (int c = 0; c < noOfStudent; c++) { 
      System.out.println(average[c]); 
     } 
    } 

OUTPUT

MIDTERM EXAM: STUDENT RANKING 
Enter # of Student: 2 
Enter # of Subject: 2 
Enter your 2 subjects: 
1. Java 
2. Python 
1. Name: Proud 
    Grade in Java: 90 
    Grade in Python: 100 
Average: 95.0 
2. Name: Sone 
    Grade in Java: 100 
    Grade in Python: 65 
Average: 82.5 
95.0 
82.5 
+0

감사합니다! 이 작동합니다. 그러나 나는 모든 성적을 얻으려고 노력하고 있지만 그것이 반복 될 때마다 다시 돌아가는 것처럼 보이므로 2 명의 학생 (90, 100 및 100, 65)에 2 개의 2 학년을 입력하면 마지막 2 개의 가치가 기록됩니다. 나는 (100, 65)을 입력했지만 처음 두는 입력하지 않았다. 너 나 좀 도와 줄 수있어? 고맙습니다. –

+1

새 배열을 선언하고 현재 등급을 저장하는 동안 등급 값을 저장하기 만하면됩니다. –

+0

noOfSubjects 때문입니까? 만약 내가 2를 입력하면, 2x 루프가되지만 4 등급을 입력해야합니까? 그래서 성적 목록을 받으면 그 중 2 개만 보여줍니다. 다른 배열을 추가하려고했지만 여전히 입력 된 4 개의 2 개를 제공합니다. –