Неправильные результаты после вызова метода - PullRequest
0 голосов
/ 02 июля 2018

Итак, я сейчас беру курс по Java, и задача состоит в том, чтобы вызвать определенные методы из основного метода и заставить их выполнить, а затем передать их вывод основному методу. Все работает нормально, за исключением того, что по какой-то причине пользовательские входы не обновляются. У меня есть два отдельных класса, которые запрашивают пользовательский ввод, и если пользовательский ввод ниже нуля, они должны повторно ввести число до нуля, прежде чем продолжить. Даже если они вводят несколько чисел, а числа выше нуля, поэтому он возвращает значение, он всегда возвращает только первый введенный ими ввод, а не правильный. Любое понимание этого ребята? Впервые задаю вопрос здесь, так что я действительно не знаю, нарушил ли я какое-либо форматирование или еще что-то. Любая помощь приветствуется.

Код, который я публикую, не является моим реальным кодом для класса, это просто отдельная программа, которую я создал, которая демонстрирует проблему, и может использоваться для исправления моего основного кода. Это просто сокращает многие бесполезные вещи.

import java.util.Scanner;
public class tezsters {

    public static double test(double test1) {
        Scanner scanner=new Scanner(System.in);

        while(test1<=0) {
            System.out.println("Test one must be above zero, please reenter");
            test1 = Double.parseDouble(scanner.nextLine());
            System.out.println(test1);// this line is just here to test if the user input was being assigned to test1, which it was.
            if(test1>0) {
                return test1;
            }
        }
        return test1;
    }


    public static double tests(double test2) {
        Scanner scanner = new Scanner(System.in);
        while (test2 <= 0) {
            System.out.println("Test two must be above zero, please reenter");
            test2 = Double.parseDouble(scanner.nextLine());
            System.out.println(test2);
            if (test2 > 0) {
                return test2;
            }
        }
        return test2;
    }


    public static double display(double test1, double test2){
        System.out.println("if test 1 is " + test1);
        System.out.println("Then test 2 is " + test2);
        return test1;
    }


    public static void main (String [] args) {

        Scanner scanner=new Scanner(System.in);
        System.out.println("Enter test 1 value");
        double test1 = Double.parseDouble(scanner.nextLine());
        test(test1);
        System.out.println("Enter test 2 value");
        double test2 = Double.parseDouble(scanner.nextLine());
        tests(test2);
        display(test1,test2);

    }
}

1 Ответ

0 голосов
/ 02 июля 2018

В вашем основном методе вы делаете следующее:

double test1 = Double.parseDouble(scanner.nextLine());
test(test1);
System.out.println("Enter test 2 value");
double test2 = Double.parseDouble(scanner.nextLine());
tests(test2);
display(test1,test2);

Итак, в основном вы создаете два типа double, которые затем передаете в методы test и tests. Затем эти числа проверяются в контексте этого метода, и если вы обнаружите, что они отрицательные, вы предлагаете пользователю повторно ввести число.

Проблема в том, что, наконец, когда вы вызываете метод display, вы фактически никогда не передаете значение, возвращаемое либо test, либо tests, но вместо этого вы передаете исходные test1 и test2, следовательно, почему окончательный вывод покажет только ввод исходного номера пользователя. Поскольку оба эти метода возвращают значение типа double, вы можете сохранить их возвращаемое значение в переменной и передать их в display

В этом смысле ваш код должен выглядеть так:

Scanner scanner=new Scanner(System.in);
System.out.println("Enter test 1 value");
// initial value is created and passed in to test method here
double test1 = Double.parseDouble(scanner.nextLine());
// here we grab the return value of the test method
double value1 = test(test1);
System.out.println("Enter test 2 value");
// initial value is created and passed in to tests method here
double test2 = Double.parseDouble(scanner.nextLine());
// here we grab the return value of the tests method.
double value2 = tests(test2);
// pass in the value returned from both methods (ensuring we have the latest user input) to display
display(value1, value2);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...