在此代码中:
任何人都可以解释我..为什么我们需要返回"错误" ?
在一些整数方法中(不在此代码中)..为什么使用return 0
?
package chapter4;
import java.util.Scanner;
class DateThirdTry
{
private String month;
private int day;
private int year; //a four digit number.
public void setDate(int newMonth, int newDay, int newYear)
{
month = monthString(newMonth);
day = newDay;
year = newYear;
}
public void writeOutput()
{
System.out.println(month + " " + day + ", " + year);
}
public String monthString(int monthNumber)
{
switch (monthNumber)
{
case 1:
return "January";
case 2:
return "February";
case 3:
return "March";
case 4:
return "April";
case 5:
return "May";
case 6:
return "June";
case 7:
return "July";
case 8:
return "August";
case 9:
return "September";
case 10:
return "October";
case 11:
return "November";
case 12:
return "December";
default:
System.out.println("Fatal Error");
System.exit(0);
return "Error"; //to keep the compiler happy
}
}
}
class DateThirdTryDemo
{
public static void main(String[] args)
{
DateThirdTry date = new DateThirdTry( );
int year = 1882;
date.setDate(6, 17, year);
date.writeOutput( );
}
}
答案 0 :(得分:2)
1)如果函数具有不返回值的退出路径,Java将给出编译器错误。在Java中,不返回值是非法的。可以说是一件好事。
2)在这种情况下,您的函数调用“System.exit()”而不是返回值。你知道程序不会执行'return“错误”',但你需要添加它来满足编译器。
3)适当的要做的事情是抛出异常。
答案 1 :(得分:1)
这很简单,您的方法monthString()
会返回... String
:
public String monthString(int monthNumber)
因此,您必须返回String
而不是int
,因此您无法返回0
。
如果您的方法返回int
,则可以返回0
。
但是,在您的情况下,您应该抛出异常而不是返回“错误”并使用System.exit()
这样:
public String monthString(int monthNumber) throws IllegalArgumentException {
扔掉它:
default:
System.out.println("Fatal Error");
throw new IllegalArgumentException("Incorrect month number");
甚至更好,您可以直接使用Java提供的功能来实现您的功能:
public static String monthString(final int monthNumber) {
final Calendar c = Calendar.getInstance();
c.set(Calendar.MONTH, monthNumber-1);
return c.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.ENGLISH);
}