2014-10-01 2 views
-1

Я пишу программу одного класса/одного метода, и я прошу пользователя ввести целые числа, удвоения или строки (что-либо, кроме int или double, является строкой). У меня есть представление о том, что мне нужно использовать, но мне трудно понять, как все это вписывается в мою программу.Как проверить, являются ли входы пользователя целыми числами?

Я не уверен, как использовать методы hasNext, чтобы определить, какой тип ввода он есть. Сейчас я работаю над целочисленным случаем; Как проверить каждое значение, которое вводит пользователь, если все они разделены пробелом? И как только я знаю, что это целое число, как я буду использовать следующий метод для чтения данных в отдельные переменные, чтобы я мог выполнять простые арифметические операции над ними? Помощь приветствуется!

Вот что я до сих пор:

import java.util.Scanner; 

public class InputParser 
{ 
    public static void main(String[] args) 
    { 
     Scanner scanner = new Scanner(System.in); 
     System.out.print("How many values do you want to parse: "); 
     int numValues = scanner.nextInt(); 
     System.out.println("Please enter " + numValues + " values: "); 
     String userInput = scanner.nextLine(); 
    } 
} 

ответ

0

Если вы знаете разделителем, вы можете использовать String.split() для разделения данных, вводимых пользователем:

String userInput = scanner.nextLine(); 
String[] separated = userInput.split(" "); // use " +" for delimiter if input like "3 2 2 4" should be allowed 
for (String singleInput : separated) { 
    // proceed the single input here 
} 

Edit: Допустим, вы уже имеют методы, которые вызывают целочисленный/двойной/строковый ввод:

void proceedInt(int number) { 
    ... 
} 

void proceedDouble(double number) { 
    ... 
} 

void proceedString(String text) { 
    ... 
} 

Тогда отчетливый тип входа в выше для цикла, как это:

for (String userInput : separated) { 

    try { 
     int number = Integer.parseInt(userInput); 
     proceedInt(number); 
     continue; // we proceed to the next element prematurely since no double or string anyway 
    } catch (NumberFormatException nfe) { 
    } 

    try { 
     double number = Double.parseDouble(userInput); 
     proceedDouble(number); 
     continue; // proceed to the next element prematurely or you will also treat the input as a string and proceed the input twice: as a double and as a string 
    } catch (NumberFormatException nfe) { 
    } 

    // if we landed here, we can say for sure that the input was neither integer nor double, so we treat it as a string 
    proceedString(userInput); 
} 

Edit, возьмите два: Должно быть безошибочным теперь ...

+0

Спасибо , поэтому, как только я разделил его, как я прочитаю каждый, чтобы увидеть, целое число ?? – Karen

+0

В принципе, используйте решение, предложенное в другом ответе. Сейчас я обновлю свое. – hoefling

+0

О, хорошо, спасибо! – Karen

0

Прежде всего, я рекомендуем вам всегда захватить информацию пользователя в виде строки, например, с помощью:

String input = scanner.nextLine(); 

чтобы увидеть, если они отделены друг от друга использования пространства (// S является регулярное выражение для одного или более пробелов):

String[] splits = input.split("\\s+"); 

Iterate на каждой строке, которую вы обнаружили:

for (String eachString: splits) { 

//do what you need 
} 

Чтобы разобрать целое число, попробуйте следующее:

try { 
    myint = Integer.parseInt(input); 
} catch (NumberFormatException e) { 
    //Do what you need to do because input was NOT an int 
} 

То же самое с двойным, но использовать вместо:

Double.parseDouble() 
Смежные вопросы