簡體   English   中英

Java作業麻煩星號

[英]Java Homework trouble asterisks

我在編碼時遇到問題。 我正在嘗試制作一個程序,要求用戶輸入形狀的高度和寬度。 考慮到我正在學習 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);
    }
}

我不知道他們用 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();
        }
    }

}

以下是您想要的,並且還涵蓋了他們輸入無效數字的情況, 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以阻止它殺死程序

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM