Java - передача переменных методу через конструктор

Можно ли отправить переменные, которые мне нужны в методе, через конструктор?

У меня 2 файла:

public class Recording {

public int height;
public int diameter;
public int weight;

public Recording (int height, int diameter, int weight) {
    this.height = height;
    this.diameter = diameter;
    this.weight = weight;
    }
}

а также

public class Leergut {

public static void main(String[] args) {

    int height;
    int diameter;
    int weight;
    int code;
    int pfand;

    while (code != -1) {

        Recording r = new Recording(System.in.read(), System.in.read(), System.in.read());
        classify(r);
    } else {
        // to be continued
    }

}
public static int classify(Recording r) {

    if (height == 250 && diameter = 67 && weight == 365) { code = 0; return code;}

    else { code = -1; return code ;}
}

Я ищу способ передать высоту, диаметр и вес (как объявлено в классе записи) методу "classify".

Или мне нужно снова объявить переменные внутри метода, чтобы он работал?

PS: Для тех, кто пытался помочь мне в моей первой беседе, я решил сделать новый пост, так как он предоставит лучший обзор.

Проголосовали против, поскольку вопрос демонстрирует отсутствие понимания основных функций языка. Вы должны прочитать несколько руководств по Java или книг по Java для начинающих.

Bogdan Lukiyanchuk 08.04.2018 20:33
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
1
69
5

Ответы 5

Вы можете создать методы получения и установки для переменных высоты, диаметра и ширины в записи. Затем вызовите их в своем методе классификации.

Пример:

// Methods in Recording.java
public int getWidth() {
    return this.width;
}
public int getDiameter()
    return this.diameter;
}
public int getHeight() {
    return this.height;
}

А в методе classify просто получите значения из записи:

public static int classify(Recording r) {

    if (r.getHeight() == 250 && r.getDiameter() == 67 && r.getWidth() == 365) {
        // Do whatever
    }
}

Это предложение

Вы должны инициализировать переменные, а затем создать 3 метода, которые возвращают соответствующие значения.

public class Recording {

     private int height = 0;
     private int diameter = 0;
     private int weight = 0;

     public Recording (int height, int diameter, int weight) {

         this.height = height;
         this.diameter = diameter;
         this.weight = weight;
    }

    public int getHeight()
    {
         return height;
    }

    public int getDiameter()
    {
         return diameter;
    }

    public int getWeight()
    {
         return weight;
    }
}

public static int classify(Recording r) {

    if (r.getHeight() == 250 && r.getDiameter() == 67 && r.getWeight() == 365) { code = 0; return code;}

    else { code = -1; return code ;}
}

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

tung 08.04.2018 21:03

@tung Вот почему я сказал, что это предложение

Héctor Manuel Martínez Durán 08.04.2018 21:07

Чтобы передать переменные методу, вы можете сделать это так:

public void myMethod(int variable1, boolean variable2) {
    //method body
}

Назвать это можно так:

public static void main(String[] args){
     int a = 2;
     boolean f = false;
     myMethod(a,f);
     // If static do:
     // ClassThatHasTheStaticMethod.myMethod(a,f);
}

В качестве примечания:

while (code != -1) {
    Recording r = new Recording(System.in.read(), System.in.read(), System.in.read());
    classify(r);
} else {
    // to be continued
}

Вы не можете поместить оператор else после блока кода while, так как это приведет к ошибке компиляции.

ты имеешь ввиду это?

    public static int classify(Recording r) {

    if (r.height == 250 && r.diameter = 67 && r.weight == 365) { 
        code = 0; return code;
    }
    else { 
        code = -1; return code ;
    }

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

Пробовал, тоже отлично смотрится! Получение исключения IOException для «Запись r = новая запись (System.in.read (), System.in.read (), System.in.read ());» хоть. Должен быть способ считывать значения int в объект.

Ar2rias 08.04.2018 20:44

Пробовал новый подход. Снова объявил переменные внутри метода (не могу понять, как вызвать функцию Setter с помощью "System.in.read ()"

public static int classify(Recording r) {

    int height = System.in.read();
    int diameter = System.in.read();
    int weight = System.in.read();

    if (height == 250 && diameter == 67 && weight == 365) {int code = 0; return code;}

    else { int code = -1; return code ;}
}

Однако теперь мой объект «Запись r» сообщает мне, что переменные больше не могут быть разрешены. А ТАКЖЕ System.in.read (); для трех переменных внутри метода генерируется какое-то исключение IOException.

Другие вопросы по теме