方法调用后结果错误

时间:2018-07-01 22:18:58

标签: java user-input

所以我现在正在上Java课程,任务是从main方法中调用某些方法,让它们执行,然后将其输出传递给main方法。一切工作正常,除了出于某些原因未更新用户输入。我有两个单独的类要求用户输入,并且如果用户输入小于零,则在继续操作之前,它们必须在零之前重新输入一个数字。即使他们输入了多个数字,并且数字都大于零,所以它返回值,但它仅返回他们曾经进行的第一个输入,而不是正确的输入。对这家伙有什么见解吗?第一次在这里问一个问题,所以我真的不知道我是否破坏了任何格式或其他格式。任何帮助表示赞赏。

我要发布的代码不是该类的实际代码,它只是我制作的一个单独的程序来演示问题,可用于修复我的主要代码。它只是减少了很多无用的东西。

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 :(得分:1)

在主要方法中,请执行以下操作:

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);

因此,基本上,您创建了两个双打,然后将它们传递到testtests方法中。然后在这些方法的上下文中检查这些数字,如果发现这些数字为负,则提示用户重新输入数字。

问题是,最后,当您调用display方法时,实际上并没有传递testtests返回的值,而是传递了原始的{{1} }和test1,因此为什么最终输出将仅显示用户的原始数字输入。由于这两个方法都返回一个double,因此您可以将其返回值存储到变量中,然后将其传递给test2

从这种意义上讲,您的代码应类似于:

display