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

В настоящее время я модифицирую предыдущую программу Java, которая вычисляет математические задачи типа квадратичной формулы, разбивая части моего кода на методы и вызывая эти методы для выполнения той же задачи. В настоящее время я застрял в создании метода вычисления дискриминанта в числителе. Как назначено, у меня должен быть один метод, который получает пользовательский ввод для значений a, b и c, но я не уверен, как получить эти значения из одного метода в следующий, который должен использовать эти значения в расчеты.

Мой инструктор хочет, чтобы мы вводили переменные a b и c в массив, и я знаю, что сейчас это довольно ручной способ помещения значений в массив, но он все еще должен работать для этой цели.

Вот что у меня есть на данный момент, и спасибо за чтение.

EDIT: я снова начал с нуля, я не могу понять, как правильно вернуть информацию из моих методов, чтобы следующий мог ее использовать. Я продолжаю получать аргумент метода, не применимый к ошибкам. Любые идеи?

import java.util.*;

public class QuadraticMethods {
public static void main(String[] args){

    getValues();
    calcDisc(userInput);



}


public static double[] getValues() {
    double[] userInput;
    userInput = new double[3];
    Scanner kbd = new Scanner(System.in);
    System.out.println("Fourth Assignment by MyNameHere");
    System.out.println("Welcome to the quadratic formula computation tool.");
    System.out.println("This tool will solve problems in the form of: a^x + bx + c.");
    System.out.println("Please enter the values you would like for a, b, and c.");
    for (int i = 0; i < userInput.length; i++) {
        userInput[i] = kbd.nextDouble(); }


    double aValue = userInput[0];
    double bValue = userInput[1];
    double cValue = userInput[2];
    /*
    System.out.println(aValue);
    System.out.println(bValue);
    System.out.println(cValue);
     */
    return userInput;
}


public static double calcDisc(double[] userInput) {
    double aValue = userInput[0];
    double bValue = userInput[1];
    double cValue = userInput[2];
    double radicalValue = (Math.pow(bValue, 2) - (4*aValue*cValue));
    System.out.println(radicalValue);
    return radicalValue;
}

}


person B_Ran    schedule 10.02.2015    source источник
comment
Когда вы вызываете getValues в main, он возвращает double[]. Вам нужно зафиксировать возвращаемое значение, используя double[] userInput = getValues();. Затем передайте его в качестве входного аргумента в calcDisc(). Вам нужно изменить сигнатуру метода calcDisc на calcDisc(double[] userInput).   -  person DavidS    schedule 10.02.2015
comment
В будущем вам будет легче, если вы начнете изучать область видимости переменной. Область видимости переменных Google Java, чтобы узнать больше.   -  person DavidS    schedule 10.02.2015
comment
Спасибо, Дэвид, это имеет смысл. В настоящее время я изучаю масштаб в классе прямо сейчас. Буду ли я фиксировать это возвращаемое значение в начале моего второго метода? или в конце первого?   -  person B_Ran    schedule 10.02.2015
comment
getValues возвращает значение, необходимое calcDisc для выполнения своей работы. Таким образом, вы фиксируете возвращаемое значение getValues и используете его в качестве входных данных для calcDisc. Тем не менее, вы, вероятно, также захотите зафиксировать возвращаемое значение calcDisc и распечатать результаты или что-то в этом роде.   -  person DavidS    schedule 10.02.2015
comment
На самом деле, присмотревшись, я не думаю, что calcDisc скомпилируется. В сигнатуре метода сказано, что он возвращает double, но вы никогда не вызываете return в теле метода.   -  person DavidS    schedule 10.02.2015


Ответы (1)


Чтобы ваш текущий код заработал, требуется лишь небольшое изменение:

public static void main(String[] args) {

    double[] userInput = getValues();
    calcDisc(userInput);
}

В дальнейшем эти присвоения фактически не используются.

public static double[] getValues() {
    // ...

    double aValue = userInput[0];
    double bValue = userInput[1];
    double cValue = userInput[2];

    // ...
}

Некоторые другие улучшения могут быть:

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

public static void main(String[] args) {

    double[] userInput = getValues();
    double radicalValue = calcDisc(userInput);

    System.out.println(radicalValue);
}

// ...

    public static double calcDisc(double[] userInput) {
    double aValue = userInput[0];
    double bValue = userInput[1];
    double cValue = userInput[2];
    double radicalValue = (Math.pow(bValue, 2) - (4 * aValue * cValue));
    return radicalValue;
}

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

public static void main(String[] args) {

    while (true) {
        double[] userInput = getValues();
        double radicalValue = calcDisc(userInput);

        System.out.println(radicalValue);
    }
}

будет печатать текст баннера каждый раз. Изоляция обязанностей позволяет вам изменять поведение, не затрагивая несвязанный код.

public static void main(String[] args) {

    printBanner();
    while (true) {
        double[] userInput = getValues();
        double radicalValue = calcDisc(userInput);

        System.out.println(radicalValue);
    }
}

private static void printBanner() {
    System.out.println("Fourth Assignment by MyNameHere");
    System.out.println("Welcome to the quadratic formula computation tool.");
    System.out.println("This tool will solve problems in the form of: a^x + bx + c.");
}

Сканер должен быть закрыт после использования. Java 7 try with resources сделает это за вас.

public static double[] getValues() {
    double[] userInput;
    userInput = new double[3];
    try (Scanner kbd = new Scanner(System.in)) {
        System.out.println("Please enter the values you would like for a, b, and c.");
        for (int i = 0; i < userInput.length; i++) {
            userInput[i] = kbd.nextDouble();
        }
    }
    return userInput;
}
person Max Fichtelmann    schedule 11.02.2015
comment
Это огромный Макс. Я не понимал, что мне нужно иметь переменные, которым я пытаюсь присвоить возвращаемое значение, в моем файле main. Мне нужно, чтобы они были объявлены и равны моему методу, чтобы я мог передать информацию следующему методу, правильно ли я понимаю сейчас? Это было предложено мне предыдущим постером вчера, но, я думаю, это не сработало. - person B_Ran; 11.02.2015
comment
это абсолютно правильно! в большинстве случаев, когда метод возвращает значение, его следует каким-то образом присвоить и оценить. т. е. String test = "test"; test.substring(2); не изменяет строку, а возвращает измененное значение; String st = test.substring(2); делает свое дело - person Max Fichtelmann; 11.02.2015