使用嵌套循环打印棋盘。 【JAVA]

时间:2015-02-28 23:56:58

标签: java nested-loops

我遇到了打印代码的问题。我需要用一个用户输入大小的网格打印棋盘。

应输出的内容示例。

Input a size (must be larger than 1):
5

0 *   *   *
1   *   *  
2 *   *   *
3   *   *  
4 *   *   *

这是我的代码:

import java.util.Scanner;
public class nestedpractice1 
{
    public static void main(String[] args)
    {
        Scanner kbinput = new Scanner(System.in); 
        //Create Size variable
        System.out.println("Input a size: ");
        int n = 0; n = kbinput.nextInt();

        for(int r = 0; r < n; r++)
        {
            for(int c = 0; c < r; c++)
                    {
                if((r%2) == 0)
                {
                    System.out.print("*");
                }
                else if((r%1) == 0)
                {
                    System.out.print(" *");
                }
            }
            System.out.println("");
            kbinput.close();
        }
    }
}

我的代码一直打印

**

****

2 个答案:

答案 0 :(得分:2)

通过查看您的代码,我发现了这些潜在的问题:

    不应在循环内调用
  • kbinput.close();
  • else if((r%1) == 0)应为else if (r % 2 != 0),但在这种情况下只需else即可。
  • else
  • ,您可能希望System.out.print(" ");而不是System.out.print(" *");
  • 我认为for(int c = 0; c < r; c++) {应该与c < n一样长。

答案 1 :(得分:2)

此循环精确地产生您指定的输出:

    for (int r = 0; r < n; r++) {
        System.out.print(r);
        for (int c = 0; c < n; c++) {
            System.out.print(r % 2 == 1 ^ c % 2 == 0 ? " *" : "  ");
        }
        System.out.println();
    }

我将内部循环的主体浓缩为单个print语句。此语句使用^(xor)运算符来测试条件,然后使用?:(三元)运算符在条件为true时打印星号,如果条件为{1}则使用空格false

我们可以打破这个单一陈述,同时保留其含义,如下:

            boolean isOddRow = r % 2 == 1;
            boolean isEvenCol = c % 2 == 0;
            System.out.print(isOddRow ^ isEvenCol ? " *" : "  ");

作为解释,我们只想在行和列都是偶数或两者都是奇数的情况下打印*。因此,如果行是偶数但列是奇数,或者行是奇数但列是偶数,则我们只打印空格。

我们可以使用==代替^来表达相同的逻辑:

            boolean isEvenRow = r % 2 == 0;
            boolean isEvenCol = c % 2 == 0;
            System.out.print(isEvenRow == isEvenCol ? " *" : "  ");

或者如果您更喜欢速记if..else而不是速记三元运算符:

            if (isEvenRow == isEvenCol) {
                System.out.print(" *");
            } else {
                System.out.print("  ");
            }