أسهل طريقة لضمان إدخال عدد صحيح من خلال الماسح الضوئي؟

StackOverflow https://stackoverflow.com/questions/471013

سؤال

لبرنامج وأنا أكتب، وأنا بحاجة إلى أن نسأل المستخدم لعدد صحيح بين 1 و 8. لقد حاولت متعددة (نظافة) طرق للقيام بذلك ولكن أيا منها لا يعمل، لذلك أنا تركت مع هذا:

    int x = 0;
    while (x < 1 || x > 8)
    {   
        System.out.print("Please enter integer  (1-8): ");

        try
        {
            x = Integer.parseInt(inputScanner.next());
        }
        catch(NumberFormatException e)
        {
            x = 0;
        }
    }

وأين inputScanner هو الماسح الضوئي. بالتأكيد هناك طريقة أفضل؟

هل كانت مفيدة؟

المحلول

والماسح الضوئي يفعل التعابير العادية، أليس كذلك؟ لماذا لا تحقق إذا كان يتطابق مع "^ [1-8] $" أولا؟

نصائح أخرى

وباستخدام nextInt () هو بالفعل تحسنا مقارنة لمجرد استخدام الطريقة التالية (). وقبل ذلك، يمكنك استخدام hasNextInt () لتجنب haing كل هذا مجموعة من الاستثناءات لا طائل منه.

ومما أدى إلى شيء من هذا القبيل:

int x = 0;
do {
  System.out.print("Please...");
  if(scanner.hasNextInt()) x = scanner.nextInt();
  else scanner.next();
} while (x < 1 || x > 8);

وكان علي أن أفعل واجهة آلة حاسبة بيانية (يعمل فقط مع الأعداد الصحيحة)، وكان مشكلة، وهذا لم الاختبارات لا تسمح بأي استثناءات لأن يلقى إذا كان الإدخال لا عدد صحيح. لذلك لا يمكن استخدام

try { int x = Integer.parseInt(input)} catch (Exception e) {dosomethingelse}

ولأن برامج جافا علاج عموما مدخلا لJTextField كسلسلة أنا استخدم هذا:

if (input.matches("[1-9][0-9]*"){ // String.matches() returns boolean
   goodforyou
} else {
   dosomethingelse
}

// this checks if the input's (type String) character sequence matches
// the given parameter. The [1-9] means that the first char is a Digit
// between 1 and 9 (because the input should be an Integer can't be 0)
// the * after [0-9] means that after the first char there can be 0 - infinity
// characters between digits 0-9

وأمل أن يساعد هذا:)

وأباتشي العموم هو صديقك. انظر> وأ href = "http://commons.apache.org/lang/api/org/apache/commons/lang/math/NumberUtils.html#toInt(java.lang.String،٪20int)" يختلط = "نوفولو noreferrer "> NumberUtils.toInt (سلسلة، الباحث)

String input;
int number;

while (inputScanner.hasNextLine())
{
    input = inputScanner.nextLine();

    if (input.equals("quit")) { System.exit(0); }
    else
    {
        //If you don't want to put your code in here, make an event handler
        //that gets called from this spot with the input passed in
        try
        {
            number = Integer.parseInt(input);
            if ((number < 1) || (number > 8))
            { System.out.print("Please choose 1-8: "); }
            else { /* Do stuff */ }
        }
        catch (NumberFormatException e) { number = 0; }
    }
}

وأنا أحب دائما لسحب في سلسلة كاملة حتى تتمكن من التأكد من أن المستخدم الضغط على زر الإدخال. إذا كنت تستخدم فقط inputScanner.nextInt() يمكنك وضع اثنين ints على خط وانها ستسحب في واحد، ثم من جهة أخرى.

وكود مثال:

int x;
Scanner in = new Scanner(System.in);
System.out.println("Enter integer value: ");
x = in.nextInt();

ويمكن أيضا أن تستخدم مصفوفة لتخزين عدد صحيح.

هل يمكن أن تجرب شيئا من هذا القبيل:

Scanner cin = new Scanner(System.in);
int s = 0;    
boolean v = false;
while(!v){
    System.out.print("Input an integer >= 1: ");

    try {    
        s = cin.nextInt();
        if(s >= 1) v = true;
        else System.out.println("Please input an integer value >= 1.");
    } 
    catch(InputMismatchException e) {
        System.out.println("Caught: InputMismatchException -- Please input an integer value >= 1. ");
        cin.next();
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top