2016-10-27 2 views
-4
import java.util.Scanner; 
import java.util.Arrays; 
public class AttendanceManager { 

public static void main(String args[]) 
{ 
    System.out.println("Enter the number of students that are to be recorded."); 
    Scanner studentNum = new Scanner(System.in); 
    int x = studentNum.nextInt(); 
    final int number[] = new int[x]; 

    for(int i=0; i<x; i++) 
    { 
     System.out.println("Enter 1 if the student is present and 0 if the student is not."); 
     final Scanner attendance = new Scanner(System.in); 
     int inp = attendance.nextInt(); 
     int y = inp; 
     switch (inp) 
     { 
     case 1: 
      number[y] = 1; 
      y = y++; 
      break; 
     case 0: 
      number[y] = 2; 
      y = y++; 
      break; 
     default: 
      System.out.println("Please enter 1 or 0."); 
      i--; 
     } 


    } 
    System.out.println("Total Students: " + number.length); 
    for(int k=0; k<number.length; k++) 
    { 
     if (number[k] == 1) 
     System.out.println("Student " + (k+1) + " is " + "present."); 
     else if (number[k] == 2) 
     System.out.println("Student " + (k+1) + " is " + "absent."); 
     else 
     System.out.println("error"); 
    } 
} 

}Как исправить этот код?

Выход:

Enter the number of students that are to be recorded. 
5 
Enter 1 if the student is present and 0 if the student is not. 
1 
Enter 1 if the student is present and 0 if the student is not. 
0 
Enter 1 if the student is present and 0 if the student is not. 
1 
Enter 1 if the student is present and 0 if the student is not. 
1 
Enter 1 if the student is present and 0 if the student is not. 
0 
Total Students: 5 
Student 1 is absent. 
Student 2 is present. 
error 
error 
error 

почему последние 3 не получить назначения на 1 или 0?

+0

'y = y ++' полностью избыточно. 'y ++' является эквивалентом 'y = y + 1' –

+0

' y = y ++ 'даже не увеличивает' y' – khelwood

+1

Модификация 'y' в любом случае бессмысленна. Вы назначаете 'inp'' 'y' на каждой итерации. Вы, конечно же, хотите использовать ** 'i' ** в качестве индекса массива. – Holger

ответ

1

Вы используете неправильный индекс массива:

int inp = attendance.nextInt(); 
    int y = inp; 
    switch (inp) 
    { 
    case 1: 
     number[y] = 1; 
     y = y++; 

y это значение пользовательского ввода, например, 1 или 0, которые затем используются в качестве индекса массива number. Но так как пользователь вводит только 1 или 0, вы НИКОГДА установить индексы массива 2, 3, 4 и т. Д. Итак, вы пытаетесь вывести записи массива, которые никогда не определялись.

Это должно быть

number[i] = 1; 
     ^-- 
0

Вы вводите другой счетчик y, который не имеет никакого смысла, просто держать в одиночку i один.

В качестве возможных значений y, где 0 или 1, ни один из других индексов вашего массива не будет заполнен правильно.

Еще хуже с текущим кодом:

индекс 0 всегда будет содержать 1, если 0 была предоставлена ​​(0 в противном случае)

индекс 1 всегда будет содержать 2, если 1 была предоставлена ​​(0 в противном случае)

Другие индексы никогда не заселены и всегда будут содержать 0.

for(int i=0; i<x; i++) 
    { 
     System.out.println("Enter 1 if the student is present and 0 if the student is not."); 
     final Scanner attendance = new Scanner(System.in); 
     int inp = attendance.nextInt(); 
     //int y = inp; 
     switch (inp) 
     { 
     case 1: 
      number[i] = 1; 
      break; 
     case 0: 
      number[i] = 2; 
      break; 
     default: 
      System.out.println("Please enter 1 or 0."); 
      i--; 
     } 


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