Scanner, wprowadzanie danych z klawiatury.

java

W tym artykule dowiesz się, jak w języku Java wprowadzać dane do programu z klawiatury, przy pomocy klasy Scanner. Dzięki tej wiedzy będziesz umieć tworzyć programy, wykonujące tę samą operację dla różnych danych wejściowych.

Wszystkie artykuły z cyklu “Kurs Java”:


Klasa Scanner

Wiemy już, że w Javie jest taka konstrukcja jak klasa. Zdefiniowaliśmy też już pierwszą klasę, która nazywała się “Program”. Standardowa biblioteka Javy dostarcza nam bardzo wiele klas z gotowymi implementacjami. Jedną z nich jest klasa Scanner.

“Klasa Scanner odczytuje sformatowane dane wejściowe i konwertuje je do postaci binarnej. Klasa może być używana do odczytywania danych wejściowych z konsoli, pliku, łańcuchów […]. Przykładowo możemy wykorzystać tę klasę do odczytywania liczb z klawiatury i przypisywania jej do odpowiedniej zmiennej”

H. Schildt, Java Kompendium Programisty

No dobrze, polecieliśmy teraz regułką 🙂 Wygląda profesjonalnie, ale o co chodzi… 🙂 Jak tego użyć?

Najpierw wytłumaczmy, czym jest zmienna, o której była mowa w cytacie.

Zmienna

Zmienna służy do przechowywania danych.

Konstrukcja deklaracji (stworzenia) zmiennej:

typ_danych nazwa_zmiennej;

Aby stworzyć zmienną w Javie, należy określić jej typ oraz nazwę. Jakie mamy typy w Javie? O tym za chwilę.

Konstrukcja inicjalizacji (ustawienia wartości) zmiennej:

nazwa_zmiennej = wartość;

Typy danych

Java definiuje 8 podstawowych typów danych, tzw. typów prostych, które możemy podzielić na 3 grupy:

Całkowitoliczbowe (np. 66)

  • byte – liczby z przedziału od -128 do 127
  • short – liczby z przedziału od -32 768 do 32 767
  • int – liczby z przedziału od ok – 2 mln do 2 mln
  • long – liczby z przedziału od ok – 9 tryliardów do 9 tryliardów

Zmiennoprzecinkowe (np. 3.14)

  • float – liczby z przedziału 1.4e-045 do 3.4e+038
  • double – liczby z przedziału 4.9e-324 do 1.8e+308

Znakowy (np. ‘c’)

  • char

Logiczny (true lub false)

  • boolean

Poza typami prostymi wyróżniamy też typy referencyjne, jednym z nich jest String, który służy do przechowywania całych zdań.

Super, poznaliśmy podstawowe typy danych w Javie, możemy więc zacząć tworzyć zmienne.

Ćwiczenie 1. Stwórz zmienne: imię, wiek oraz pensja. Przypisz do nich wartości oraz wyświetl na konsoli.

Otwórz projekt Program.java, w miejscu, w którym zakończyliśmy. W metodzie main dodaj zmienne:

// deklaracja zmiennych
String imie;
int wiek;
double pensja;

// inicjalizacja zmiennych
imie = "Jurek";
wiek = 22;
pensja = 4445.11;

Wyświetl wartość zmiennych

System.out.println("Imię "+imie);
System.out.println("Wiek "+wiek);
System.out.println("Pensja "+pensja);

Konstrukcja “Imię “+imie, łączy słowo “Imię ” z wartością zmiennej imie. A więc wynikiem będzie połączony napis: “Imię Jurek”.

Program.java

class Program {
    public static void main (String args[]) {
	System.out.println("Dzisiaj jest piękny dzień.".length());
 
	// deklaracja zmiennych
	String imie;
	int wiek;
	double pensja;
  
	// inicjalizacja zmiennych
	imie = "Jurek";
	wiek = 22;
	pensja = 4445.11;

	System.out.println("Imię "+imie);
	System.out.println("Wiek "+wiek);
	System.out.println("Pensja "+pensja);
    }
}

Przyszedł czas na kompilację oraz uruchomienie programu. W katalogu, w którym znajduje się plik “Program.java” wpisz w konsoli:

javac Program.java
java Program

Powinniśmy otrzymać następujący wynik:

java kompilacja i uruchomienie z konsoli

Poznaliśmy typy oraz zmienne, możemy zatem wrócić do klasy Scanner, która umożliwia wczytywanie danych i zapisywanie ich do zmiennych.

Wczytywanie danych z klawiatury (Scanner cd.)

Aby skorzystać ze “skanera” należy utworzyć zmienną typu Scanner i zainicjalizować go, przekazując “standardowe wejście”.

Standardowe wejście (System.in) domyślnie ustawione jest jako klawiatura. Standardowe wyjście (System.out) domyślnie ustawione jest jako konsola.

Stworzenie instancji skanera:

Scanner scanner = new Scanner(System.in);

Scanner jest zewnętrzną klasą (niezdefiniowaną przez nas), aby jej użyć, należy wykonać import. W Javie importy definiujemy na samym początku pliku, jeszcze przed deklaracją klasy.

Wpisz następujący kod na samym początku pliku Program.java

import java.util.Scanner;

Ok, przygotowaliśmy skaner, ale jak z niego skorzystać?

Klasa Scanner udostępnia metody, które umożliwiają sczytywanie z klawiatury wartości różnych typów, np.:

  • Jeśli chcesz sczytać liczbę całkowitą, to wywołaj:
scanner.nextInt()
  • jeśli chcesz sczytać tekst, to wywołaj
scanner.next()

Listę wszystkich metod udostępnianych przez klasę Scanner możesz znaleźć w dokumentacji javy.

Aby sczytaną wartość przypisać do zmiennej, wywołaj odpowiednio:

imie = scanner.next();
wiek = scanner.nextInt();
pensja = scanner.nextDouble();

Aby poczuć interakcję z programem, możemy dodać odpowiednie pytania, które będzie zadawał nam program.

Scanner scanner = new Scanner(System.in);

System.out.println("Podaj imię: ");
imie = scanner.next();

System.out.println("Podaj wiek: ");
wiek = scanner.nextInt();

System.out.println("Podaj pensję: ");
pensja = scanner.nextDouble();

Cały kod programu:

import java.util.Scanner;

class Program {
    public static void main (String args[]) {
		System.out.println("Dzisiaj jest piękny dzień.".length());

		// deklaracja zmiennych
		String imie;
		int wiek;
		double pensja;
	 
		// inicjalizacja zmiennych, poprzez wczytanie z klawiatury
		Scanner scanner = new Scanner(System.in);

		System.out.println("Podaj imię: ");
		imie = scanner.next();

		System.out.println("Podaj wiek: ");
		wiek = scanner.nextInt();

		System.out.println("Podaj pensję: ");
		pensja = scanner.nextDouble();

		System.out.println("Imię "+imie);
		System.out.println("Wiek "+wiek);
		System.out.println("Pensja "+pensja);
    }
}
java kompilacja z konsoli
Wywołanie programu.

Mamy to!

Zmodyfikujmy program sprawdzający długość tekstu. Zróbmy zmianę, która spowoduje, że sprawdzanie długości tekstu, nie będzie wymagało zmian w kodzie i rekompilacji projektu.

Ćwiczenie 2. Zmodyfikuj kod projektu w taki sposób, aby tekst był wczytywany z klawiatury.

Kod odpowiedzialny za wyświetlenie długości tekstu wyglądał w następujący sposób:

System.out.println("Dzisiaj jest piękny dzień.".length());

Wczytajmy ten tekst z klawiatury i przechowajmy w zmiennej. Wykorzystamy do tego metodę nextLine(), która sczytuje całą linię. Metoda next() sczytywała tylko jedno słowo.

Dodatkowo musimy, zabezpieczyć się przed sczytaniem nowej linii z poprzedniego zapytania, wstawimy zatem dodatkowe scanner.nextLine();

System.out.print("Wprowadź tekst: ");
String tekst = scanner.nextLine();

// obliczenie długości tekstu i przypisanie do zmiennej
int dlugoscTekstu = tekst.length();

// wyświetlenie informacji o długości
System.out.println("Podany tekst ma długość: "+dlugoscTekstu);

Cały program wygląda tak:

import java.util.Scanner;
 
class Program {
    public static void main (String args[]) {
 
        // deklaracja zmiennych
        String imie;
        int wiek;
        double pensja;
      
        // inicjalizacja zmiennych, poprzez wczytanie z klawiatury
        Scanner scanner = new Scanner(System.in);
 
        System.out.println("Podaj imię: ");
        imie = scanner.next();
 
        System.out.println("Podaj wiek: ");
        wiek = scanner.nextInt();
 
        System.out.println("Podaj pensję: ");
        pensja = scanner.nextDouble();
 
        System.out.println("Imię "+imie);
        System.out.println("Wiek "+wiek);
        System.out.println("Pensja "+pensja);

        scanner.nextLine();
         
        System.out.print("Wprowadź tekst: ");
        String tekst = scanner.nextLine();
 
        // obliczenie długości tekstu i przypisanie do zmiennej
        int dlugoscTekstu = tekst.length();
 
        // wyświetlenie informacji o długości
        System.out.println("Podany tekst ma długość: "+dlugoscTekstu);
    }
}
scanner java

Do ponownego uruchomienia programu wystarczy wywoływać komendę java Program.

Tym sposobem poznaliśmy zmienne, typy oraz klasę Scanner. A teraz zadanie dla Ciebie.

Zadanie 1. Napisz program przyjmujący: nazwa samochodu, marka, cena, rok produkcji. Przechowaj dane w zmiennej. Wyświetl dane w następujacy sposób:
—— samochód ——————-
— nazwa: wartość
— marka: wartość
— cena: wartość
— rok produkcji: wartość
——————————————-
Jako wartość, rozumiemy daną wprowadzoną z klawiatury.

Powodzenia ! 😀

Daj znać w komentarzach jak Ci poszło 🙂

Subscribe
Powiadom o
guest

3 komentarzy
najstarszy
najnowszy oceniany
Inline Feedbacks
View all comments
Tomasz
Tomasz
2 lat temu
import java.util.Scanner;

public class Program {
    public static void main(String[] args) {
        // deklaracja zmiennych
        String nazwa, marka;
        double cena;
        int rokProdukcji;

        // inicjalizacja zmiennych, poprzez wczytanie z klawiatury
        Scanner scanner = new Scanner(System.in);

        System.out.println("Podaj nazwę modelu samochodu: ");
        nazwa = scanner.next();

        System.out.println("Podaj markę samochodu : ");
        marka = scanner.next();

        System.out.println("Podaj cenę samochodu: ");
        cena = scanner.nextDouble();

        System.out.println("Podaj rok produkcji: ");
        rokProdukcji = scanner.nextInt();

        System.out.println("");
        System.out.println("—— samochód ——————-");

        System.out.println("-nazwa: " + nazwa);
        System.out.println("-marka:  " + marka);
        System.out.println("-cena:  " + cena);
        System.out.println("-rok produkcji:  " + rokProdukcji);
        System.out.println("--------------------------------");

        scanner.close();

    }
}
Bartosz
Bartosz
2 lat temu
Reply to  Tomasz

Pytanie: po co scanner.close();
czy to cokolwiek zmienia w działaniu programu

Last edited 2 lat temu by Bartosz