-1

我对java相当陌生,我不知道为什么这段代码没有编译。它有时也不会返回我的结果。有什么建议么?

public static char isPrime(int x)
        {

            for(int y=2;y<x;y++)
                char result = 'r';
                    if(x%y==0)
                    result = 't';
                    else
                    result = 'f';

            return result;
        }

或者

public static char isPrime(int x)
        {
            char result = 'r';
            for(int y=2;y<x;y++)

                    if(x%y==0)
                    result = 't';
                    else
                    result = 'f';

            return result;
        }
4

3 回答 3

0

你需要在你的for陈述中加上括号,否则它只会占据第一行

当您使用它时,您的错误可能y超出范围

出于同样的范围原因,您还必须result在 for 循环之外声明

public static char isPrime(int x)
{
    char result = 'r';

    for(int y=2;y<x;y++)
    {  
        if(x%y==0)
            result = 't';
        else
            result = 'f';
    }

    return result;
}
于 2013-05-02T15:21:22.510 回答
0

如果您使用大括号,您的代码将如下所示:

public static char isPrime(int x) {
    for(int y=2;y<x;y++) {
        char result = 'r';
    }
    if(x%y==0) {
        result = 't';
    }
    else {
        result = 'f';
    }

    return result;
}

如您所见,变量 y 和 result 仅在 for 循环中可见

于 2013-05-02T15:21:46.527 回答
0

for 语句或 if 语句之后的大括号是可选的,但紧跟在该行之后可能只有一个语句。

在第一种情况下,result仅在for. 如果您尝试在其他地方引用它,它将不存在(导致范围界定问题)。

令人惊讶的是,您的第二种情况会起作用 - for 或 if 之后的每个语句都是它自己的语句。

但是,为了可读性和可靠性,强烈建议在 for 语句和 if 语句周围使用大括号。否则,您的代码将非常脆弱。

于 2013-05-02T15:28:14.810 回答