do while循环退出基于指定的条件

时间:2016-02-26 01:08:54

标签: java

在我的代码中,如果用户为任一变量输入空字符串,我希望循环退出。输入空字符串后似乎没什么用。

我哪里错了?

import java.util.HashMap;
import java.util.*;

public class Main {

    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);
        String lakeName;
        String timeRun;

        HashMap<String, Double> newMap = new HashMap<>();

        do {
            System.out.println("Enter the Lake Name");
            lakeName = input.nextLine();
            System.out.println("Enter number of minutes run");
            timeRun = input.nextLine();
            Double finalRun = Double.parseDouble(timeRun);
            newMap.put(lakeName, finalRun);

            if(lakeName.equalsIgnoreCase("") || timeRun.equalsIgnoreCase("")){

                break;
            }

        } while(true);

        for(String key: newMap.keySet()){
            Double value = newMap.get(key);
            System.out.println(key + ": "+ value);
        }        
    }
}

3 个答案:

答案 0 :(得分:3)

试试这个:

 do {
    System.out.println("Enter the Lake Name");
    lakeName = input.nextLine();
    System.out.println("Enter number of minutes run");
    timeRun = input.nextLine();
    if(lakeName.equalsIgnoreCase("") || timeRun.equalsIgnoreCase("")){

        break;
    }
    Double finalRun = Double.parseDouble(timeRun);
    newMap.put(lakeName, finalRun);



} while(true);

if{...},如果没有,它将被赋予NumberFormatException。

答案 1 :(得分:2)

一种方法是检查String是否为isEmpty(),并添加break语句。

所以在你的情况下就像是:

if(lakeName.isEmpty())
   break;

你必须对timeRun变量做同样的事情;

答案 2 :(得分:2)

当您为timeRun输入空字符串时,您将尝试将空字符串解析为double。这会失败并抛出此异常:

java.lang.NumberFormatException: empty String

您可以通过将以下代码放入循环来解决此问题:

        System.out.println("Enter the Lake Name");
        lakeName = input.nextLine();
        System.out.println("Enter number of minutes run");
        timeRun = input.nextLine();
        if (lakeName.equalsIgnoreCase("") || timeRun.equalsIgnoreCase("")) {
            break;
        }
        Double finalRun = Double.parseDouble(timeRun);
        newMap.put(lakeName, finalRun);

我刚刚将break向上移动了几行,包括其条件。

此外,您可以将.equalsIgnoreCase("")替换为.isEmpty(),如其他答案中所述。