2016-06-21 4 views
0

Итак, я полный новичок, и если это для вас очень глупый вопрос, извините.Методы класса сканера

Итак, я начал использовать класс сканера, и мне что-то кажется странным.

Например, следующие строки кода:

Scanner scan = new Scanner(System.in); 

System.out.print("Write string: "); 

if(scan.hasNextInt()){ 

    int x = scan.nextInt(); 
} 
else 
    System.out.println("Only integers allowed"); 

Как это знают, наберется ли пользователь число или нет, если я только получаю вход внутри «если» состояние?

+0

@Okx , о, это прекрасно работает. – Asker

+0

Поскольку каждый заданный вами вопрос начинается с «Java» в заголовке: [Stop do this] (http://meta.stackexchange.com/questions/19190/should-questions-include-tags-in-their-titles). – Tom

ответ

2

Согласно Java документации:

hasNextInt() «возвращает истину, если следующий маркер на входе этого сканера можно интерпретировать как целочисленное значение.» Таким образом, этот метод смотрит на ввод, и если следующая вещь в нем - целое число, оно возвращает true. Сканер еще не «прочитал» ввод, поместив его в переменную.

+0

Но что означает радикс? Количество символов для чтения? Или общее количество символов в строке, которые являются ints? – Azurespot

0

Если вы должны были смотреть на фактической реализации hasNextInt, то вы можете увидеть, как он знает:

/** 
* Returns true if the next token in this scanner's input can be 
* interpreted as an int value in the specified radix using the 
* {@link #nextInt} method. The scanner does not advance past any input. 
* 
* @param radix the radix used to interpret the token as an int value 
* @return true if and only if this scanner's next token is a valid 
*   int value 
* @throws IllegalStateException if this scanner is closed 
*/ 
public boolean hasNextInt(int radix) { 
    setRadix(radix); 
    boolean result = hasNext(integerPattern()); 
    if (result) { // Cache it 
     try { 
      String s = (matcher.group(SIMPLE_GROUP_INDEX) == null) ? 
       processIntegerToken(hasNextResult) : 
       hasNextResult; 
      typeCache = Integer.parseInt(s, radix); 
     } catch (NumberFormatException nfe) { 
      result = false; 
     } 
    } 
    return result; 
} 

Примечание: hasNextInt() просто называет hasNextInt(int radix), где defaultRadix = 10

public boolean hasNextInt() { 
    return hasNextInt(defaultRadix); 
} 
Смежные вопросы