Java 如何在INT方法中不返回值?
当我运行代码时,它返回: 31和-1Java 如何在INT方法中不返回值?,java,Java,当我运行代码时,它返回: 31和-1 我怎样才能摆脱-1?有没有办法不在方法INT中返回?我试图返回java.lang.Integer(null),但它给了我一个错误。我想我用错了 代码如下: package com.company; public class Main { public static void main(String[] args) { int y = getDaysInMonth(1, 2020); System.out.println(y); } pu
我怎样才能摆脱-1?有没有办法不在方法INT中返回?我试图返回java.lang.Integer(null),但它给了我一个错误。我想我用错了 代码如下:
package com.company;
public class Main {
public static void main(String[] args) {
int y = getDaysInMonth(1, 2020);
System.out.println(y);
}
public static boolean isLeapYear(int year) {
if (year > 1 && year < 9999) {
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
return true;
}
return false;
}
return false;
}
public static int getDaysInMonth(int month, int year) {
if ((month < 1 || month > 12) && (year < 1 || year > 9999)) {
return -1;
} else if (!isLeapYear(year)) {
switch (month) {
case 1:
System.out.println(31);
break;
case 2:
System.out.println(28);
break;
case 3:
System.out.println(31);
break;
case 4:
System.out.println(30);
break;
case 5:
System.out.println(31);
break;
case 6:
System.out.println(30);
break;
case 7:
System.out.println(31);
break;
case 8:
System.out.println(31);
break;
case 9:
System.out.println(30);
break;
case 10:
System.out.println(31);
break;
case 11:
System.out.println(30);
break;
case 12:
System.out.println(31);
break;
default:
return -1;
}
} else if (isLeapYear(year)) {
switch (month) {
case 1:
System.out.println(31);
break;
case 2:
System.out.println(29);
break;
case 3:
System.out.println(31);
break;
case 4:
System.out.println(30);
break;
case 5:
System.out.println(31);
break;
case 6:
System.out.println(30);
break;
case 7:
System.out.println(31);
break;
case 8:
System.out.println(31);
break;
case 9:
System.out.println(30);
break;
case 10:
System.out.println(31);
break;
case 11:
System.out.println(30);
break;
case 12:
System.out.println(31);
break;
default:
return -1;
}
} else return -1;
return -1;
}
package.com公司;
公共班机{
公共静态void main(字符串[]args){
int y=getDaysInMonth(2020年1月);
系统输出打印项次(y);
}
公共静态布尔值isLeapYear(整数年){
如果(年份>1年和年份<9999年){
如果((第%4年==0和第%100年!=0)| |第%400年==0){
返回true;
}
返回false;
}
返回false;
}
公共静态int getDaysInMonth(int月,int年){
如果((月<1 |月>12)和(年<1 |年>9999)){
返回-1;
}如果(!isLeapYear(year)){
开关(月){
案例1:
系统输出打印项次(31);
打破
案例2:
系统输出打印项次(28);
打破
案例3:
系统输出打印项次(31);
打破
案例4:
系统输出打印项次(30);
打破
案例5:
系统输出打印项次(31);
打破
案例6:
系统输出打印项次(30);
打破
案例7:
系统输出打印项次(31);
打破
案例8:
系统输出打印项次(31);
打破
案例9:
系统输出打印项次(30);
打破
案例10:
系统输出打印项次(31);
打破
案例11:
系统输出打印项次(30);
打破
案例12:
系统输出打印项次(31);
打破
违约:
返回-1;
}
}其他如果(年){
开关(月){
案例1:
系统输出打印项次(31);
打破
案例2:
系统输出println(29);
打破
案例3:
系统输出打印项次(31);
打破
案例4:
系统输出打印项次(30);
打破
案例5:
系统输出打印项次(31);
打破
案例6:
系统输出打印项次(30);
打破
案例7:
系统输出打印项次(31);
打破
案例8:
系统输出打印项次(31);
打破
案例9:
系统输出打印项次(30);
打破
案例10:
系统输出打印项次(31);
打破
案例11:
系统输出打印项次(30);
打破
案例12:
系统输出打印项次(31);
打破
违约:
返回-1;
}
}否则返回-1;
返回-1;
}
}
我尝试了几乎所有的方法,其中应该有一些我还不知道的东西。Java方法只能返回一种类型的结果: 返回类型:返回类型是方法返回的数据类型。它可能有原始数据类型、对象、集合、void等。如果该方法不返回任何内容,则使用void关键字 作为解决办法: 使用包装器类 您可以使用
Integer
类作为返回类型并返回null。它并不比-1好多少,但它表明没有返回任何内容
无效参数异常
扔这个:这就是它的用途
default:
throw new IllegalArgumentException("Invalid month value - out of range");
创建枚举
创建枚举类型并将其作为方法中的参数。这样就不会有任何方法得到未知值
public enum Month {
January(1), February(2), March(3), April(4),May(5),June(6), July(7), August(8), September(9), October(10), November(11), December(12)
}
有没有办法不在方法INT中返回 是的,当然。抛出异常。例如:
if (month < 1 || month > 12) {
throw new IllegalArgumentException("month value is out of range");
}
if(月<1 | |月>12){
抛出新的IllegalArgumentException(“月值超出范围”);
}
(提示:我注意到您现有的错误检查中有一个错误。重写时请仔细查看。)
引发异常会导致方法终止而不返回任何结果。即使方法签名说应该返回一个结果。您可以在Oracle Java教程中阅读相关内容:。Java教程的这一部分解释了什么是异常,如何以及何时抛出异常,如何捕获异常,以及当未捕获异常时会发生什么
话虽如此,仍有一些地方需要返回-1
。您需要仔细检查每一个,以确定它是否确实可行。如果getDaysInMonth
的输入有效,那么您应该始终能够计算“月内天数”值。您应该只需要在一个地方检查参数
我的建议是在方法开始时检查参数值。然后,可以在假设参数有效的情况下对该方法的其余部分进行编码
最后,如果
getDaysInMonth
为getDaysInMonth(1202)
返回-1
,则表明该方法的逻辑中存在错误。我建议您使用调试器来查找它。。。如果您无法通过读取和逻辑分析代码来识别它。这是因为您首先在方法中打印,然后在y中再次打印方法的返回值
不要每次都打印,而是尝试返回值。你写的程序也可以写得很有效率。
以下是一个例子:
public static int getDays(int monthNumber, int yearNumber)
{
if (monthNumber == 2 && !isLeapYear(yearNumber))
return 28;
else if (monthNumber==2)
return 29;
else if ((monthNumber >= 1) && (monthNumber <= 7) && (monthNumber % 2 ==1))
return 31;
else if ((monthNumber >= 8) && (monthNumber %2==0))
return 31;
else
return 30;
}
public static int getDays(int monthNumber,int depenthnumber)
{
如果(月数==2&&!isLeapYear(月数))
返回28;
else if(月数==2)
返回29;
如果((月号>=1)&&(月号=8)&&(月号%2==0))
返回31;
其他的
返回30;
}
仔细查看您的
public static int getDaysInMonth(int month, int year) throws IllegalArgumentException {
if (year < 1 || year > 9999) {
throw new IllegalArgumentException(String.format("Invalid year %d must be between 1 and 9999", year));
}
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
System.out.println(31);
return 31;
case 2:
if (isLeapYear(year)) {
System.out.println(29);
return 29;
} else {
System.out.println(28);
return 28;
}
case 4:
case 6:
case 9:
case 11:
System.out.println(30);
return 30;
}
throw new IllegalArgumentException(String.format("Invalid month %d must be between 1 and 12", month));
}