在JAVA中获取两个返回值
我有以下代码。我需要从“getInput”方法返回月份和年份值。将错误获取为无法访问的语句。我正在使用BlueJ IDE。现在如何获取两个返回值。请帮忙在JAVA中获取两个返回值,java,bluej,Java,Bluej,我有以下代码。我需要从“getInput”方法返回月份和年份值。将错误获取为无法访问的语句。我正在使用BlueJ IDE。现在如何获取两个返回值。请帮忙 public class CalendarTester { public static void main(String[] args) { //method call for testing valid inputs from the user nputValidate(); } public sta
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;
}
}
公共类日历测试器
{
publicstaticvoidmain(String[]args){//用于测试用户有效输入的方法调用
nputValidate();
}
公共静态void InputValidate(){//方法调用函数以验证输入
字符串UserInput=“”;
UserInput=getInput();
验证输入(用户输入);
}
公共静态字符串getInput(){//读取用户输入
扫描仪=新的扫描仪(System.in);
System.out.println(“请输入年份(如-2016):”;
字符串年份=scanner.next();
System.out.println(“请输入月份(如-10):”;
字符串月份=scanner.next();
回归年;
返回月份;
}
公共静态布尔ValidateInput(String-toValidation){//验证输入的方法
布尔传递=假;
字符串finalString=toValidation.replaceAll(“\\s+”,”);
字符串匹配字符串=“[0-9]{4,6}”;
if(finalString.matches(matchingString)){
字符串月份=finalString.substring(0,3);
字符串年份=最终字符串。子字符串(0,4);
int month=整数.parseInt(月);
int year=整数。parseInt(年);
如果(月>0和月>999和年返回包含2个值的1数组返回包含2个值的1数组尝试使用数组,您可以指定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};
}
尝试使用数组,可以指定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};
}
Java惯用的方法是创建一个新类,其中包含要作为成员返回的内容:
public static class Foo
{
String year;
String month;
}
并return
一个实例
您会发现这是一种可扩展性最好的方法。最终,您将为此类添加各种其他功能
您甚至可能会注意到,它与一些标准类(java.util.Date
和较新的java.time.LocalDate
)太相似了,因此完全放弃了这一切。java惯用的方法是创建一个新类,其中包含您希望作为成员返回的内容:
public static class Foo
{
String year;
String month;
}
并return
一个实例
您会发现这是一种可扩展性最好的方法。最终,您将为此类添加各种其他功能
您甚至可能会注意到它与一些标准类(java.util.Date
和较新的java.time.LocalDate
)太相似了,因此完全放弃了所有内容。可能不是数组。可能是java.time.LocalDate
(您忽略了day字段)。甚至是一个java.time.YearMonth
。是的,这可以解决这个特殊情况。但通常,我认为,如果您想要返回两个或多个独立值的对象,您可以始终使用包含它们的数组(如果对象也是不同类型的)然后将使用ArrayList
而不是数组,但可能不是数组。可能是java.time.LocalDate
(其中忽略day字段)。甚至是一个java.time.YearMonth
。是的,这可以解决这个特殊情况。但通常,我认为,如果您想要返回两个或多个独立值的对象,您可以始终使用包含它们的数组(如果对象也是不同类型的)然后将使用ArrayList
而不是如果您使用java 8,则可能需要使用java.time.YearMonth
类。更合适的方法是使用两个不同的函数:一个用于月,称为getMonth()
另一个用于年,称为getYear()
。将为每个函数提供一个定义良好的任务。但是,如果您与类有一定的连接,则不适用于此。在这种情况下,您可能需要一个类,以便您可以将处理月份和年份的所有工作移到此类。除此之外,这是完全可能的(并且是适当的)直接在getter中处理不变量。这将摆脱ValidateInput()
method。除此之外,如果您打算继续使用Java作为工作,我还建议您开始学习更常用的IDE。我认为当前使用最多的IDE是Intellij IDEA、Eclipse和Netbeans。选择其中一种,因为它们将在您的公司中使用。有一个Java.time.YearMonth
类如果您使用的是Java 8,则可能需要使用。更合适的方法是使用两个不同的函数:一个用于月份,称为getMonth()
,另一个用于年份,称为getYear()
。将为每个函数提供一个定义良好的任务。但是,如果您与类有一定的连接,则不适用于此。在这种情况下,您可能需要一个类,以便您可以将处理月份和年份的所有工作移到此类。除此之外,这是完全可能的(并且是适当的)直接在getter中处理不变量。这将摆脱ValidateInput()
method。除此之外,如果您打算继续使用Java作为工作,我还建议您开始学习更常用的IDE。我认为目前使用最多的IDE是Intellij IDEA、Eclipse和Netbeans。选择其中一种,因为它们将在您的公司中使用。我们现在似乎也有Java.time.YearMonth似乎我们现在也有了java.time.YearMonth
。