所以我现在正在学习一门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);
}
}
在主方法中,执行以下操作:
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);
所以基本上你创建两个双精度,然后在test
和tests
方法中传递。然后在这些方法的上下文中检查这些数字,如果发现为负数,则提示用户重新输入数字。
问题是,最后,当你调用display
方法时,你从来没有实际传入test
或tests
返回的值,而是传入原始test1
并test2
因此最终输出将仅显示用户的原始数字输入。由于这两种方法都返回双精度值,因此您可以将它们的返回值存储到变量中,并将其传递给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);