2016-12-05 8 views
1

У меня есть следующий ниже код. Мне нужно вернуть значения месяца и года из метода getInput. Получение ошибки в качестве недостижимого утверждения. Я использую BlueJ IDE. Как получить возвращаемые значения возврата. Пожалуйста помоги.Получите два значения возврата в JAVA

public class CalendarTester 
{ 

    public static void main(String[] args) { //method call for testing valid inputs from the user 
     nputValidate(); 
    } 

    public static void InputValidate(){ //Method to call functions for validation of inputs 
     String UserInput=""; 
     UserInput=getInput(); 
     ValidateInput(UserInput); 
    } 

    public static String getInput(){ // To read user input 
     Scanner scanner=new Scanner(System.in); 
     System.out.println("Please enter the year (eg - 2016):"); 
     String year = scanner.next(); 
     System.out.println("Please enter the month (eg - 10):"); 
     String month = scanner.next(); 
     return year; 
     return month; 
    } 

    public static boolean ValidateInput(String toValidation){ // Method to validate inputs 
     boolean Pass=false; 
     String finalString=toValidation.replaceAll("\\s+",""); 
     String matchingString="[0-9]{4,6}"; 
     if(finalString.matches(matchingString)){ 
      String Month=finalString.substring(0, 3); 
      String Year = finalString.substring(0, 4); 
      int month=Integer.parseInt(Month); 
      int year=Integer.parseInt(Year); 
      if(month>0 && month<=12){ 
       if(year>999 & year<=10000){ 
        Pass=true; 
        Calendar calender = new Calendar(); 
        boolean isLeapYear=calender.isLeapYear((short) year); 
        if(isLeapYear){ 
         System.out.println("The given year " +year+ " is a leap Year"); 
        }else{ 
         System.out.println("The given year " +year+ " is not a leap Year"); 
        } 
        byte TotalDaysInMonth=calender.TotalDaysOfMonth((byte) month,(short) year); 
        System.out.println("Total days in the month " +month+ "are "+TotalDaysInMonth); 
        byte week=calender.firstDayOfYear((short) year); 
        String FirstDayOfWeek =""; 
        switch (week) { //Case for first day of the week 
        case 0: 
         FirstDayOfWeek="Mon"; 
         break; 
        case 1: 
         FirstDayOfWeek="Tue"; 
         break; 
        case 2: 
         FirstDayOfWeek="Wed"; 
         break; 
        case 3: 
         FirstDayOfWeek="Thur"; 
         break; 
        case 4: 
         FirstDayOfWeek="Fri"; 
         break; 
        case 5: 
         FirstDayOfWeek="Sat"; 
         break; 
        case 6: 
         FirstDayOfWeek="Sun"; 
         break; 
        default: 
         FirstDayOfWeek="Invalid week input"; 
         break; 
        } 
        System.out.println("The first day of the year"+year+"is "+FirstDayOfWeek); 
        byte firstmonthday = calender.firstDayOfMonth((byte) month,(short) year); 
        String dayName = ""; 
        switch(firstmonthday)//to print the first day of the month 
        { 
         case 0: dayName = "Sat"; break; 
         case 1: dayName = "Sun"; break; 
         case 2: dayName = "Mon"; break; 
         case 3: dayName = "Tue"; break; 
         case 4: dayName = "Wed"; break; 
         case 5: dayName = "Thur"; break; 
         default: dayName = "Fri"; break; 
        } 
        System.out.println("The first day of the month" +month+ "is " + dayName); 
        calender.printMonth((byte) month,(short) year); 
       }else{ 
        System.out.println("Invalid year input"); 
        Pass=false; 
        InputValidate(); 
       } 
      } 
      else if(month<=0 || month>12){ //validates the month entered 
       System.out.println("Invalid month input"); 
       Pass=false; 
       InputValidate(); 
      } 
     } 
     return Pass; 
    } 
} 
+0

Существует класс 'java.time.YearMonth', который вы можете использовать, если используете Java 8. –

+0

Более правильным способом было бы использовать две разные функции: один месяц, называемый' getMonth() ' и один год, называемый 'getYear()'. Дает каждой функции четко определенную задачу. Это не применяется, если у вас есть определенное соединение с классами. В этом случае вам может понадобиться класс, чтобы вы могли перемещать всю работу по обработке месяца и года в этот класс. Кроме того, вполне возможно (и правильно) обрабатывать инварианты непосредственно в геттерах. Это избавит вас от метода ValidateInput(). – patrik

+0

Кроме того, я бы посоветовал вам начать изучение более часто используемой среды разработки, если вы планируете продолжить работу с Java. В настоящее время наиболее часто используемыми IDE являются Intellij IDEA, Eclipse, Netbeans, я думаю. Выберите один из них, так как они будут использоваться в вашей компании. – patrik

ответ

0

возвращение 1 массив содержащий 2 значения

+1

Может быть, не массив. Может быть, 'java.time.LocalDate' (где вы игнорируете поле дня). – Thilo

+2

Или даже 'java.time.YearMonth' .. – marstran

+0

Да, это может решить этот конкретный случай. но, как мне кажется, если вы хотите вернуть 2 или более объектов из независимых значений, вы всегда можете использовать содержащий их массив. (если объекты имеют и другой тип), то вместо этого будет использовать 'ArrayList' – yaitloutou

0

Попробуйте использовать массив, вы можете назначить 2 или более значений:

public static String[] getInput(){ // To read user input 
Scanner scanner=new Scanner(System.in); 
System.out.println("Please enter the year (eg - 2016):"); 
String year = scanner.next(); 
System.out.println("Please enter the month (eg - 10):"); 
String month = scanner.next(); 

return new String[]{year,month}; 
} 
5

на языке Java идиоматических способ сделать это чтобы создать новый класс, содержащий элементы, которые вы хотите вернуть в качестве членов:

public static class Foo 
{ 
    String year; 
    String month; 
} 

и return a пример.

Вы найдете это подход, который весы лучший. В конце концов вы добавите всевозможные другие функции к этому class.

Возможно, вы заметите, что он слишком похож на некоторые стандартные классы (java.util.Date и новее java.time.LocalDate), и все это полностью уничтожает.

+0

Кажется, что теперь мы также имеем' java.time.YearMonth'. – Thilo