2015-10-10 8 views
1

Привет Я пытаюсь написать код, который дает результат, похожий наветвление и цикл в Java (перерыв и продолжить)

Enter time in 24-hour notation: 
13:07 
That is the same as 
1:07 PM 
Again? (y/n) 
y 
  
Enter time in 24-hour notation: 
10:15 
That is the same as 
10:15 AM 
Again? (y/n) 
y 
  
Enter time in 24-hour notation: 
10:65 
There is no such time as 10:65 
Try Again: 
Enter time in 24-hour notation: 
16:05 
That is the same as 
4:05 PM 
Again? (y/n) 
n 
End of program 

Но я в конечном итоге сделать несколько ошибок, и я не могу понять это вне.

public class prp{ 
     public static void main(String[] args) 
     { 
       while(true) //add the remaining logic 
      { 
     System.out.println("Enter time in 24-hour notation HH:MM"); 
     Scanner x = new Scanner(System.in); 
     String newhr = x.nextLine(); 
     String hr[] = newhr.split(":"); 
     int hours = Integer.parseInt(hr[0]);//HH 
     int minutes = Integer.parseInt(hr[1]);//MM 

     if((hours >= 00 && hours<=24)&&(minutes>=00 && minutes<=59)) 
     { 
      System.out.println("That is the same as: "); 
      if(hours <= 12) 
      { 
       System.out.println(hours+":"+minutes+" AM"); 
       //System.exit(0); 
      } 
      else if(hours > 12 && hours < 24) 
      { 
       int hoursnew = hours - 12; 
       System.out.println(hoursnew+":"+minutes+" PM"); 
       //System.exit(0); 
      } 

     } 
     else 
     { 
      System.out.println("There is no such time as " +hours+ " : " +minutes); 
      System.out.println("Try Again!"); 
      //continue; 
     } 
     System.out.println("Again? [y/n]"); 
     Scanner y = new Scanner(System.in); 
     String newyn = y.nextLine(); 
     if(newyn == "y" || newyn == "n") 
     { 
      if(newyn == "y") 
      { 
       continue; 
      } 
      else 
      { 
       System.out.println("End of program"); 
       System.exit(0);    
       //break; 
      } 

     }//end of while 
    } 
    } 
} 

Программа отображает ошибку при вводе нецелых чисел. Кроме того, он не ломается. Я предполагаю создать еще один класс исключения, называемый TimeFormatException. Если пользователь вводит незаконное время, например 10:65, или как ab: cd.

+1

Хорошо, но в чем вопрос? –

+0

Петля должна выйти, когда я ввожу символ «n» – lft93ryt

+0

http://stackoverflow.com/questions/2912817/how-to-use-scanner-to-accept-only-valid-int-as-input check эта ссылка используется только для ввода int. –

ответ

0

Фактически в вашем коде вы не правильно сравниваете строку, а также не обрабатываете свой код, если пользователь вводит другие данные, кроме запроса Y/N, и неправильный ввод вовремя. См. Ниже код:

import java.util.Arrays; 
import java.util.Collection; 
import java.util.Iterator; 
import java.util.Scanner; 

public class Exam { 
    public static void main(String[] args) { 
     while (true) // add the remaining logic 
     { 
      System.out.println("Enter time in 24-hour notation HH:MM"); 
      Scanner x = new Scanner(System.in); 
      String newhr = x.nextLine(); 
      String hr[] = newhr.split(":"); 
      int hours = 0; 
      int minutes = 0; 
      try { 
       hours = Integer.parseInt(hr[0]);// HH 
       minutes = Integer.parseInt(hr[1]);// MM 
      } catch (NumberFormatException e) { 
       System.out.println("Wrong time input"); 
       continue; 
      } 
      if ((hours >= 00 && hours <= 24) 
        && (minutes >= 00 && minutes <= 59)) { 
       System.out.println("That is the same as: "); 
       if (hours <= 12) { 
        System.out.println(hours + ":" + minutes + " AM"); 
        // System.exit(0); 
       } else if (hours > 12 && hours < 24) { 
        int hoursnew = hours - 12; 
        System.out.println(hoursnew + ":" + minutes + " PM"); 
        // System.exit(0); 
       } 

      } else { 
       System.out.println("There is no such time as " + hours + " : " 
         + minutes); 
       System.out.println("Try Again!"); 
       // continue; 
      } 


      while (true) { 
       System.out.println("Again? [y/n]"); 
       Scanner y = new Scanner(System.in); 
       String newyn = y.nextLine(); 
       if ("y".equalsIgnoreCase(newyn)) { 
        break; 
       } else if ("n".equalsIgnoreCase(newyn)) { 
        System.out.println("End of program"); 
        System.exit(0); 
        // break; 
       } else { 
        System.out.println("Enter correct input Y or N"); 
       } 
      } 

      // end of while 
     } 
    } 
} 
0

В программе есть две ошибки.

1.Часто синтаксический анализ на целочисленный валидационный ввод пользователя действителен или не использовать регулярное выражение. Если совпадения возвращают исключение исключения ложных срабатываний.

String s="235:23";//user input 
System.out.println(s.matches("\\d{0,2}:\\d{0,2}")); 

2.Instead из equalsIgnoreCase или равна, вы используете == для сравнения строк

if("y".equalsIgnoreCase(newyn) || "n".equalsIgnoreCase(newyn)) 

пожалуйста, следовать некоторым стандартам кодирования!