Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 方法返回负值_Java_If Statement_Double_False Positive - Fatal编程技术网

Java 方法返回负值

Java 方法返回负值,java,if-statement,double,false-positive,Java,If Statement,Double,False Positive,我试图创建一个方法来检查输入是否是大于零的双精度。在我的代码中,检查它是否确实是一个double可以很好地工作,但是,即使在输入负数时,它会提示重新输入值,最后,在输入正数后,它会返回前面输入的负数 public static double isValid(double v){ Scanner scan = new Scanner(System.in); if (scan.hasNextDouble()){ v = scan.nextDouble(); if

我试图创建一个方法来检查输入是否是大于零的双精度。在我的代码中,检查它是否确实是一个double可以很好地工作,但是,即使在输入负数时,它会提示重新输入值,最后,在输入正数后,它会返回前面输入的负数

 public static double isValid(double v){
    Scanner scan = new Scanner(System.in);
    if (scan.hasNextDouble()){
     v = scan.nextDouble();
     if (v<=0) {
        System.out.println("You have to use a positive number");
        isValid(v);
     }
     else {
        return v;
     }
  }
  else {
     System.out.println("Thats not how it works");
     isValid(v);
  }
  return v;
}
公共静态双精度有效(双v){
扫描仪扫描=新扫描仪(System.in);
if(scan.hasNextDouble()){
v=scan.nextDouble();

如果(v需要返回递归调用的结果:

return isValid(v);

它返回的是最后一个无效值,因为从递归调用返回后,执行继续到方法底部的返回,返回
v
。此时,
v
是最后一个无效值。

也不需要recursion@KevinAnderson是的,但这不是当前的问题。如果如果是代码检查,我们可以再深入一点。@KevinAnderson为什么不?@AlexLab如果使用do…while循环或类似的方法,这会简单得多。Java也不是使用递归的好语言。如果用户输入太多无效值,您的程序将因SO而崩溃。