2016-12-05 1 views
1

J'ai le code suivant ci-dessous. Je dois retourner les valeurs mois et année de la méthode "getInput". Obtenir l'erreur comme instruction inaccessible. J'utilise BlueJ IDE. Comment obtenir des valeurs de retour de remorquage maintenant. S'il vous plaît aider.Obtenez deux valeurs de retour dans 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

Il existe une classe 'java.time.YearMonth' que vous pourriez utiliser si vous utilisez Java 8. –

+0

Une façon plus appropriée serait d'utiliser deux fonctions différentes: Une pour le mois, appelée' getMonth() ' et un pour l'année, appelé 'getYear()'. Donnera à chaque fonction une tâche bien définie. Cela ne s'applique pas si vous avez une certaine connexion avec les classes. Dans ce cas, vous voudrez peut-être une classe, afin que vous puissiez déplacer tout le travail de gestion du mois et de l'année dans cette classe. En dehors de cela, il serait tout à fait possible (et approprié) de gérer les invariants directement dans les getters. Cela va se débarrasser de la méthode 'ValidateInput()'. – patrik

+0

En dehors de cela, je vous conseille également de commencer à apprendre un IDE plus couramment utilisé si vous envisagez de continuer avec Java en tant que travail. Les IDE les plus utilisés actuellement sont Intellij IDEA, Eclipse, Netbeans je pense. Choisissez l'un d'entre eux car ce sont ceux qui seront utilisés dans votre entreprise. – patrik

Répondre

0

retour 1 tableau contenant les 2 valeurs

+1

Peut-être pas un tableau, cependant. Peut-être un 'java.time.LocalDate' (où vous ignorez le champ de jour). – Thilo

+2

Ou même un 'java.time.YearMonth' .. – marstran

+0

Oui, cela pourrait résoudre ce cas particulier. mais en général, je pense, si vous voulez retourner 2 objets ou plus, de valeurs indépendantes, vous pouvez toujours utiliser un 'array' les contenant. (si les objets sont de type différent aussi), alors utilisez un 'ArrayList' à la place. – yaitloutou

0

Essayez d'utiliser Array, vous pouvez attribuer 2 valeurs ou plus:

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

La façon dont Java idiomatiques de le faire est pour créer une nouvelle classe contenant les éléments que vous souhaitez renvoyer en tant que membres:

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

et return une instance de cela.

Vous trouverez cette approche que échelles meilleur. Finalement, vous finirez par ajouter toutes sortes d'autres fonctionnalités à cette class.

Vous remarquerez peut-être même qu'il est trop similaire à certaines des classes standard (java.util.Date et java.time.LocalDate plus récent), et abandonner complètement le tout.

+0

Il semble que nous ayons maintenant' java.time.YearMonth'. – Thilo