如何确保用户输入在给定的有效范围内?

时间:2018-07-20 20:48:12

标签: java loops validation

我目前正在编写代码,以产生一个由1到20的星号制成的空心正方形。这是我到目前为止的内容,但是如果用户输入数字> 20,我将无法弄清楚如何将代码循环回自身。例如,如果用户输入21,代码仍会创建星号并在下面弹出“无效的尺寸。请输入1-20之间的尺寸:”文本以重新提示用户,但是新的数字不会产生任何结果。我需要它不是创建正方形(如果> 20或<= 0),而是直接“跳转”到“无效大小”文本,然后如果用户输入的值在1-20之间,则创建一个正方形。如果他们的输入再次> 20,我需要它再次提示无效。任何建议或帮助将不胜感激!非常感谢您抽出宝贵的时间阅读本文。 :)

import java.util.Scanner; // program uses class Scanner

    public class HollowSquare {

    public static void main(String[] args) {

        // variable declaration
        int x;
        int s;
        int p;
        int r = 0;
        int y = 1;
        int z = 1;
        int f = 1;

        Scanner input = new Scanner(System.in);

        System.out.printf("Enter the Size of the Asterisk Square from 1-20: "); // prompt user
        x = input.nextInt();  
        if (x > 0 || x <= 20);

        // read and store data from user
        s = x + 2;
        p = x - 2;

        // print output
        while (y <= x) 
        {
            System.out.printf(" * ");
            y++;
        }
        while (r < p) 
        {
            System.out.print("\n * ");
            while (z <= p) 
            {
                System.out.print("   ");
                z++;
            }
            System.out.print(" * ");
            r++;
            z=1;
        }
        System.out.print("\n");
        if (x > 1)
        {
            while (f <= x) 
            {
                System.out.printf(" * ");
                f++;
            }
            System.out.printf("\n");
        }
        else
                System.out.printf("\n");

     // conditions
        if (x <= 0 || x > 20)
            System.out.println("Invalid Size. Enter Size from 1-20: ");
            x = input.nextInt();
    } // end main method
} // end class HollowSquare

2 个答案:

答案 0 :(得分:1)

循环直到获得满意的输入:

int x=0;
/*   ... */
while (x < 1 || x > 20)
{
    System.out.printf("Enter the Size of the Asterisk Square from 1-20: "); // prompt user
    x = input.nextInt();  
}

答案 1 :(得分:0)

这是一些可以解决您问题的代码。

它使用一个递归函数,如果不成功,它将再次调用自身。

如果(等等等等);不执行任何操作(执行分号之前的表达式不执行任何操作。)

如果这样工作:

if(blah blah bla){

代码

代码

代码

}

注意大括号。

在带标识的python中做什么,通常在Java中使用大括号。

import java.util.Scanner; // program uses class Scanner

public class HollowSquare {
    public static void main(String[] args){
        drawSquare();
    }
    public static void drawSquare() {

        // variable declaration
        int x;
        int s;
        int p;
        int r = 0;
        int y = 1;
        int z = 1;
        int f = 1;

        Scanner input = new Scanner(System.in);

        System.out.printf("Enter the Size of the Asterisk Square from 1-20: "); // prompt user
        x = Integer.parseInt(input.nextLine()); 
        if (x > 0 && x <= 20){

        // read and store data from user
        s = x + 2;
        p = x - 2;

        // print output
        while (y <= x) 
        {
            System.out.printf(" * ");
            y++;
        }
        while (r < p) 
        {
            System.out.print("\n * ");
            while (z <= p) 
            {
                System.out.print("   ");
                z++;
            }
            System.out.print(" * ");
            r++;
            z=1;
        }
        System.out.print("\n");
        if (x > 1)
        {
            while (f <= x) 
            {
                System.out.printf(" * ");
                f++;
            }
            System.out.printf("\n");
        }
        else
                System.out.printf("\n");

     // conditions
    }else{
            System.out.println("Invalid Size. Enter Size from 1-20: ");
            drawSquare();
}
    } // end main method
} // end class HollowSquare