繁体   English   中英

For循环未执行;

[英]For loop not executing;

我的代码不适用于此方法,我试图将数字的总和相加; 如果n = 3,则返回10; n = 6,返回56;

这是我的代码:

public int sumOfSums(int n) {
    int[] numArray = new int[n];
    int totalSum = 0;
    int counter = 0;
    for (int i = 0; i < n ; i++){
        numArray[i] = n;
        n--;
        System.out.println(numArray[i]);
    }
    for (int j = 0; j < n; j++){
        totalSum += numArray[j];
        System.out.println("I am in for loop");
  if (j == n-1){
            j = 0;
            counter++;
        }
        if (counter == n){
            return totalSum;
        }

}
return totalSum;
}

也没有分配总和,这是我得到的错误:

----jGRASP exec: java -ea HazMath
-37337 is not prime
1
Exception in thread "main" java.lang.AssertionError
    at HazMath.main(HazMath.java:133)

 ----jGRASP wedge: exit code for process is 1.
 ----jGRASP: operation complete.

从运行此断言:

public static void main(String[] args){
    HazMath HM=new HazMath();
        assert !HM.isPrime(3);
        assert !HM.isPrime(-37337);
        assert HM.sumOfSums(1) == 1;
    assert HM.sumOfSums(3) == 10;
    assert HM.sumOfSums(6) == 56;
    assert HM.sumOfSums(25) == 2925;
    assert HM.sumOfSums(-5) == 0;
    System.out.println("All tests passed.  VICTORY!");
    }

您在Prime上声明了AssertionError。 如果您打算继续进行其余测试,则需要捕获错误。

示例代码:

        try {
            assertTrue(hm.isPrime(-37337));
        }
        catch (AssertionError e ) {
            e.printStackTrace();
        }

此外,如果您担心代码无法进入第二个循环,则是由于以下原因:

在第一个循环中,将n的值减为0。

然后在第二个循环中比较0是否小于0。

这不是问题的直接答案,但是您可以使用以下公式更直接地计算总和并避免循环:

f(n) = n(n+1)(n+2) / 6

重写代码以使用此功能可能会解决此过程中的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM