对于循环未正确运行

Bah*_*adi 0 java arrays integer for-loop

当我执行此代码时,输​​出为"140",即"28*5",但它应为"150",即"28 + 31 + 30 + 31 + 30",它应计算2个月之间的天数"feb"和"七月"...所以这意味着for循环不能正常工作或者什么?那为什么呢 !你能在这帮我吗?PS:我试图将循环中的j ++更改为j + 1,但Android Studio表示"这不是声明"

int[] pair = {1,3,5,7,8,10,12};
int[] impair = {4,6,9,11};
int x=0;
int j;
int year=2015;
int mm=2;
int month=7;
String msg="";
if (month>mm) {
    for (j = mm; j<month; j++){
        if (Arrays.asList(impair).contains(j)){
            x = 31 + x;
        }else if(Arrays.asList(pair).contains(j)){
            x = 30 + x;
        }else{
            if (year%4==0) {
                x= 29 + x;
            }else{
                x= 28 + x;
            }
        }
    }
    System.output.println(x);
}
Run Code Online (Sandbox Code Playgroud)

rge*_*man 8

您正在尝试通过调用将其转换int[]为a .但是这会导致单个元素(原始元素),它不包含任何值.原因是Arrays.asList()不能正常工作? - 它是一个通用方法,type参数必须是引用类型. 是一种引用类型(与所有数组一样),但不是.List<Integer>Arrays.asListList<int[]>int[]jint[]int

这就是为什么测试全部失败并28重复选择添加的原因.

改变声明类型的pair并且impairint[]Integer[],以便Arrays.asList将推断的类型为Integer正确(引用类型).然后该contains方法将按预期工作.有了这个改变,我得到了150.

  • 尼斯.还需要修复闰年的错误测试:年%4 == 0不完整.应该是这样的:((年%4 == 0)&&(年%100!= 0))|| (年%400 == 0) (3认同)