2016-02-26 2 views
1

В моем коде я хочу, чтобы цикл завершился, если пользователь вводит пустую строку для любых переменных. Кажется, что ничего не работает после ввода пустой строки.do while loop exit base при условии указывать

Куда я иду не так?

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

ответ

2

Один из способов сделать это, чтобы проверить, если строка является isEmpty(), поставить break заявление.

Так что в вашем случае это будет примерно так:

if(lakeName.isEmpty()) 
    break; 

You Gotto сделать то же самое с timeRun переменной;

+0

Спасибо за ваш отзыв, но lakeName.isEmty() или timeRun.isEmpty не работает вообще. Я новичок в java, поэтому, пожалуйста, не сердитесь на меня :) – Intelligent

+0

@Intelligent вы положили это утверждение после прочтения входного озераName = input.nextLine(); правильно? –

+0

@Intelligent это отлично работает для меня –

2

Когда вы вводите пустую строку для timeRun, вы попытаетесь разобрать пустую строку как двойную. Это не удается, и выдает это исключение:

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(), как уже указано в другом ответе.

+0

Спасибо, я ценю вашу помощь. – Intelligent

+0

Добро пожаловать. Кроме того, поскольку вы, похоже, новичок в Stack Overflow, вас может заинтересовать [тур] (http://stackoverflow.com/tour), в котором рассказывается о том, как работает Stack Overflow. –

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.

+0

Большое вам спасибо! это похоже на работу! Я очень ценю вашу помощь. Не могли бы вы рассказать мне, почему мой не работает так, как ожидалось? – Intelligent

+0

ваш код не запускался перед выбросом. Исключение. существует много ситуаций ~ –

+0

Обычно всегда проверяйте ввод пользователя, вы никогда не знаете, что вам может быть дано. В этом случае перед началом работы с вводом вы захотите проверить его и выйти из цикла, если это не то, что вы ожидаете. Это более или менее то, что делают веб-формы, сначала проверяйте ввод пользователя, а затем отправляете его для обработки. –