Создание метода в другом классе с передачей объектов и выведением на консоль

297
26 ноября 2016, 19:20

Задача:

  1. Создать класс Student с параметрами имя и курс;

  2. в методе Main создать 5 объектов (студентов).

1 метод (show) выводит всю информацию о студентах.

2 метод: нужно передать все 5 студентов и вывести на консоль имена студентов, которые учатся на определенном курсе (номер курса нужно передать в метод, со сканером).

Помогите справиться со вторым методом, никак не получается его создать.

класс Main:

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Student student1 = new Student();
        student1.name = "Sasha";
        student1.course = 1;
        student1.show();
        Student student2 = new Student();
        student2.name = "Lesha";
        student2.course = 2;
        student2.show();
        Student student3 = new Student();
        student3.name = "Anya";
        student3.course = 3;
        student3.show();
        Student student4 = new Student();
        student4.name = "Tanya";
        student4.course = 4;
        student4.show();
        Student student5 = new Student();
        student5.name = "Ilya";
        student5.course = 5;
        student5.show();
}

    student1.countCourse (); 

класс Student:

import java.util.Scanner;
public class Student {
    public String name;
    public int course;
    public void show() {
        System.out.println(name + " " + course);
    }
    public void countCourse() {
        int i = course;
        String m = name;
        System.out.println("Введите курс: ");
        Scanner sc = new Scanner(System.in);
        if (sc.hasNextInt() && sc.nextInt() > 0 && sc.nextInt() <= 5) {
            i = sc.nextInt();
            System.out.println(m);
        } else {
            System.out.println("Введите курс от 1 до 5");
        }
    }
}
Answer 1

Я б немного переделал:

  1. Всех студентов поместил бы в список, чтоб в методах show и countCourse можно было передать этот список, а там внутри пробежаться циклом и вывести нужную информацию.
  2. Добавил конструктор, который принимает на вход имя студента и курс. Что упростит, как минимум создание объекта и добавление его в коллекцию.
  3. Так как просмотр все инфы о студентах и просмотр всех, кто находится на определенном курсе, по сути, в данном случае, как мне кажется, не относится к конкретном студенту, то методы можно делать статическим.
  4. В методе countCourse организуем бесконечный цикл, в котором запрашиваем цифирочку (не хватает проверок на ошибки но это на вашей совести будет %)). Как только получаем нужную цифру курса - останавливаем цикл и организуем уже другой цикл, который бежит по переданной коллекции студентом и выводит имя+курс того студент, чей номер совпал с введенным.

Как-то так.

class Student

package test;
import java.util.List;
import java.util.Scanner;
/**
 * Created by iprogrammer on 13.11.2016.
 */
public class Student {
    private String name;
    private int course;
    public Student(String name, int course) {
        this.name = name;
        this.course = course;
    }
    public static void show(List<Student> students) {
        for (Student student : students) {
            System.out.println(student.name + " " + student.course);
        }
    }
    public static void countCourse(List<Student> students) {
        Scanner sc = new Scanner(System.in);
        int course = 1;
        while (true) {
            System.out.println("Введите курс (1-5): ");
            course = sc.nextInt(); // Integer.parseInt(sc.nextLine());
            if (course >= 1  && course <= 5)
                break;
        }
        System.out.println("Студенты с курса номер " + course + ": ");
        for (Student student : students) {
            if (student.course == course)
                System.out.println(student.name + " " + student.course);
        }
    }
}

метод main

List<Student> students = new ArrayList<>();
students.add(new Student("Sasha", 1));
students.add(new Student("Lesha", 2));
students.add(new Student("Anya", 3));
students.add(new Student("Tanya", 4));
students.add(new Student("Ilya", 5));
Student.show(students);
Student.countCourse(students);
Answer 2

Насколько я понимаю, в данной задаче под:

1 метод (show) выводит всю информацию о студентах. 2 метод: нужно передать все 5 студентов и вывести на консоль имена студентов, которые учатся на определенном курсе (номер курса нужно передать в метод, со сканером).

понимается создание методов в классе Main, а не в классе Student.

А теперь по порядку:

Задача: создать класс Student с параметрами имя и курс

Данный класс лучше определить таким образом:

public class Student {
    private String mName;
    private int mCourse;
    public Student(String name, int course) {
        mName = name;
        mCourse = course;
    }
    public String getName() {
        return mName;
    }
    public int getCourse() {
        return mCourse;
    }
    public void setName(String name) {
        mName = name;
    }
    public void setCourse(int course) {
        mCourse = course;
    }
    public void print() {
        System.out.println("Студент " + mName + " учится на " + mCourse + " курсе.");
    }
}

Обратите внимание на:

  1. Модификатор доступа private у полей класса. С этим модификатором поля класса недоступны напрямую извне. Получить/задать значения этих полей можно с помощью соответствующих геттеров/сеттеров. Всегда объявляйте поля класса как private, если явно не требуется иное.

  2. Префикс m у полей класса – этот префикс принято добавлять для всех нестатических полей класса (для статических полей префикс будет s). По нему сразу можно понять что мы имеем дело с обычным полем класса.

  3. Конструктор Student(String name, int course), с помощью которого мы сразу можем создать объект с нужными параметрами.

Соглашусь с Вами, что в классе Student целесообразно определить некоторый метод, который будет выводить текстовое представление объекта на экран.

Далее:

в методе Main создать 5 объектов (студентов). 1 метод (show) выводит всю информацию о студентах.

Коль уж задача начального уровня и учебная, то для хранения списка студентов будем использовать простой массив:

public class Main {
    public static void main(String[] args) {
        Student[] students = new Student[5];
        students[0] = new Student("Вася", 5);
        students[1] = new Student("Петя", 1);
        students[2] = new Student("Аня", 3);
        students[3] = new Student("Федор", 5);
        students[4] = new Student("Маша", 5);
        show(students);
    }
    public static void show(Student[] students) {
        for (int i=0; i<students.length; i++) {
            students[i].print();
        }
    }
}

2 метод: нужно передать все 5 студентов и вывести на консоль имена студентов, которые учатся на определенном курсе (номер курса нужно передать в метод, со сканером).

public class Main {
    public static void main(String[] args) {
        Student[] students = new Student[5];
        students[0] = new Student("Вася", 5);
        students[1] = new Student("Петя", 1);
        students[2] = new Student("Аня", 3);
        students[3] = new Student("Федор", 5);
        students[4] = new Student("Маша", 5);
        System.out.print("Введите курс: ");
        Scanner scanner = new Scanner(System.in);
        if (scanner.hasNextInt()) {
            show(students, scanner.nextInt());
        } else {
            System.out.print("Введены некорректные данные!");
        }
    }
    public static void show(Student[] students, int course) {
        for (int i=0; i<students.length; i++) {
            if (students[i].getCourse() == course) {
                students[i].print();
            }
        }
    }
}
READ ALSO
Java jcurses проблема при запуске helloworld :-)

Java jcurses проблема при запуске helloworld :-)

Пытаюсь запустить приложение с использованием jcurses:

376
Switch-on-strings Java7 - архив переписки JSR 334

Switch-on-strings Java7 - архив переписки JSR 334

ЗдравствуйтеМожет ли мне кто-нибудь объяснить небольшой момент в переписки, касательно критики и предложений данного нововведедения switch-on-strings...

237
Симуляция движения в 2D игре, Android canvas

Симуляция движения в 2D игре, Android canvas

Пишу простенький раннер, движение объекта (того, кто бежит) симулирую сдвигом на определенное расстояние картинки на бэкграунде (фона)

232
Движение по лабиринту.

Движение по лабиринту.

Делаю лабиринтДвижение осуществляется по фрейму, в зависимости от значения в массиве map, где 1 - можно двигаться, 2 - стена

322