0Pricing
Java Academy · Урок

Чтение чисел и строк

nextInt, nextLine и подводные камни

«Чтение чисел и строк» — бесплатный урок Java Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Java Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Java Academy содержит 4 уроков всего.

Чтение чисел заданного типа

Scanner может считывать числа непосредственно с помощью методов, таких как nextInt и nextDouble. Они преобразуют следующий токен в соответствующий примитивный тип.

Чтение целого числа

nextInt() считывает следующий токен и возвращает его как значение типа int. Здесь используется фиксированная строка, поэтому пример запускается без ввода с клавиатуры.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner("25");
        int age = scanner.nextInt();
        System.out.println(age + 1);
        scanner.close();
    }
}

Чтение числа с плавающей точкой

nextDouble() считывает число с плавающей точкой. Затем его можно использовать в вычислениях.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner("3.5");
        double radius = scanner.nextDouble();
        System.out.println(radius * 2);
        scanner.close();
    }
}

Чтение нескольких чисел

Несколько последовательных операций чтения чисел извлекают токены один за другим, пропуская разделяющие их пробельные символы.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner("10 20 30");
        int a = scanner.nextInt();
        int b = scanner.nextInt();
        int c = scanner.nextInt();
        System.out.println(a + b + c);
        scanner.close();
    }
}

Суммирование до завершения ввода

Сочетайте hasNextInt() с nextInt(), чтобы считывать неизвестное заранее количество чисел.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner("5 15 25 35");
        int total = 0;
        while (scanner.hasNextInt()) {
            total += scanner.nextInt();
        }
        System.out.println(total);
        scanner.close();
    }
}

Известная ловушка nextLine

Вот классическая ловушка: nextInt() считывает число, но оставляет символ перевода строки в буфере. Поэтому следующий вызов nextLine() считывает оставшуюся пустую строку, а не ожидаемый текст.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner("42\nHello World");
        int n = scanner.nextInt();
        String line = scanner.nextLine();
        System.out.println("Number: " + n);
        System.out.println("Line: [" + line + "]");
        scanner.close();
    }
}

Исправление ошибки

Исправление состоит в том, чтобы вызвать дополнительный nextLine() после nextInt(), чтобы поглотить оставшийся символ новой строки перед чтением настоящего ввода построчно.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner("42\nHello World");
        int n = scanner.nextInt();
        scanner.nextLine();
        String line = scanner.nextLine();
        System.out.println("Number: " + n);
        System.out.println("Line: [" + line + "]");
        scanner.close();
    }
}

Чтение длинных чисел и логических значений

В Scanner также доступны nextLong, nextBoolean и другие методы. Каждый из них считывает токен соответствующего типа.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner("9000000000 true");
        long big = scanner.nextLong();
        boolean flag = scanner.nextBoolean();
        System.out.println(big);
        System.out.println(flag);
        scanner.close();
    }
}

Несоответствие типов вызывает исключение

Если следующий токен не является допустимым числом, nextInt выбрасывает исключение InputMismatchException. Если Вы не уверены в типе следующего токена, сначала всегда проверяйте его с помощью hasNextInt.

import java.util.InputMismatchException;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner("abc");
        try {
            scanner.nextInt();
        } catch (InputMismatchException e) {
            System.out.println("Not an integer!");
        }
        scanner.close();
    }
}

Безопасное чтение чисел

Надёжный шаблон считывает значение только при наличии данных нужного типа; в противном случае он считывает и отбрасывает недопустимый токен.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner("x 7 y 9");
        int sum = 0;
        while (scanner.hasNext()) {
            if (scanner.hasNextInt()) {
                sum += scanner.nextInt();
            } else {
                scanner.next();
            }
        }
        System.out.println(sum);
        scanner.close();
    }
}

Главные напоминания

Используйте nextInt и nextDouble для чисел, выполняйте проверку с помощью методов семейства hasNext и не забывайте поглощать оставшийся символ новой строки перед переключением на nextLine.

Быстрая проверка

Проверьте свои знания о чтении чисел и строк.

Итоги

Вы научились считывать числа и строки:

  • nextInt, nextDouble и nextLong считывают числа соответствующего типа
  • Используйте цикл с hasNextInt, если количество значений неизвестно
  • Ошибка с символом новой строки: вызывайте дополнительный nextLine после nextInt
  • Недопустимые токены вызывают InputMismatchException
  • Для безопасности проверяйте ввод с помощью методов семейства hasNext

Часто задаваемые вопросы

Урок «Чтение чисел и строк» бесплатный?

Да — полный текст урока «Чтение чисел и строк» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Java Academy, подпишись на CoddyKit PRO. Курс Java Academy содержит 4 уроков всего.

Чему я научусь в уроке «Чтение чисел и строк»?

nextInt, nextLine и подводные камни Ты практикуешь Java Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Java Academy?

Предыдущий опыт не требуется. Java Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Чтение чисел и строк»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Java Academy?

Да. Каждый урок Java Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Чтение ввода с помощью Scanner
  2. Чтение чисел и строк
  3. Проверка ввода пользователя
  4. Альтернатива BufferedReader
← Назад к Java Academy