2014-11-27 2 views
0

Я создаю программу, которая преобразует стандартное время в 24-часовое время. К сожалению, для меня мои инструкции «если», когда пользователь вводит неправильное время, похоже, не работают должным образом.Если заявление не «правильно прочитано»?

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

public class StandardTime { 

    static String amPM;//will hold am/pm for standard time 
    static String traditionalTime;//will store traditional time from user 
    static int hours;//will store hours and minutes 
    static int min1, min2; 

    public static void main(String args[]) throws IOException { 
     BufferedReader br = new BufferedReader(new InputStreamReader(System.in));// user input 

     int tryAgain = 1;//will initial do-while loop 
     System.out.println("Standard Time to Traditional Time Converter"); 
     System.out.println("==========================================="); 
     do { 
      System.out.println(); 
      System.out.println("Input a time in Standard Form (HH:MM:SS):"); 
      String standardTime = br.readLine();//user inputs time in standard form 
      System.out.println(); 
      String minute1 = standardTime.substring(3); 
      min1 = Integer.parseInt(minute1); 
      String minute2 = standardTime.substring(5); 
      min2 = Integer.parseInt(minute2); 
      do { 
       if (standardTime.length() != 8) { 
        System.out.println("Invalid time entered."); 
        System.out.println("Input a time in Standard Form that has this form HH:MM:SS ..."); 
        standardTime = br.readLine();//user inputs time in standard form 
        System.out.println(); 
       } 
       else if (min1 >= 6) 
       { 
        System.out.println("Invalid time entered. Please do not input a minute time over 59."); 
        System.out.println("Input a time in Standard Form that has this form HH:MM:SS ..."); 
        standardTime = br.readLine();//user inputs time in standard form 
        System.out.println(); 
       } 
      } while ((standardTime.length()) != 8 || (min1 >= 6)); 
      //method declaration 
      convertToTraditional(standardTime); // call the coversion method 
      System.out.println(standardTime + " is equivalent to " + hours + ":" +min1+min2+ " " + amPM + "."); 
      System.out.println(); 
      System.out.println("Enter 1 to try again or any other number to exit the program."); 
      tryAgain = Integer.parseInt(br.readLine());//user decides to try again 
     } while (tryAgain == 1);//will repeat if user enters 1 

    }//closes main body 

    public static void convertToTraditional(String standardTime) { 
     String hour = standardTime.substring(0, 2); //captures substring of hours in user's input 
     hours = Integer.parseInt(hour); //converts substring to INT value 
     int pmHour = hours; 
     if (12 == hours) { //creates a statement for 12PM (noon) 
      hours = pmHour; 
      amPM = "PM"; 
     } else if (hours > 12 && hours <= 23) { //if the time is not equal to noon or midnight 
      hours = hours - 12; 
      amPM = "PM"; 
     } else if (hours == 0) { //12 midnight 
      hours = hours + 12; 
      amPM = "AM"; 
     } else if (hours == 24) { //also another way to express 12 midnight on the 24 hour clock 
      hours = hours - 12; 
      amPM = "AM"; 
     } else { //else if the hours are between midnight and 11am 
      hours = pmHour; 
      amPM = "AM"; 
     } 
    } 
} 

ошибка специально приходит на если «standardTime.length ()! = 8. " Я хочу, чтобы пользователь вводил его в следующем формате: «HH: MM: SS». Это ошибка, которую я получаю, когда, например, я печатаю в 1: 2: 3 ...

Exception in thread "main" java.lang.NumberFormatException: For input string: ":3" 
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) 
    at java.lang.Integer.parseInt(Integer.java:492) 
    at java.lang.Integer.parseInt(Integer.java:527) 

    at standardtime.StandardTime.main(StandardTime.java:35) 
Java Result: 1 

Благодарим за помощь.

+0

Это больше похоже один из 'ParseInt()' ы бросает. Разве вы не должны делать 'substring()' и 'parseInt()' bits * после * проверки 'standardTime.length()'? – Biffen

+1

Делать '01: 02: 03' вместо вашего входа. Он должен точно следовать вашим инструкциям. Кроме того, проанализируйте ':' перед попыткой конвертировать 'String' в' int'. –

+0

@ AardenHartle Более того, у вас много дублированного кода и много раз разбирается в том, что Java может сделать для вас. Возможно, переосмысление в порядке? – Biffen

ответ

0

Ваша проблема не упоминается if заявления, то этот код:

String standardTime = br.readLine();//user inputs time in standard form 
System.out.println(); 
String minute1 = standardTime.substring(3); 
min1 = Integer.parseInt(minute1); 
String minute2 = standardTime.substring(5); 
min2 = Integer.parseInt(minute2); 

Вы читаете ввод от пользователя, и вы используете его немедленно и поэтому перед тем вы проверить длину от этого ввода.

do/while Переместить петли между указанными линиями, чтобы установить, что:

String standardTime = br.readLine();//user inputs time in standard form 

do { 
    // check 
} while ((standardTime.length()) != 8 || (min1 >= 6)); 

System.out.println(); 
String minute1 = standardTime.substring(3); 
min1 = Integer.parseInt(minute1); 
String minute2 = standardTime.substring(5); 
min2 = Integer.parseInt(minute2); 
0

Ошибка возникает, когда вы пытаетесь разобрать «: 3» как число, когда у него есть двоеточие, то это не число, и он бросает это исключение ...

Почему вы не попробовать используйте java.util.Date? Ваш код будет чище и проще писать, если вы его используете!

+0

's/точка с запятой/двоеточие /' – Biffen

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