Java扫描器一直请求输入,直到变量为double、int或空,在该点上给出默认值

Java扫描器一直请求输入,直到变量为double、int或空,在该点上给出默认值,java,Java,这是我要问的问题的答案 1. Take value 2. is value double or int? 3. if so, continue in program 4. else 5. is value empty? 6. if value empty; value=0.08 7. else 8. at this stage, value is not an empty valid, or a valid double or valid int 9. user did it wrong, pr

这是我要问的问题的答案

1. Take value
2. is value double or int?
3. if so, continue in program
4. else
5. is value empty?
6. if value empty; value=0.08
7. else
8. at this stage, value is not an empty valid, or a valid double or valid int
9. user did it wrong, prompt error
10. jump to step one take value
所以对我来说这很复杂,我是新手

我一直在尝试这样实现它

while ( costscan.hasNext() )
  {
    double costperkm = costscan.nextDouble();
    if (costperkm=double){
      System.out.println("Value is double");
      System.out.println("FUEL COST SAVED ");
    }
    else {
            if(costperkm=null){
               costperkm=0.08;
          }
            else{

                }
    System.out.println("FUEL COST SAVED ");
         }
    System.out.print("\n");
    System.out.print("\n");
  }

我上面的代码仅仅是玩游戏的结果,所以在这个阶段它可能不再有意义了。希望有人能帮忙,谢谢。

hastnextdouble和
nextDouble
的问题是,只要用户只按enter键,他们都会不断要求输入

如果您希望在用户只需按enter键时使用默认值,则应将
Scanner.nextLine
Double.parseDouble
结合使用,因为
nextLine
是下一个唯一接受空输入的方法

下面是一个可能的解决方案:

String input;
while(true) {
    input = costscan.nextLine();
    if(input.isEmpty()) {
        input = "0.08";
        break;
    }
    if(isParseable(input)) {
        break;
    }
    System.out.println("ENTER ONLY NUMBERS [DEFAULT 0.08]");
}
double costperkm = Double.parseDouble(input);
方法
isparsable
如下所示:

private static boolean isParseable(String str) {
    try {
        Double.parseDouble(str);
        return true;
    } catch(NumberFormatException e) {
        return false;
    }
}

实际问题是什么?不要使用这样的特定循环。使用更通用的方法,如
while(costscan.hasNext())
,然后对您的每个条件使用ifs。@贾斯汀贾斯曼我对这个想法的想法不起作用,我想我已经实现了wrong@SotiriosDelimanolis我现在就试试看,所以别担心!就位?@Kieronboz是的,注意如果这个方法找到一个完整的标记,它将返回true,可以是字符串、布尔值、双精度等。然后你可以使用
hasDouble()
来检查它是什么。这样,当扫描器中还有令牌时,您可以永远循环。我明白了,所以isparsable是一个单独的方法,我应该使用。。我应该考虑把它作为一个字符串来解析,愚蠢的我,非常感谢你的帮助!