我从这段代码得到了意想不到的输出:

时间:2017-03-02 13:25:21

标签: java netbeans

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
       Scanner input=new Scanner(System.in);
       int i = 0;
       int x;
       x=input.nextInt();
       int y;
       y=input.nextInt();
       while(i<y){
        for ( i = 1; i <=y; i=i+x) {
            for ( int j = i; j <=(i+(x-1)); j++) {
                 if(x%2==0 && y%3==0)
                 {
                     System.out.print((j-1)+" ");
                 }
                 else
                     System.out.print(j+" ");
            }
            System.out.println();
        }
    }

示例输入:

3 99

这是我应该得到的输出:

1 2 3
4 5 6
7 8 9
10 11 12
...
97 98 99

但是当我把输入作为

4 99

我得到的输出是:

0 1 2 3 
4 5 6 7 
....
96 97 98 99

我不应该从0开始。

我的代码有什么问题?

4 个答案:

答案 0 :(得分:0)

我试着稍微改写你的代码,以免它变得如此混乱。这是你想要达到的目标吗?

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    int x=input.nextInt();
    int y=input.nextInt();
    for (int i = 1; i < y + 1; i++) {
        System.out.print(i + " ");
        if (i % x == 0){
            System.out.println();
        }
    }
    input.close();
}

答案 1 :(得分:0)

Scanner input=new Scanner(System.in);
    int i = 1;
    int j = 0;
    int x;
    x=input.nextInt();
    int y;
    y=input.nextInt();

     for( i = 1; i <=y; i++) {
                  System.out.print(i);
                  System.out.print(" ");
                  j++;
        if(j == x){
             System.out.println();
             j = 0;
        }
     }

您可以使用此代码按预期输出。

答案 2 :(得分:0)

你的第一个输出将是4,因为那时x = 3且y = 99.两者都没有,所以你的其他块也会被击中。将if(x%2==0 && y%3==0)更改为if(x%2==0 || y%3==0),第一个输出结果为0。这不会完全解决你的问题,但它会让你走上正确的道路。

答案 3 :(得分:-1)

你开始j=1(因为第一次进入循环时i = 1) 如果x%2 == 0(在这种情况下),则打印j-1 当然你会从0开始,我不明白为什么你会感到惊讶。 如果你想避免这种情况,只需打印: (j-1)==0 ? "" : j-1 + " "