带有嵌套循环的Java自定义棋盘格

时间:2014-02-07 21:23:28

标签: java loops

我正在尝试使用给定的用户输入制作自定义检查板,其形式为(行数,列数,每个正方形的大小,填充字符)。 我已经完成了循环,但是我无法正确地获得更多的11 1棋盘格。 我被困在如何划分填充字符以使单个正方形而不是字符成为现在的线条。

import java.util.Scanner;

public class Checker {

    public static void main(String[] args) {
        int col, row, size;
        char filler;
        System.out.println("Please enter 3 numbers and a character."); //output
        Scanner scan = new Scanner(System.in); //input

        row = scan.nextInt();
        col = scan.nextInt();
        size = scan.nextInt();
        filler = scan.next().charAt(0);  // defined variables

        int r, c, i = 0, j = 0, k = 0;

        for (r = 1; r <= row; r++) {
            for (c = 1; c <= col; c++) {
                do {
                    if ((r % 2 != 0 && c % 2 != 0) || (r % 2 == 0 && c % 2 == 0)) {
                        do {
                            System.out.print(filler);
                            i++;
                        }
                        while (i < size);
                        i = 0;

                    } else {
                        do {
                            System.out.print(" ");
                            j++;
                        }
                        while (j < size);
                        j = 0;
                    }
                    k++;
                } while (k < size);
                k = 0;

            }
            System.out.println("\n");
        }
        System.out.println("\nHave a nice day. Goodbye.");

    }
}


3 3 3 x would give:
    xxx  xxx
    xxx  xxx 
    xxx  xxx 
       xxx  
       xxx  
       xxx  
    xxx  xxx  
    xxx  xxx   
    xxx  xxx   

2 个答案:

答案 0 :(得分:0)

第一个do-while刚刚嵌入到远程。它应该在第二个for循环之前。另外,我删除了println中的“\ n”。你可能想要那样,我不确定。

import java.util.*;

public class Checker{

  public static void main(String[] args) {
    int col, row, size; char filler;
    System.out.println("Please enter 3 numbers and a character."); //output
    Scanner scan = new Scanner(System.in); //input

    row = scan.nextInt();
    col = scan.nextInt();
    size = scan.nextInt();
    filler = scan.next().charAt(0);  // defined variables

    int r,c,i=0,j=0,k=0;

    for (r=1; r<=row; r++) {
      do {
        for (c=1; c<=col; c++){
          if ((r % 2 != 0 && c % 2 !=0) || (r %2 == 0 && c % 2 == 0)){
            do {
              System.out.print(filler);
              i++;
            }
            while (i<size);
            i = 0;

          }


          else {
            do
            {  System.out.print(" ");
              j++;
            }
            while (j<size);
            j = 0;
          }
        }
        k++;
        System.out.println();
      }
      while (k < size);
      k = 0;
    }
    System.out.println("\nHave a nice day. Goodbye.");
  }

}

输入3 3 3 X 产生了以下内容。

XXX   XXX
XXX   XXX
XXX   XXX
   XXX   
   XXX   
   XXX   
XXX   XXX
XXX   XXX
XXX   XXX

输出与您想要的不匹配。但我相信这是正确的,因为它是3X3。如果要更改它,只需增加行的长度即可。 (增加列数)

答案 1 :(得分:0)

你几乎拥有它。打印盒子时你的逻辑失败了。你现在打印填充SIZE次,直到它完成,然后它打印空间等。但问题是你没有移动到下一行,直到你完成该行。实际上,您需要处理多行中的第一行,在移动到下一行之前移动到新行SIZE乘以打印值。

我已经冒昧地为你完成了如下任务:

import java.util.*;

public class Main{ 

public static void main(String[] args) {
int col, row, size; char filler;
System.out.println("Please enter 3 numbers and a character."); //output
Scanner scan = new Scanner(System.in); //input

row = scan.nextInt();
col = scan.nextInt();
size = scan.nextInt();
filler = scan.next().charAt(0);  // defined variables

int r,c,i=0,j=0,k=0;

for(r=1; r<=row; r++){
    for(int boxSize = 0; boxSize < size; boxSize++){
        for(c=1; c<=col; c++){

                if((r % 2 != 0 && c%2 !=0) || (r % 2 == 0 && c % 2 == 0)){
                    do{
                        System.out.print(filler);
                        i++;
                    }
                    while(i < size);
                    i = 0;
                }
                else{
                    do{
                        System.out.print(" ");
                        j++;
                    }
                    while(j < size);
                    j = 0;
                }
        }
        System.out.println();
    }
    System.out.println("\n");
}
System.out.println("\nHave a nice day. Goodbye.");
}
}