-1

Java プログラミング クラスのプログラムについて本当に助けが必要です。これまでに作成した手順とコードを挿入します。どんな助けでも大歓迎です!前もって感謝します!!手順: アスタリスク (*) を使用して中空のボックス形状を印刷/表示する Box (Box.java) というプログラムを作成します。プログラムは 2 ~ 24 の範囲の偶数を読み取り、ボックス内の行/列の数を指定します。間違った値が入力された場合は、エラーを表示して番号を再入力するように求めます。プログラムは、適切なサイズのくぼみを表示します。ヒント: ループ内でループを使用します。基本的には正方形のボックスを作成する必要があるため、boxSize = 5 という数値を指定すると、出力は 5x5 の寸法のボックスになります。アウトラインはアスタリスクでできていますが、内部は空白です

これまでのところ、コードに関して私が持っているものは次のとおりです

import java.util.Scanner;

public class Box
{

    public static void main(String[]args)
    {
        //numrows and numcols are equal however the spacing is differnt
        Scanner input = new Scanner(System.in);
        System.out.print("Enter an even number (2-24):  ");
            int boxSize = input.nextInt();

        int numRows = boxSize;
        int numCols = numRows;
        // This program demonstrates compound decisions with the logical and operator &&
        //asks if the number is less than or equal to 24 and greater than or equal to 2 and that the remainder is 0 
        //when divided by 2, checks if its an even number like it should be

        if(boxSize >= 2 && boxSize <= 24 && boxSize%2 == 0)
        {   
            //nested loops are used to print out the asterisk in the correct pattern
            for(int r = 0; r<numRows; r++)
            {
                    System.out.println("*");
                for(int c = 0; c<numCols; c++)      
                {   
                            System.out.print("*");    
                }
                    }
        }
    }

            //This program demonstrates compound decisions with the logical or ( || ) operator
        //checks if any of the following are true
        //if one or more is true then that means that it is an incorrect number
        //then reprompts the user to put in a new number then checks again
        if(boxSize<2||boxSize>24||boxSize% 2 != 0)
        {
            System.out.println("Value must be an even number from 2-24");
        }

基本的に私の問題は、ループに何を入れ、どこで形を作るべきかわからないことです。また、数値が奇数の場合、または 2 から 24 の間ではない場合、boxSize の値を REPROMPT にする方法もわかりません。

4

2 に答える 2

0

ここ。すべてを 1 つの方法にまとめました。非常に多くの if があることに注意してください。コースでその部分に到達した場合は、三項演算子を使用して最適化できます。

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

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

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

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

            // draw the box
            for (int col = 0; col < boxSize; col++) {
                for (int row = 0; row < boxSize; row++) {
                    /* First or last row ? */
                    if (row == 0 || row == boxSize - 1) {
                        System.out.print("*");
                        if (row == boxSize - 1) {
                            System.out.println(); // border reached start a new line
                        }
                    } else { /* Last or first column ? */
                        if (col == boxSize - 1 || col == 0) {
                            System.out.print("*");
                            if (row == boxSize - 1) {
                                System.out.println();
                            }
                        } else {
                            System.out.print(" ");
                            if (row == boxSize - 1) {
                                System.out.println();
                            }
                        }
                    }
                }
            }

        }while (true);
    }
于 2013-09-11T21:02:00.520 に答える
0

ネストされたループを使用したアプローチは基本的に問題ありません。内部のものだけでは、あなたが探しているものではありません....あなたが望むのは、このようなものです:

for(int r = 0; r<numRows; r++) {
    for(int c = 0; c<numCols; c++) {
        // print a "*" ONLY IF on border, and " " otherwise 
    }
    // here you finished printing the "*"/" ", so print just a newline
}

プロンプトと再プロンプトには、do {} while(yourIfCondition)ループを使用してプロンプトを再表示します。

于 2013-09-11T20:30:49.043 に答える