1. Konsoldan oxuma, System.in
Əvvəlki mühazirələrdə ekrana çıxış əmrləri ilə tanış olmuşduq. Bunun üçün biz System.out
obyektindən və onun print()
və println()
metodlarından istifadə etmişdik. Sadə və rahat.
Amma, yəqin ki, artıq siz də təxmin edirsiniz, yalnız ekrana çıxışla kifayətlənmək olmur. Əksər proqramların məqsədi istifadəçi üçün faydalı bir şey etməkdir. Buna görə də çox vaxt istifadəçilərin klaviyaturadan məlumat daxil edə bilməsi tələb olunur.
Çıxış üçün olduğu kimi, giriş üçün də xüsusi bir obyekt var — System.in
. Amma, bizim üçün təəssüf ki, bu obyekt o qədər də rahat deyil. Bu obyekt hər dəfə bir simvol olmaqla klaviyaturadan məlumat oxumağa imkan verir.
Buna görə də biz System.in
obyekti ilə birlikdə bizə lazım olan hər şeyi təmin edən başqa bir sinifdən istifadə edəcəyik. Javada hər vəziyyət üçün siniflər çoxdan mövcuddur. Onlardan biri ilə indi tanış olacağıq.
2. Scanner
sinfi
Scanner
sinfi (java.util.Scanner
tam adı ilə) müxtəlif mənbələrdən: konsol, fayllar, internetdən məlumat oxuya bilir. Əgər biz onun klaviaturadan məlumat oxumasını istəyiriksə, ona System.in
obyektini parametr olaraq – məlumat mənbəyi kimi ötürməliyik. Scanner
tipində obyekt özü başa düşəcək, nə etmək lazımdır.
Klaviaturadan məlumat oxuma prosesi Scanner
tipli obyekt vasitəsilə təxminən belə görünəcək:
Kod | İzah |
---|---|
|
Scanner sinfinin obyektini yaradırıq.Klaviaturadan mətn sətirini oxuyuruq. Klaviaturadan ədəd oxuyuruq. |
Çətin görünmür, amma əslində hər şey bu qədər sadədirmi?
Düşünürəm ki, artıq bir çox suallarınız var və indi biz onlara cavab verəcəyik.
Ancaq əvvəlcə Scanner
sinfindən istifadə edilən tam proqram nümunəsini göstərək:
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("Ad: " + name);
System.out.println("Yaş: " + age);
}
}
3. Scanner
obyektinin yaradılması
İlk sual — bu nə olan şey Scanner console = new Scanner(System.in);
?
Bu cür sətir çaşdırıcı görünə bilər, amma siz daim buna oxşar şeylərlə qarşılaşacaqsınız. Deməli, düşünürəm ki, artıq burada yazılanları izah etməyin vaxtıdır.
Əvvəlcə mətn dəyişəni yaratmağımıza nəzər yetirək:
String str = "mətn";
Əvvəl dəyişənin tipini (String
) yazırıq, sonra onun adını (str
) və sonunda isə bərabərlik işarəsindən sonra qiymətini göstəririk.
Bizim qəribə sətirimizdə də mahiyyətcə eyni şeydir:
Scanner console = new Scanner(System.in);
Scanner
tipli dəyişənin elan olunması və ilkinləşdirilməsi
Bərabərlik işarəsindən sola olan bütün yazılanlar — bu Scanner
tipli və adı console
olan dəyişənin elan olunmasıdır. Onu, məsələn, s
və ya scanner
, ya da hətta keyboard
adlandıra bilərdik. O zaman kod belə görünərdi:
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();
Düşünürəm ki, indi hər şey daha da aydın oldu.
Və bərabərlik işarəsindən sağdakı kod bir az daha mürəkkəbdir. Söhbət new Scanner(System.in);
sətrindən gedir. Amma burada da heç bir kosmik şey yoxdur.
Bu kodda biz Java maşınından xahiş edirik: yeni bir obyekt yarat (new
sözü) Scanner
tipli və ona parametri kimi verilən bir şeyi — hansı ki yeni yaradılan Scanner
obyekti məlumatları götürəcək — System.in
obyektini ötür.
Bu sətirin tam icrasından sonra bizdə adı console
olan və Scanner
tipli dəyişən yaranacaq ki, onun köməyi ilə proqramımız klaviaturadan məlumat oxuya biləcək.
4. Metodların çağırışı
Yuxarıda göstərilən nümunədə bizim console
adlı dəyişənimiz Scanner
tipinə malik idi və öz daxilində Scanner
tipində obyektin linkini saxlayırdı.
Bir dəyişənin link verdiyi obyektin metodlarını çağırmaq üçün dəyişənin adından sonra nöqtə qoymaq, ardınca metodun adını və parametrləri yazmaq lazımdır. Bu komandanın ümumi görünüşü aşağıdakı kimidir:
dəyişən.metod(parametrlər);
Nümunələr:
System.out.println("Salam");
System.out.println(1);
Əgər funksiyaya parametrlər ötürməyi planlaşdırmırsınızsa, sadəcə boş mötərizələr yazmaq lazımdır:
dəyişən.metod();
Nümunə:
System.out.println();
5. Konsoldan məlumat daxil etmək
Klaviaturadan məlumat daxil etmək, əgər bizdə Scanner
tipli obyekt varsa, çox asandır.
Klaviaturadan sətir oxumaq üçün komandaya ehtiyac var:
String str = console.nextLine();
Proqram bu sətri icra edərkən dayandırılacaq və istifadəçinin məlumat daxil edib enter düyməsini basmasını gözləyəcək. Bundan sonra istifadəçinin daxil etdiyi məlumat str
dəyişənində saxlanılacaq.
Klaviaturadan tam ədəd oxumaq üçün komandaya ehtiyac var:
int number = console.nextInt();
Burada hər şey əvvəlki komandaya oxşayır. Proqram bu sətri icra edərkən dayandırılacaq və istifadəçinin məlumat daxil edib enter düyməsini basmasını gözləyəcək. Bundan sonra istifadəçinin daxil etdiyi məlumat ədədə çevrilərək number
dəyişənində saxlanılacaq.
Əgər istifadəçi tam ədədə çevrilə bilməyəcək məlumat daxil edərsə, proqramda səhv yaranacaq və o, dayanacaq.
Klaviaturadan kesirli ədəd oxumaq üçün komandaya ehtiyac var:
double number = console.nextDouble();
Bu komanda tam olaraq nextInt()
komandası kimi işləyir, yalnız o yoxlayır ki, daxil edilmiş məlumat double
tipinə çevrilə biləndir.
İki ədəd oxuyan və onların cəmini ekrana çıxaran bir proqram nümunəsi:
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);
}
}
İstifadəçi bir sətrdə bir neçə ədəd daxil edib onları boşluqla ayıra bilər: belə vəziyyət Scanner
klassının metodları tərəfindən düzgün işlənəcəkdir. Lakin ədədlər proqram tərəfindən yalnız istifadəçi Enter
düyməsini basdıqdan sonra oxunacaq.
6. Scanner
sinfinin digər metodları
Bu arada, bunlar Scanner
sinfinin bütün metodları deyildi. Tam siyahı təxminən bu cür görünür:
Metod | Təsvir |
---|---|
|
Məlumatları oxuyur və onları byte tipinə çevirir |
|
Məlumatları oxuyur və onları short tipinə çevirir |
|
Məlumatları oxuyur və onları int tipinə çevirir |
|
Məlumatları oxuyur və onları long tipinə çevirir |
|
Məlumatları oxuyur və onları float tipinə çevirir |
|
Məlumatları oxuyur və onları double tipinə çevirir |
|
Məlumatları oxuyur və onları boolean tipinə çevirir |
|
Bir "söz" oxuyur. Sözlər boşluq və ya enter ilə ayrılır |
|
Bütün sətiri oxuyur |
Hələ oxunmamış məlumatın tipini yoxlamağa imkan verən metodlar da var (hansı metodla onları oxumaq lazım olduğunu bilmək üçün).
Metod | Təsvir |
---|---|
|
Orada byte tipi var? Bu, byte -a çevrilə bilər? |
|
Orada short tipi var? Bu, short -a çevrilə bilər? |
|
Orada int tipi var? Bu, int -a çevrilə bilər? |
|
Orada long tipi var? Bu, long -a çevrilə bilər? |
|
Orada float tipi var? Bu, float -a çevrilə bilər? |
|
Orada double tipi var? Bu, double -a çevrilə bilər? |
|
Orada boolean tipi var? Bu, boolean -a çevrilə bilər? |
|
Orada başqa bir söz var? |
|
Orada başqa bir sətir var? |
7. Sətirdən məlumat daxil etmək
Yuxarıda demişdik ki, Scanner
sinfi müxtəlif mənbələrdən məlumatları oxuya bilir. Bu mənbələrdən biri - mətn sətiri.
Bu təxminən belə görünəcək
String str = "mətn";
Scanner scanner = new Scanner(str);
System.in
obyekti əvəzinə, Scanner
tipində obyekt yaradarkən ona sətir – str
ötürürük. İndi isə scanner
obyekti məlumatları sətirdən oxuyacaq. Nümunə:
Proqramın kodu: | İzah: |
---|---|
|
// a == 10;
// b == 20;
Ekranda bu göstəriləcək: |
GO TO FULL VERSION