Java 如何在INT方法中不返回值?

Java 如何在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

当我运行代码时,它返回:

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

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