【问题标题】:Get two return values in JAVA [duplicate]在JAVA中获取两个返回值[重复]
【发布时间】:2017-04-19 13:42:07
【问题描述】:

我有以下代码。我需要从“getInput”方法返回月份和年份值。将错误作为无法访问的语句。我正在使用 BlueJ IDE。现在如何获取两个返回值。请帮忙。

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;
    }
}

【问题讨论】:

  • 有一个java.time.YearMonth 类,如果您使用 Java 8,您可能想使用它。
  • 更合适的方法是使用两个不同的函数:一个用于月份,称为getMonth(),另一个用于年份,称为getYear()。会给每个函数一个定义明确的任务。但是,如果您与课程有某种联系,则这不适用。在这种情况下,您可能需要一个类,以便您可以将处理月份和年份的所有工作移至该类。除此之外,直接在 getter 中处理不变量是完全可能的(并且是正确的)。这将摆脱ValidateInput() 方法。
  • 除此之外,如果您打算继续从事 Java 工作,我还建议您开始学习更常用的 IDE。目前使用最多的 IDE 是 Intellij IDEA、Eclipse、Netbeans 我认为。选择其中之一,因为它们将在您的公司中使用。

标签: java bluej


【解决方案1】:

Java 惯用的做法是创建一个新类,其中包含您希望作为成员返回的内容:

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

return 的一个实例

你会发现这是扩展最好的方法。最终,您将在此 class 中添加各种其他功能。

您甚至可能会注意到它与某些标准类(java.util.Date 和较新的java.time.LocalDate)过于相似,因此完全放弃了整个过程。

【讨论】:

  • 看来我们现在也有java.time.YearMonth
【解决方案2】:

返回 1 个数组,其中包含 2 个值

【讨论】:

  • 虽然可能不是数组。可能是java.time.LocalDate(忽略日期字段)。
  • 甚至是java.time.YearMonth..
  • 是的,这可以解决这个特殊情况。但总的来说,我认为,如果你想返回 2 个或更多独立值的对象,你总是可以使用包含它们的 array。 (如果对象也属于不同类型)那么将使用 ArrayList 代替
【解决方案3】:

尝试使用 Array,您可以分配 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};
}

【讨论】:

    猜你喜欢
    • 2015-07-29
    • 2016-05-17
    • 2015-08-22
    • 2014-09-15
    • 2018-09-08
    • 2015-10-31
    • 2015-10-25
    • 2011-04-18
    • 2011-03-09
    相关资源
    最近更新 更多