0

我想打印输出:1 3 5 7 9 11 13 15 17 19 21 1 3 5 7 9 11 但我得到这个输出:1 34 67 910 1213 1516 1819 211 34 67 910 1213 1516 1819 21

有人可以解释一下我在逻辑上犯的错误吗?

public class BadNews {

    public static final int MAX_ODD = 21;

    public static void writeOdds() {    
    // print each odd number

        for ( int count = 1; count <= (MAX_ODD - 2); count++) {
            System.out.print(count + " ");

            count = count + 2;
            
            // print the last odd number
                    System.out.print(count);
        }
    }

    public static void main(String[] args) {
        // write all odds up to 21
        writeOdds();

        // now, write all odds up to 11
        writeOdds();

    }
}
4

6 回答 6

1

首先,不需要第二个System.out.print

其次,我看到你上升到 21,但是你在代码中的什么地方指定你的第二次调用应该上升到 11?

您可以通过将上限作为writeOdds函数的参数来做到这一点:

public static void writeOdds(int upperLimit)
{
   for(int count = 1; count <= upperLimit; count += 2)
   ...

然后你可以调用它两次,如writeOdds(21)writeOdds(11)

哦,而且,您可以取出count = count + 2,这是在for循环中处理的。

于 2013-11-15T09:43:11.620 回答
1

问题是您正在这样做count++count=count+2因此您将打印一次奇数和一次偶数

更新

解决问题最快的方法是改成while循环

int count = 1;
while( count <= (MAX_ODD - 2)) {
//rest of your code in loop
}

你也只需要一张印刷品

于 2013-11-15T09:44:59.853 回答
0

我在您的代码中看到了许多问题:

  • 更新循环变量两次:

而是在 for 语句中将其更新为;

for ( int count = 1; count <= (MAX_ODD - 2); count+=2)

并删除该行

count = count + 2;
  • 为什么要检查 MAX_ODD-2 ?

检查count <= MAX_ODD

  • 您希望在循环中有一个打印语句。删除线;

    //打印最后一个奇数

    System.out.print(count);

  • 正如@Roy Dictus 建议的那样,将 writeOdds 方法更改为接受 max_odd 参数。

于 2013-11-15T09:54:17.373 回答
0

第一个问题是您要更新您的计数器两次。
其次,随叫随到,您将如何精确 MAX_ODD,因为它是一个静态变量。试试这个;

public class BadNews {

public static void writeOdds(int MAX_ODD) {    
// print each odd number

    for ( int count = 1; count <= MAX_ODD; count+=2) {

        System.out.print(count + " ");

        // print the last odd number
        System.out.print(count);
    }
}

public static void main(String[] args) {
    // write all odds up to 21
    writeOdds(21); <-- Pass the MAX_ODD by parameter

    // now, write all odds up to 11
    writeOdds(11);

}
}
于 2013-11-15T10:20:13.480 回答
0

他们不希望您使用参数方法,而是希望您使用 final int 加上单独的循环将赔率打印到 11

public class BadNews {
    public static final int MAX_ODD = 21;

    public static void writeOdds() {
        // print each odd number
        for (int count = 1; count <= (MAX_ODD); count+=2) {
            System.out.print(count + " ");
        }

        // print the last odd number
    }

    public static void main(String[] args) {
        // write all odds up to 21
        writeOdds();
        System.out.println();
        // now, write all odds up to 11
        for (int count = 1; count <= 11; count+=2) {
            System.out.print(count + " ");
        }
    }
}
于 2018-04-18T19:57:35.633 回答
-1
public class BadNews {
    public static final int MAX_ODD = 21;
        public static void main(String[] args) {
       
        for (int count = 1; count <= MAX_ODD; count+=2) {
            System.out.print(count + " ");
                }
             System.out.println();

        for (int count = 1; count <=(MAX_ODD-10); count+=2) {
            System.out.print(count + " ");
             }
}
}
于 2020-07-31T06:50:09.407 回答