1

我正在为我的第一个 CS 课程做一个加密作业,我正在努力使这个代码工作......这就是我所拥有的。

    public static void findE(int phiPQ) {

        int e = 0;

        for(e > 2; e < (phiPQ - 1);) {
            int larger = phiPQ;
            int smaller = e;
            int r = 1;
            r = larger / smaller;
            larger = smaller;
            smaller = r;

            if(larger  == 1) {
            break;
        }
        return; 
     }

现在我遇到的问题是,当我尝试在 for 循环中执行“e > 2”时它不起作用,并说赋值运算符无效。作业说我应该使用从 e > 2 到 e < (phiPQ - 1) 的 for 循环。如果没有类似while循环的东西,这怎么可能?我也尝试过,但无法让 return 语句正常工作。请帮忙!

4

4 回答 4

1

有人已经“修复”了下面讨论的一些问题。YMMV。


代码有几个关键问题。语法和/或语义错误的组合可能会相互叠加。首先从修复明显的语法错误开始。

1. for 语法错误。

for循环语句的第一个“部分”必须是初始化语句(阅读:“赋值”)。它不能是任意表达式。语法是for(initialization; termination; increment) statement- 有关更多详细信息,请参阅链接。

我希望代码应该是:

for(/* At the start, LET e = 2 */
    e = 2 ;
    /* Terminate when this is false. */
    e < (phiPQ - 1) ;
    /* no increment */) ..

或者:

for(e = 2; e < (phiPQ - 1) ;) ..

(或者,将 2 分配给efor 循环上方并提供一个的初始化语句。)

2. 如注释所示,代码相当于:

// This is a loop with AN EMPTY STATEMENT FOR A BODY due to the
// immediately trailing semicolon.
// Even when this loop is corrected per above, the condition will never
// change state due to lack of increment and it will "loop forever".
for(e > 2; e < (phiPQ - 1);) ;

// This is a new block, that does NOT BELONG to the loop above.
{
    int larger = phiPQ;
    int smaller = e;
    int r = 1;
    r = larger / smaller;
    larger = smaller;
    smaller = r;
}

要解决此问题,请删除;紧跟在该for语句之后的内容。

3. 循环永远不会改变状态。

终止条件取决于ephiPQ。但是,这些变量永远不会改变,因此循环将永远不会循环或永远不会正常终止。

查看循环终止条件和状态进展。

4.在 for 语句之外break使用。

虽然 #3 断言代码永远不会终止,但可能是if包含 的语句break错误地位于循环结构之外并会导致语法错误)旨在终止循环。如果是这种情况,那么它应该循环体内。

于 2013-10-31T03:22:41.980 回答
0

怎么样:

for (int e = 0; e > 2 && e < (phiPQ - 1);)
{
    // your code
}
于 2013-10-31T03:11:49.920 回答
0

对于循环:

for(int e = 3; e < (phiPQ - 1); e++){

}
于 2013-10-31T03:12:16.910 回答
0

您收到此错误是因为 a 中的第一个表达式for-loop用于初始化。然后第二个表达式是您的终止条件;当终止条件计算为false时,循环将结束。例如

for (int i = 0; i < numIterations; i++) {}

这个循环将遍历身体numIterations时间。

因此,您将希望在第二个表达式中更完整地定义循环的迭代空间,或者e通过第一个表达式执行赋值。

有关详细信息,请参阅s的Javadocfor-loop

于 2013-10-31T03:12:17.140 回答