Java - 如何阻止用户输入整数以外的内容?

时间:2013-11-06 17:08:40

标签: java arrays loops if-statement java.util.scanner

我的程序工作正常,另外一个事实是用户仍然可以输入会破坏程序的字符串/字符,从而导致错误。

我想编写一个语句,以便当用户输入0-100之间的整数以外的任何内容时,将显示错误消息(基本上我的字符串表示他们不能这样做)或者最好是他们无法输入除了整数之外的任何东西(如果可能的话)。

这是我的代码:

    int[] cw_Mark = new int[6];
    for (int i = 0; i < cw_Mark.length; i++) {
        if (i >= 0 || i <= 100) {
            System.out.println("Please Enter Your Module " + (i+1) + " Coursework Mark: ");
            cw_Mark[i] = input.nextInt();
        } else {
            System.out.println("Please Enter a Number Between 1 and 100");
        }
    }

4 个答案:

答案 0 :(得分:1)

将其封装在一个方法中 - 如下所示..然后只需使用该方法从用户获取整数。

public static int getInt() {

    System.out.print("Please enter an integer");
    if (console.hasNext("stop")) {
        System.out.println("***Terminated***");
        System.exit(0);
    }
    while(!console.hasNextInt()) {
        System.out.print("Input is not a valid integer!");
        console.next();
    }
    int temp = console.nextInt();
    while(temp<0 && temp>100) {
        System.out.println("invalid input");
        temp = console.nextInt();
    }
    return temp;    
}

编辑:

这是整个解决方案,如果采用这种方法的try-catch块。

package standard;

import java.util.Scanner;
public class Main {
    static Scanner console = new Scanner(System.in);
    public static void main(String[] args) {

        int[] cw_Mark = new int[6];
        for (int i = 0; i < cw_Mark.length; i++) {
            System.out.println("Please Enter Your Module " + (i + 1)
                    + " Coursework Mark: ");
            cw_Mark[i] = getInt();
        }
    }

    //Gets the next integer from the console. 
    public static int getInt() {

        System.out.print("Please enter an integer");
        if (console.hasNext("stop")) {
            System.out.println("***Terminated***");
            System.exit(0);
        }
        while (!console.hasNextInt()) {
            System.out.print("Input is not an integer!");
            console.next();
        }
        int temp = console.nextInt();
        while (temp <= 0 && temp >= 100) {
            System.out.println("Input must be between 0 and 100");
            temp = console.nextInt();
        }
        return temp;
    }

}

答案 1 :(得分:0)

为避免程序退出抛出异常,您只需使用try / catch包装用户输入接受语句:

try {
    cw_Mark[i] = input.nextInt();
} catch(InputMismatchException e) {
     System.out.println("Entered value is not a number");
}

答案 2 :(得分:0)

这应该这样做:

while(true)
{
    try {
        System.out.println("Please Enter Your Module " + (i+1) + " Coursework Mark: ");
        cw_Mark[i] = input.nextInt();
        if(cw_Mark[i}>=0&&cw_Mark[i]<=100)
            break;
    } catch(InputMismatchException e) {
         System.out.println("Needs a number.");
    }
    System.out.println("Needs a number from 1 to 100");
}

这将捕获任何不良值并继续提示您的用户提供正确的值,直到他们这样做。

编辑:为了澄清,您只需要将其粘贴到您当前拥有的位置

System.out.println("Please Enter Your Module " + (i+1) + " Coursework Mark: ");
        cw_Mark[i] = input.nextInt();

并取出你的支票0 - 100.这里没有任何好处,它没有在正确的位置检查以产生影响。

答案 3 :(得分:0)

试试这个

    int[] cw_Mark = new int[6];
    for (int i = 0; i < cw_Mark.length; i++) {
        System.out.println("Please Enter Your Module " + (i + 1) + " Coursework Mark: ");
        while (true) {
            String next = input.next();
            try {
                cw_Mark[i] = Integer.parseInt(next);
                if (i >= 0 || i <= 100) {
                    break;
                }
            } catch (NumberFormatException e) {
            }
            System.out.println("Please Enter a Number Between 1 and 100");
        }
    }