1. Pagbabasa mula sa console gamitSystem.in

Sa mga nakaraang aralin, nakilala namin ang mga utos para sa pagpapakita ng impormasyon sa screen. Upang gawin ito, ginamit namin ang System.outbagay at print()ang println()mga pamamaraan nito. Ito ay simple at maginhawa.

Ngunit, tulad ng nahulaan mo na, ang pagpapakita ng impormasyon sa screen ay hindi sapat para sa amin. Ang layunin ng karamihan sa mga programa ay gumawa ng isang bagay na kapaki-pakinabang para sa gumagamit. Nangangahulugan iyon na napakadalas na kinakailangan para sa user na makapagpasok ng data mula sa keyboard.

Tulad ng nangyari sa output, mayroon din kaming espesyal na object para sa data input — System.in. Ngunit, sa kasamaang-palad para sa amin, hindi ito maginhawa gaya ng gusto namin. Nagbibigay-daan ito sa amin na basahin ang data mula sa keyboard nang paisa -isa .

Upang mapabuti ito, gagamit kami ng isa pang klase na, kapag ipinares sa System.inbagay, ay magbibigay sa amin ng lahat ng kailangan namin. Sa mahabang panahon ngayon, ang Java ay may mga klase na angkop sa bawat okasyon. At makikilala natin ang isa sa kanila ngayon.


2. Scannerklase

Ang Scannerklase (buong pangalan: java.util.Scanner) ay maaaring magbasa ng data mula sa iba't ibang mapagkukunan, hal. console, mga file, at Internet. Kung gusto nating basahin nito ang data mula sa keyboard, dapat nating ipasa ang System.inobject bilang argumento na magsisilbing data source. At pagkatapos ay malalaman ng bagay ng Scanner kung ano ang gagawin dito.

Ang pagbabasa mula sa keyboard gamit ang isang Scannerbagay ay magiging ganito:

Code Paliwanag
Scanner console = new Scanner(System.in);
String name = console.nextLine();
int age = console.nextInt();
Lumilikha kami ng isang Scannerbagay.
Nagbasa kami ng isang linya ng text mula sa keyboard.
Nagbasa kami ng isang numero mula sa keyboard.

Mukhang madali, ngunit ito ba ay talagang simple?

Sa tingin ko dapat ay mayroon kang isang bungkos ng mga katanungan, at ngayon ay sasagutin natin ang mga ito.

Ngunit una, ipakita natin ang isang halimbawa ng isang kumpletong programa na gumagamit ng Scannerklase:

import java.util.Scanner;
public class Solution {
   public static void main(String[] args)
   {
      Scanner console = new Scanner(System.in);
      String name = console.nextLine();
      int age = console.nextInt();

      System.out.println("Name: " + name);
      System.out.println("Age: " + age);
   }
}

3. Paglikha ng isang Scannerbagay

Ang unang tanong ay ano ang linyang ito Scanner console = new Scanner (System.in);?

Maaaring nakakalito ang linyang ito, ngunit makikita mo ang mga katulad na bagay sa lahat ng oras. Kaya sa tingin namin ay mahalagang ipaliwanag kung ano ang nangyayari dito.

Alalahanin kung paano kami karaniwang gumagawa ng variable na may text:

String str = "text";
Pagdedeklara at pagsisimula ng string variable

Una, isinusulat namin ang uri ng variable ( String), pagkatapos ay ang pangalan nito ( str), at sa wakas, pagkatapos ng equals sign, isinusulat namin ang halaga.

Ang aming nakakagulat na linya ay talagang pareho:

Scanner console = new Scanner(System.in);
Pagdedeklara at pagsisimula ng Scannervariable

Ang lahat sa kaliwa ng equals sign ay ang deklarasyon ng variable na pinangalanan consolena ang uri ay Scanner. Sa halip ay maaari mo itong tawagan s o scannero kahit keyboard. Pagkatapos ang code ay magiging ganito:

Scanner s = new Scanner(System.in);
String name = s.nextLine();
int age = s.nextInt();
Scanner scanner = new Scanner(System.in);
String name = scanner.nextLine();
int age = scanner.nextInt();
Scanner keyboard = new Scanner(System.in);
String name = keyboard.nextLine();
int age = keyboard.nextInt();

Sa tingin ko ay ginagawang mas malinaw ang lahat.

Ngunit ang code sa kanan ng equals sign ay medyo mas kumplikado. I'm now referring to new Scanner(System.in); That said, wala rin namang supernatural na nangyayari dito.

Sa code na ito, sinasabi namin sa Java machine: lumikha ng bagong object (ang newkeyword) na ang uri ay Scanner , pagpasa sa System.inobject bilang data source para sa bagong likhang Scannerobject.

Pagkatapos isagawa ang buong linyang ito, magkakaroon tayo ng Scannervariable na pinangalanan console na gagamitin ng ating program para magbasa ng data mula sa keyboard.


4. Listahan ng mga pamamaraan

Sa halimbawa sa itaas, ang aming Scanner consolevariable ay nag-iimbak ng isang reference sa isang Scannerbagay.

Upang tumawag ng mga pamamaraan sa isang bagay na isinangguni ng isang variable, sumulat ka ng tuldok pagkatapos ng pangalan ng variable, na sinusundan ng pangalan ng pamamaraan at anumang mga argumento. Ang pangkalahatang hitsura ng utos ay ang mga sumusunod:

variable.method(arguments);
Pagtawag ng paraan sa isang bagay na nire-reference ng isang variable

Mga halimbawa:

System.out.println("Hello");
System.out.println(1);

Kung hindi mo planong ipasa ang mga argumento sa isang function, sumulat ka lang ng mga walang laman na panaklong:

variable.method();
Pagtawag ng isang pamamaraan nang hindi nagpapasa ng mga argumento

Halimbawa:

System.out.println();

5. Console input

Kapag mayroon tayong Scannerbagay, madaling makakuha ng data mula sa keyboard.

Upang basahin ang isang linya mula sa keyboard , kailangan mo ang command na ito:

String str = console.nextLine();

Kapag ang pagpapatupad ng programa ay umabot sa linyang ito, ito ay i-pause at maghihintay para sa user na magpasok ng data at pindutin ang enter. Pagkatapos ang lahat ng ipinasok ng user ay nakaimbak sa variable str.

Upang basahin ang isang numero mula sa keyboard , kailangan mo ang command na ito:

int number = console.nextInt();

Lahat dito ay tulad ng naunang utos. Kapag ang pagpapatupad ng programa ay umabot sa linyang ito, ito ay i-pause at maghihintay para sa user na magpasok ng data at pindutin ang enter. Pagkatapos nito, lahat ng ipinasok ng user ay na-convert sa isang numero at nakaimbak sa numbervariable.

Kung ang user ay nagpasok ng data na hindi mako-convert sa isang integer, ang program ay bubuo ng isang error at lalabas.

Para magbasa ng fractional number mula sa keyboard , kailangan mo ang command na ito:

double number = console.nextDouble();

Ang pahayag na ito ay halos kapareho sa isa na may nextInt()pamamaraan, tinitingnan lamang nito na ang ipinasok na data ay maaaring ma-convert sa isang doublenumero.

Halimbawa ng isang program na nagbabasa ng dalawang numero mula sa keyboard at ipinapakita ang kanilang kabuuan sa screen:

import java.util.Scanner;
public class Solution {
   public static void main(String[] args)
   {
      Scanner console = new Scanner(System.in);
      int a = console.nextInt();
      int b = console.nextInt();

      System.out.println(a + b);
   }
}
Tandaan

Ang gumagamit ay maaaring magpasok ng ilang mga numero sa isang linya, na naghihiwalay sa kanila ng mga puwang: alam ng mga pamamaraan ng Scannerklase kung paano ito pangasiwaan. Sabi nga, binabasa lang ng program ang mga numero pagkatapos pindutin ng user ang Enter.



6. Iba pang paraan ng Scannerklase

Sa pamamagitan ng paraan, ang mga pamamaraan sa itaas ay hindi lahat na Scannerinaalok ng klase. Ang kumpletong listahan ng mga pamamaraan ay mukhang ganito:

Pamamaraan Paglalarawan
nextByte()
Nagbabasa ng data at nagko-convert nito sa abyte
nextShort()
Nagbabasa ng data at nagko-convert nito sa ashort
nextInt()
Binabasa ang data at kino-convert ito sa isangint
nextLong()
Nagbabasa ng data at nagko-convert nito sa along
nextFloat()
Nagbabasa ng data at nagko-convert nito sa afloat
nextDouble()
Nagbabasa ng data at nagko-convert nito sa adouble
nextBoolean()
Nagbabasa ng data at nagko-convert nito sa aboolean
next()
Nagbabasa ng isang "token". Ang mga token ay pinaghihiwalay ng mga puwang o pagpindot sa enter key
nextLine()
Binabasa ang isang buong linya

Mayroon ding mga pamamaraan na nagbibigay-daan sa iyong suriin ang susunod na token sa input nang hindi aktwal na kinukuha ito (upang malaman kung aling paraan ang gagamitin upang basahin ito).

Pamamaraan Paglalarawan
hasNextByte()
meron bang byte? Maaari bang ma-convert ang input sa isang byte?
hasNextShort()
meron bang short? Maaari bang ma-convert ang input sa isang short?
hasNextInt()
meron bang int? Maaari bang ma-convert ang input sa isang int?
hasNextLong()
meron bang long? Maaari bang ma-convert ang input sa isang long?
hasNextFloat()
meron bang float? Maaari bang ma-convert ang input sa isang float?
hasNextDouble()
meron bang double? Maaari bang ma-convert ang input sa isang double?
hasNextBoolean()
meron bang boolean? Maaari bang ma-convert ang input sa isang boolean?
hasNext()
May iba pa bang token?
hasNextLine()
May ibang linya ba?

7. Pagbabasa ng data mula sa isang string

Nauna naming nabanggit na ang Scannerklase ay maaaring magbasa ng data mula sa iba't ibang mga mapagkukunan. Ang isa sa mga pinagmumulan ay isang string ng teksto .

Mukhang ganito:

String str = "text";
Scanner scanner = new Scanner(str);

Kapag lumilikha ng Scannerbagay, ipinapasa namin ang string strsa halip na ang System.inbagay. At ngayon ang scannerbagay ay magbabasa ng data mula sa string. Halimbawa:

Program code: Paliwanag:
import java.util.Scanner;
public class Solution {
   public static void main(String[] args)
   {
      String str = "10 20 40 60";
      Scanner scanner = new Scanner(str);
      int a = scanner.nextInt();
      int b = scanner.nextInt();

      System.out.println(a + b);
   }
}


// a == 10; 
// b == 20; 
Ang output ng screen ay magiging:30