2013-03-22 2 views
-3

Я пытаюсь использовать try и catch. Если введенный ввод недействителен, цикл повторится и снова попросит пользователя ввести его, но он не работает. Когда я печатаю что-то неправильно, он просто повторяет System.out.println.Проблемы с обработкой исключений с использованием try и catch

import java.util.Calendar; 
import java.util.Date; 
import java.util.Scanner; 

public class Price 
{ 
    public static void main(String[] args) 
    { 
     userInput(); 
    } 
    public static void userInput() 
    { 
     Scanner scan = new Scanner(System.in); 
     int x = 1; 
     int month, day, year; 

     do { 
      try {  
       System.out.println("Please enter a month MM: "); 
       month = scan.nextInt(); 

       if(month>12 && month<1) 
       { 
        System.out.println("FLOP"); 
       } 
       x=2; 
      } 
      catch(Exception e){ 
       System.out.println("not today mate"); 
      } 
     } 
     while(x==1);    
    } 
} 
+1

Измените свой код и исправьте свой отступ, чтобы ваш код был доступен для чтения. Каждый блок кода должен иметь отступы точно такой же суммы. Пойдем теперь, если ты просишь бесплатные советы, самое меньшее, что ты можешь сделать, это сделать так, чтобы ваш код был читабельным. –

+1

И что вы имеете в виду * не работает *? – Tchoupi

+0

@HovercraftFullOfEels Или вы можете занять 10 секунд и отформатировать его. – Virtlink

ответ

0

это рабочее решение вашей проблемы

public static void userInput(){ 
     Scanner scan = new Scanner(System.in); 
     int x = 1; 
     int month, day, year; 

     System.out.println("Please enter a month MM: "); 
     month = scan.nextInt(); 
     boolean i = true; 
     while(i == true) 
     { 
      if(month < 12 && month > 1) 
      { 
       System.out.println("FLOP"); 
       i = false; 
      } 
      else if(month >= 12 || month <= 1) 
      { 
       System.out.println("not today mate"); 
       month = scan.nextInt();     
      } 
     }  

    } 
0

Как правило, исключения используются для исключительных обстоятельств, а не для логики программы. Валидация введенных данных не является исключительным обстоятельством в этом случае. Это нормальное состояние, при котором пользователь может сделать ошибку и ввести неправильный номер. Поместите ввод в цикл и повторите, пока не будет введено правильное значение (возможно, с возможностью отмены пользователем).

0

Первое, что вам не подходит.

У вас есть:

if(month>12 && month<1) 
{ 
    System.out.println("FLOP"); 
} 

Так месяц не может быть больше, чем 12, и в то же время меньше 1.

Я думаю, что вы хотели положить OR вместо AND, например,

if(month > 12 || month < 1) 
{ 
    System.out.println("FLOP"); 
} 

Что касается исключения, это может происходить, когда пользователь вводит числовое значение нон или входной сигнал exausted. Броски: InputMismatchException - если следующий токен не соответствует регулярному выражению Integer или находится вне диапазона NoSuchElementException - если вход будет исчерпан IllegalStateException - если этот сканер закрыт

+0

, что он имел в виду, был прав, он просто не был правильно структурирован. Ему нужно условие, что если какое-то значение меньше 12, но (и) больше 1. Другое условие будет или (если что-то больше 12 или менее 1). –

Смежные вопросы