Почему мой массив не передается другому классу?

#java #arrays

#java #массивы

Вопрос:

Я просмотрел похожие примеры или другие программы, которые вызывают array из другого класса, и кажется, что я сделал это правильно, но я все еще получаю ошибки. Здесь хранятся arrarys:

 import java.util.Scanner;
public class DriverProgram {
    public static int[] IDs = new int[10];
    public static String[] names = new String[10];
    public static double[] grades = new double[10];
    public static int i = 0;
    static Student call = new Student();
    public static void main(String[] args){
        call = new Student();
        Scanner command = new Scanner(System.in);
        System.out.println("Please Enter a command(i, r, s, or d): ");
        while(command.hasNext()){
            char command1 = command.next().charAt(0);
            if(command1 == 'i'){
                call.AddToArray(IDs[], names[] , grades[], i);
            }else if(command1 == 'r'){
                call.RemoveFromArray(int [] IDs, String [] names,double [] grades, int i);
            }else if(command1 == 's'){
                call.SortArray(int [] IDs, String [] names,double [] grades, int i);
            }else if(command1 == 'd'){
                call.DisplayArray(int [] IDs, String [] names,double [] grades, int i);
            }else if(command1 == 'z') {
            break;
            }
            else System.out.println("Invalid command enter a valid command next time.");
            System.out.println("Please Enter a command(i, r, s, or d) or z to finish: ");
        }
    }
  

И это то, для чего я пытаюсь вызвать массивы:

 import java.util.Scanner;
public class Student {

    public static void AddToArray(int[] IDs, String[] names, double[] grades, int i) {

        if (i >= 10) {
            System.out.println("You have already inputted 10 students please delete one first.");
        } else {
            Scanner readin = new Scanner(System.in);
            Scanner readinname = new Scanner(System.in);
            Scanner readingrade = new Scanner(System.in);
            System.out.println("Please enter student ID: ");
            IDs[i] = readin.nextInt();
            System.out.println("Please enter student name: ");
            names[i] = readinname.nextLine();
            System.out.println("Please enter student grade: ");
            grades[i] = readingrade.nextDouble();
            System.out.println(IDs[i]   " "   names[i]   " "   grades[i]);
            i  ;
            for (int j = 0; j < i; j  ) {
                if (IDs[j] == IDs[i]) {
                    System.out.println("This student has already been entered.");
                }else{
                    System.out.println("The student has been added");
                    break;
                }

            }
        }
    }
  

Я не уверен, что еще мне нужно или чего мне не хватает для вызова этих массивов.

Комментарии:

1. docs.oracle.com/javase/tutorial/java/javaOO/arguments.html

Ответ №1:

 call.AddToArray(IDs[], names[] , grades[], i);
  

должен быть заменен на

 call.AddToArray(IDs, names , grades, i);
  

PS Примечания по дизайну

  • Student имеет только static метод, так что это утилитарный класс и не должен разрешать создание экземпляра
  • call.AddToArray() и другие static методы должны вызываться как Student.AddToArray()
  • array неправильная структура данных, в которой вы можете добавлять или удалять элементы. Есть более подходящие структуры данных, такие как List или Map .
  • Лучше использовать только один экземпляр Scanner .

Вот как вы DriverProgram могли бы выглядеть.

 public class DriverProgram {

    public static void main(String[] args) {
        Map<Integer, Student> students = new HashMap<>();
        Scanner scan = new Scanner(System.in);

        while (scan.hasNext()) {
            System.out.println("Please Enter a command [1-5]:");
            System.out.println("1. add new student");
            System.out.println("2. remove existed student");
            System.out.println("3. sort existed students by grades desc");
            System.out.println("4. show existed students");
            System.out.println("5. exit");
            System.out.print("> ");

            int menu = scan.nextInt();

            if (menu == 1)
                addStudent(scan, students);
            else if (menu == 2)
                removeStudent(scan, students);
            else if (menu == 3)
                sortStudents(students);
            else if (menu == 4)
                showStudents(students);
            else if (menu == 5)
                break;

            System.err.println("Unknown command. Try again");
        }
    }

    private static void addStudent(Scanner scan, Map<Integer, Student> students) {
        if (students.size() == 10) {
            System.err.println("You have already inputted 10 students please delete one first.");
            return;
        }

        System.out.print("Please enter student ID: ");
        int id = scan.nextInt();

        if (students.containsKey(id)) {
            System.err.println("This student with this id has already been entered.");
            return;
        }

        System.out.print("Please enter student name: ");
        String name = scan.nextLine();

        System.out.print("Please enter student grade: ");
        double grade = scan.nextDouble();

        students.put(id, new Student(id, name, grade));
    }

    private static void removeStudent(Scanner scan, Map<Integer, Student> students) {
    }

    private static void sortStudents(Map<Integer, Student> students) {
    }

    private static void showStudents(Map<Integer, Student> students) {
    }

    public static final class Student {

        private final int id;
        private final String name;
        private final double grade;

        public Student(int id, String name, double grade) {
            this.id = id;
            this.name = name;
            this.grade = grade;
        }

    }

}