Java Homework麻烦的星号

时间:2017-10-13 23:22:14

标签: java

我遇到编码问题。我试图制作一个程序,要求用户输入形状的高度和宽度。考虑到我正在参加java课程,我是一个新手。需要有两个平行的星号形状,可以是正方形或矩形。

谢谢!

我到目前为止的代码在

中有点坦率
import java.util.Scanner;

public class rectangle {

    public static void main(String... args) {
        int recHeight = 0;
        int recWidth = 0;
        Scanner input = new Scanner(System.in);

        do {
            System.out.print("Enter height [-1 to quit] >> ");
            recHeight = input.nextInt();

            if (recHeight == -1) {
                System.exit(0);
            }

                /* check if number is valid */
            if (recHeight < 2 || recHeight > 24) {
                System.err.println("--Error: please enter a valid number");
                continue; // prompt again

                System.out.print("Enter width [-1 to quit] >> ");
                recWidth = input.nextInt();

                if (recWidth == -1) {
                    System.exit(0);
                }

                /* check if number is valid */
                if (recWidth < 2 || recWidth > 24) {
                    System.err.println("--Error: please enter a valid number");
                    continue; // prompt again
                }
                for (int col = 0; col < recHeight; col++) {
                    for (int row = 0; row < recWidth; row++) {
                        /* First or last row ? */
                        if (row == 0 || row == recWidth - 1) {
                            System.out.print("*");
                            if (row == recWidth - 1) {
                                System.out.println(); // border reached start a new line
                            }
                        } else { /* Last or first column ? */
                            if (col == recHeight - 1 || col == 0) {
                                System.out.print("*");
                                if (row == recWidth - 1) {
                                    System.out.println();
                                }
                            } else {
                                System.out.print(" ");
                                if (row == recWidth - 1) {
                                    System.out.println();
                                }
                            }
                        }
                    }
                }
            }

        } while (true);
    }
}

2 个答案:

答案 0 :(得分:1)

我不知道他们用if和continue来教你什么。我认为你用do while(true)创建了一个无限循环,因为你从未将它设置为false。 以下是我们上周的教学方法,或至少根据您的需要进行修改。

import java.io.*;
import java.util.Scanner;

public class SquareDisplay
{
    public static void main(String[] args) throws IOException
    {
        // scanner creation
        Scanner stdin = new Scanner(System.in);
        // get width
        System.out.print("Enter an integer in the range of 1-24: ");
        int side = stdin.nextInt();
        // check for < 1 or greather then 24

        while( (side < 1) || (side > 24))
        {
            System.out.print("Enter an integer in the range of 1-24: ");
            // reget the side
             side = stdin.nextInt();
        }
        // get height
        System.out.print("Enter an integer in the range of 1-24: ");
        int height = stdin.nextInt();
        // check for < 1 or greather then 24

        while( (height < 1) || (height > 24))
        {
            System.out.print("Enter an integer in the range of 1-24: ");
            // reget the height
            height = stdin.nextInt();
        }
        // create rows
        for( int rows = 0; rows < side; rows++)
        {
            // creat cols
            for( int cols = 0; cols < height; cols++)
            {
                System.out.print("X");
            }
        System.out.println();
        }
    }

}

答案 1 :(得分:0)

以下是您想要的,也包括他们输入无效数字的情况,例如example

import java.util.InputMismatchException;
import java.util.Scanner;

public class SquareDisplay {
    public static void main(final String... args) {
        try (Scanner input = new Scanner(System.in)) {
            final int columns = getInRange(input, 1, 24);
            final int rows = getInRange(input, 1, 24);
            for (int x = 0; x < columns; x++) {
                for (int y = 0; y < rows; y++) {
                    System.out.print("X");
                }
                System.out.println();
            }
        }
    }

    private static int getInRange(final Scanner input, final int min, final int max) {
        int returnValue = Integer.MIN_VALUE;
        do {
            System.out.printf("Please enter a value between %d and %d: ", min, max);
            try {
                returnValue = input.nextInt();
            } catch (final InputMismatchException ignored) {
                // Ignore, keep asking
            }
            input.nextLine();
        } while (returnValue < min || returnValue > max);
        return returnValue;
    }
}

的优化

  • 使用try-with-resources处理资源管理
  • 提取读取数字以减少重复
  • 处理InputMismatchException以阻止程序杀死程序