2015-06-16 5 views
0

Цель моего кода для отображения количества студентов и их соответствующего класса следующим образом:Ввод целых чисел в массив Ошибка?

   Student    Grade 
       1     53 
       2     45 

Так на ...

Я использовал массив 5x2, в котором пользователь может ввести значение для класса ...

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

Мои проблемы:

(1) Почему я даже в состоянии ввести 3 значения на одного студента (Должно быть только в состоянии ввода 1 значение для каждого студента).

(2) Почему это третье значение, которое рассматривается?

Вот мой код:

import java.util.*; 

public class practice { 

    public static void main(String[] args) { 
     int[][] studentGrade = new int[5][2]; 

     for(int i = 0; i<5; i++) { 
      studentGrade[i][0] = i+1; 
     } 

     for(int j = 0; j<5; j++) { 
      System.out.printf("Student %s: ", j+1); 
      Scanner input = new Scanner(System.in); 
      if(input.nextInt()>=0 && input.nextInt()<=100) { 
       studentGrade[j][1] = input.nextInt(); 
      } 
      else { 
       studentGrade[j][1] = 0; 
       System.out.printf("Student %s's mark has been defaulted", j); 
      } 
     } 

     System.out.print("\nStudent \t Grade"); 
     for(int s=0; s<5; s++) { 
      System.out.print("\n" + studentGrade[s][0] +"\t" + "\t " + studentGrade[s][1]); 
     } 
    } 
} 

ответ

1

input.nextInt()потребляет следующее число в потоке.

Вы должны сделать это:

Scanner input = new Scanner (System.in); 
for (int j = 0; j < 5; j++) { 
    System.out.printf("Student %s: ", j+1); 
    int num = input.nextInt(); 
    if (num >= 0 && num <= 100) 
     studentGrade[j][1] = num; 
    else { 
     studentGrade[j][1] = 0; 
     System.out.printf("Student %s's mark has been defaulted", j+1); 
    } 
} 

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

+0

Да, я так и думал, спасибо! – MasterWali

+0

@RamanSB Также обратите внимание, что для «оценки ученика по умолчанию» 'printf' вы, вероятно, также хотите использовать' j + 1' вместо 'j'. Я заметил это и исправил его, но я хотел убедиться, что вы его видите, и в фактическом ответе не было достаточного внимания: D – Jashaszun

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