如何在Java中创建一个给定长度和宽度的X模式?

时间:2015-10-16 19:07:44

标签: java for-loop nested-loops

尝试编写一个程序,根据用户输入的宽度和长度生成一种X /螺旋模式。长度是屏幕上的字符数和宽度是多少字符高。 我无法弄清楚数学关系,使我想要的模式发生。

以下是正确的样本输出: 输入您想要的长度:39
输入您想要的宽度:7
enter image description here

以下是我到目前为止的代码及其生成的代码:

import java.util.Scanner;

public class Twisty {
    public static void main(String[] args){
      Scanner myScanner = new Scanner(System.in);
      System.out.print("Input your desired length: ");
      int length = myScanner.nextInt();
      System.out.print("Input your desired width: ");
      int width = myScanner.nextInt();

      for(int i=0; i<width; i++) {
        for(int j=0; j<length; j++) {
            if(i==j || (i+j)%width==width-1 || (i+j)%width==0) {
                System.out.print("#");
            } else {
                System.out.print(" ");
            }
        }
        System.out.println();
     }
   }
}

输入您想要的长度:39
输入您想要的宽度:7
enter image description here
我究竟做错了什么?谢谢你的帮助。

1 个答案:

答案 0 :(得分:3)

专注于一个X开始。你应该只需要检查2个案例。一个绘制X的一部分,另一个绘制另一面。我基本上从你的代码中获取了这个并删除了你的if语句中的第三个条件。

//System.out.print("Input your desired length: ");
int length = 7;
//System.out.print("Input your desired width: ");
int width = 7;

for(int i=0; i<width; i++){
    for(int j=0; j<length; j++){
        if(i==j  || (i+j)%width==width-1){
            System.out.print("#");
        }else{
            System.out.print(" ");
        }
    }System.out.println();
}

在你完成这个行为并且可以绘制一个X之后,你只需要修改你在宽度上水平的位置。用宽度修改你的长度位置几乎就像你正在绘制一个全新的X.你不关心你在整个画面的水平位置,而是你关心你在当前的X你正在绘制的地方。你可以这样做:

//System.out.print("Input your desired length: ");
int length = 39;
//System.out.print("Input your desired width: ");
int width = 7;

for(int i=0; i<width; i++){
    for(int j=0; j<length; j++){
        if(i==j%width  || (i+j%width)%width==width-1){
            System.out.print("#");
        }else{
            System.out.print(" ");
        }
    }System.out.println();
}

希望这会有所帮助。