Java Academy · Oppitunti

Lukujen ja rivien lukeminen

nextInt, nextLine ja sudenkuopat

Oppitunti 2/413 vaihetta

Lukujen ja rivien lukeminen on ilmainen Java Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Java Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Java Academy-kurssilla on yhteensä 4 oppituntia.

Tyypitettyjen lukujen lukeminen

Scanner voi lukea luvut suoraan metodeilla, kuten nextInt ja nextDouble. Ne muuntavat seuraavan tunnisteen vastaavan primitiivityypin arvoksi.

Kokonaisluvun lukeminen

nextInt() lukee seuraavan tunnisteen ja palauttaa sen int-arvona. Tässä käytetään kiinteää merkkijonoa, jotta esimerkki toimii ilman kirjoittamista.

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();
    }
}

Double-luvun lukeminen

nextDouble() lukee liukuluvun. Sen jälkeen voitte käyttää sitä laskutoimituksissa.

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();
    }
}

Useiden lukujen lukeminen

Useat peräkkäiset lukukutsut lukevat tunnisteet yksi toisensa jälkeen ja ohittavat niiden välissä olevat tyhjämerkit.

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();
    }
}

Summaaminen loppuun asti

Yhdistäkää hasNextInt() ja nextInt(), kun haluatte lukea ennalta tuntemattoman määrän lukuja.

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();
    }
}

Tunnettu nextLine-kompastuskivi

Tässä on klassinen sudenkuoppa: nextInt() lukee luvun mutta jättää rivinvaihtomerkin puskuriin. Seuraava nextLine() lukee tällöin odottamanne tekstin sijaan jäljelle jääneen tyhjän rivin.

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();
    }
}

Sudenkuopan korjaaminen

Korjaus on kutsua ylimääräinen nextLine() heti nextInt()-kutsun jälkeen, jotta jäljelle jäävä rivinvaihto kulutetaan ennen varsinaisen rivisyötteen lukemista.

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();
    }
}

long- ja boolean-arvojen lukeminen

Scanner tarjoaa myös metodit nextLong ja nextBoolean sekä muita vastaavia metodeja. Kukin niistä lukee vastaavan tyyppisen tokenin.

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();
    }
}

Väärän tyyppinen syöte aiheuttaa poikkeuksen

Jos seuraava token ei ole kelvollinen luku, nextInt heittää InputMismatchException-poikkeuksen. Tarkistakaa epävarmoissa tilanteissa aina ensin 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();
    }
}

Lukujen turvallinen lukeminen

Luotettava toimintamalli lukee syötteen vain, kun saatavilla on oikean tyyppinen arvo. Muussa tapauksessa se lukee ja hylkää virheellisen tokenin.

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();
    }
}

Tärkeät muistettavat asiat

Käyttäkää lukuihin nextInt- ja nextDouble-metodeja, varmistakaa syötteen kelvollisuus hasNext-perheen metodeilla ja muistakaa kuluttaa jäljelle jäävä rivinvaihto ennen siirtymistä nextLine-metodin käyttöön.

Pikatarkistus

Testatkaa lukujen ja rivien lukemista koskeva osaamisenne.

Kertaus

Opitte lukemaan lukuja ja rivejä:

  • nextInt, nextDouble ja nextLong lukevat tietyn tyyppisiä lukuja
  • Käyttäkää hasNextInt-metodia silmukassa, kun syötteiden määrää ei tiedetä etukäteen
  • Rivinvaihdon sudenkuoppa: kutsukaa ylimääräistä nextLine-metodia nextInt-metodin jälkeen
  • Virheelliset tokenit aiheuttavat InputMismatchException-poikkeuksen
  • Varmistakaa lukujen lukeminen turvalliseksi hasNext-perheen metodeilla
Aloita maksutta

Opi Java tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
104
Oppitunnit
374

Usein kysytyt kysymykset

Onko oppitunti ”Lukujen ja rivien lukeminen” ilmainen?

Kyllä – oppitunnin ”Lukujen ja rivien lukeminen” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Java Academy-kurssin, päivitä CoddyKit PROhon. Java Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Lukujen ja rivien lukeminen”?

nextInt, nextLine ja sudenkuopat Harjoittelet Java Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Java Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Java Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.

Kuinka kauan ”Lukujen ja rivien lukeminen”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Java Academy-oppitunnilla?

Kyllä. Jokainen Java Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Syötteen lukeminen Scannerilla
  2. Lukujen ja rivien lukeminen
  3. Käyttäjän syötteen tarkistaminen
  4. BufferedReader-vaihtoehto
← Takaisin: Java Academy