как вызвать if-Statement из другого класса - PullRequest
0 голосов
/ 13 июня 2018

В этой программе представлен оператор if, который должен вызываться из другого класса с именем класса Studentfactory.

public class Control {
    public static void main(String[] args) {
        Student[] studs = new Student[3];
        for (int i = 0; i < 3; i++) {
            studs[i] = createStudent();
        }
        for (int i = 0; i < 3; i++) {
            System.out.println(studs[i]);
        }
    }

    static Student createStudent() {
        Scanner sc = new Scanner(System.in);
        System.out.print("Enter your name:");
        String name = sc.nextLine();
        System.out.print("Enter your age:");
        int age = sc.nextInt();

        if(age <20) {
            return new JuniorStudent(name, age);
        } else if( age < 30) {
            return new IntermediateStudent(name,age);
        }
        return new SeniorStudent(name, age);
    }
}

// если оператор должен вызываться из этого класса

package demo;

public class Studentfactory {



    }

Ответы [ 3 ]

0 голосов
/ 13 июня 2018

interface для "оператора if" будет Predicate, в вашем случае, вероятно, Predicate<Integer>.Вы можете сделать что-то вроде

class AgePredicates {
    public static final Predicate<Integer> isJunior = a -> a < 20;
    public static final Predicate<Integer> isIntermediate = a -> a > 20 && a < 30;
    public static final Predicate<Integer> isSenior = a -> a >= 30;
}

, а затем "вызвать их из другого класса" на

if (AgePredicates.isJunior.test(age)) {
    // ...
} else if (AgePredicates.isIntermediate.test(age)) {
    // ...
} else {
    // ...
}
0 голосов
/ 13 июня 2018

Если я правильно понимаю, вы хотите вызвать статический метод createStudent класса Control из класса StudentFactory

Способ сделать это -

Control.createStudent()

(в классе StudentFactory)

Надеюсь, это поможет!

0 голосов
/ 13 июня 2018

Что вы можете сделать, это указать возраст Student в качестве параметра в вашем методе:

static Student createStudent(int age) {  // note the parameter here
    Scanner sc = new Scanner(System.in);
    System.out.print("Enter your name:");
    String name = sc.nextLine();

    // no sc.nextInt() here anymore
    if(age <20) {
        return new JuniorStudent(name, age);
    } else if( age < 30) {
        return new IntermediateStudent(name,age);
    }
    return new SeniorStudent(name, age);
}

Таким образом, вы можете прочитать следующее целое число из командной строки где-нибудь еще и просто вызватьметод со следующим int в качестве параметра.Затем метод решает, какого типа ученика нужно создать.

ОБНОВЛЕНИЕ

В другом уроке, который вы предоставили, вы получите возраст из любой точки (командная строка, скорее всего), а затем использовать его в качестве параметра следующим образом:

public class Studentfactory {

    public Student createStudentByControl() {
        // create a new Control object
        Control control = new Control();
        // get the age from command line
        int age = sc.nextInt();
        // use the age as parameter for the control to create a new student
        Student student = control.createStudent(age);
        return student;
    }
}
...