JavaRush /Blog Java /Random-MS /Kelas pengimbas di Jawa

Kelas pengimbas di Jawa

Diterbitkan dalam kumpulan
hello! Pelajaran kita hari ini akan menjadi istimewa! Sebelum ini, apabila menyelesaikan masalah dan menulis atur cara, algoritma adalah mudah: kami menulis beberapa kod, menjalankan kaedah main() , atur cara melakukan apa yang diperlukan daripadanya, dan keluar. Tetapi kini semuanya akan berubah! Hari ini kita akan belajar bagaimana untuk benar-benar berinteraksi dengan program: kita akan mengajarnya untuk bertindak balas terhadap tindakan kita! Anda mungkin sudah faham ke mana kami pergi dengan ini. Kami akan menumpukan kuliah ini kepada analisis terperinci tentang salah satu kelas bahasa Java - Pengimbas. Kelas ini berguna jika anda perlu membaca data yang dimasukkan oleh pengguna. Sebelum kita meneruskan pembelajaran kod, beritahu saya, pernahkah anda menjumpai peranti seperti pengimbas? Pasti ya. Struktur dalaman pengimbas agak rumit, tetapi intipati kerjanya agak mudah: ia membaca data yang dimasukkan pengguna ke dalamnya (contohnya, pasport atau polisi insurans) dan menyimpan maklumat yang dibaca dalam ingatan (contohnya , dalam bentuk imej). Jadi, hari ini anda akan mencipta pengimbas anda sendiri! Sudah tentu, dia tidak boleh mengendalikan dokumen, tetapi dia boleh mengendalikan maklumat teks dengan baik :) Jom!Kelas pengimbas - 1

Kelas Pengimbas Java

Perkara pertama dan paling penting yang perlu kita kenali ialah kelas java.util.Scanner. Fungsinya sangat mudah. Seperti pengimbas sebenar, ia membaca data daripada sumber yang anda tentukan untuknya. Contohnya, dari baris, dari fail, dari konsol. Kemudian ia mengiktiraf maklumat ini dan memprosesnya mengikut keperluan. Mari kita berikan contoh paling mudah:
public class Main {

   public static void main(String[] args) {

       Scanner scanner = new Scanner("I love you, Petra creation,\n" +
               "I love your stern, slim look,\n" +
               "Neva sovereign current,\n" +
               "Coastal granite");
       String s = scanner.nextLine();
       System.out.println(s);
   }
}
Kami mencipta objek pengimbas dan menentukan sumber data untuknya (rentetan dengan teks). Kaedah ini nextLine()mengakses sumber data (teks kami dengan kuatrain), mencari di sana baris seterusnya yang belum dibaca (dalam kes kami, yang pertama) dan mengembalikannya. Selepas itu kami mengeluarkannya ke konsol: Output konsol:

Люблю тебя, Peterа творенье,
Kita boleh menggunakan kaedah ini nextLine()beberapa kali dan mengeluarkan keseluruhan bahagian puisi:
public class Main {

   public static void main(String[] args) {

       Scanner scanner = new Scanner("I love you, Petra creation,\n" +
               "I love your stern, slim look,\n" +
               "Neva sovereign current,\n" +
               "Coastal granite");
       String s = scanner.nextLine();
       System.out.println(s);
       s = scanner.nextLine();
       System.out.println(s);
       s = scanner.nextLine();
       System.out.println(s);
       s = scanner.nextLine();
       System.out.println(s);
   }
}
Setiap kali pengimbas kami akan mengambil satu langkah ke hadapan dan membaca baris seterusnya. Hasil program adalah output ke konsol:

Люблю тебя, Peterа творенье,
Люблю твой строгий, стройный вид,
Невы державное теченье,
Береговой ее гранит
Seperti yang telah kami katakan, sumber data untuk pengimbas boleh bukan sahaja rentetan, tetapi juga, sebagai contoh, konsol. Berita penting untuk kami: jika sebelum ini kami hanya mengeluarkan data di sana, kini kami akan memasukkan data dari papan kekunci! Mari lihat apa lagi yang boleh dilakukan oleh kelas Pengimbas :
public class Main {

   public static void main(String[] args) {

       Scanner sc = new Scanner(System.in);
       System.out.println("Enter the number:");

       int number = sc.nextInt();

       System.out.println("Thank you! You entered a number" + number);

   }
}
Kaedah nextInt()membaca dan mengembalikan nombor yang dimasukkan. Dalam program kami, ia digunakan untuk menetapkan nilai kepada pembolehubah number. Ini kelihatan lebih seperti pengimbas sebenar! Program ini meminta pengguna memasukkan sebarang nombor ke dalam baris. Selepas pengguna melakukan ini, program mengucapkan terima kasih kepadanya, memaparkan hasil kerjanya pada konsol dan berakhir. Tetapi kita masih mempunyai satu masalah yang serius. Pengguna mungkin membuat kesilapan dan memasukkan sesuatu yang salah. Berikut ialah contoh apabila program semasa kami akan berhenti berfungsi:
public class Main {

   public static void main(String[] args) {

       Scanner sc = new Scanner(System.in);
       System.out.println("Enter the number:");

       int number = sc.nextInt();

       System.out.println("Thank you! You entered a number" + number);

   }
}
Mari cuba masukkan rentetan “JavaRush” dan bukannya nombor: Output konsol:
Enter the number:
JavaRush
Exception in thread "main" java.util.InputMismatchException
  at java.util.Scanner.throwFor(Scanner.java:864)
  at java.util.Scanner.next(Scanner.java:1485)
  at java.util.Scanner.nextInt(Scanner.java:2117)
  at java.util.Scanner.nextInt(Scanner.java:2076)
  at Main.main(Main.java:10)

Process finished with exit code 1
Oops, semuanya buruk -_- Untuk mengelakkan situasi sedemikian, kita perlu mencari cara untuk mengesahkan data yang dimasukkan oleh pengguna. Sebagai contoh, pengguna memasukkan apa-apa selain nombor, adalah baik untuk memaparkan amaran dalam konsol bahawa maklumat yang dimasukkan bukan nombor, dan jika semuanya teratur, paparkan teks pengesahan. Tetapi untuk melakukan ini, kita sebenarnya perlu "melihat ke masa depan" - mengetahui perkara seterusnya dalam aliran kita. Bolehkah Pengimbas di Java melakukan ini? Macam mana dia boleh! Dan untuk ini ia mempunyai keseluruhan kumpulan kaedah: hasNextInt()- kaedah menyemak sama ada bahagian seterusnya data yang dimasukkan adalah nombor atau tidak (mengembalikan benar atau salah, masing-masing). hasNextLine()— menyemak sama ada sekeping data seterusnya ialah rentetan. hasNextByte(), hasNextShort(), hasNextLong(), hasNextFloat(), hasNextDouble()- semua kaedah ini melakukan perkara yang sama untuk jenis data lain. Mari cuba ubah program kami untuk membaca nombor:
public class Main {

   public static void main(String[] args) {

       Scanner sc = new Scanner(System.in);
       System.out.println("Enter the number:");

       if (sc.hasNextInt()) {
           int number = sc.nextInt();
           System.out.println("Thank you! You entered a number" + number);
       } else {
           System.out.println("Sorry, but this is clearly not a number. Restart the program and try again!");
       }

   }
}
Sekarang program kami menyemak sama ada aksara seterusnya yang dimasukkan ialah nombor atau tidak. Dan hanya jika ya, ia memaparkan pengesahan. Jika input tidak lulus ujian, program melihat ini dan meminta anda mencuba lagi. Pada asasnya, anda boleh berkomunikasi dengan objek Pengimbas dan mengetahui terlebih dahulu jenis data yang diharapkan. “Hei, pengimbas, apa seterusnya? Nombor, rentetan, atau sesuatu yang lain? Nombor? Dan yang mana satu - int, short, long?” Fleksibiliti ini memberi anda peluang untuk membina logik program anda bergantung pada tingkah laku pengguna. Kaedah penting lain yang patut diberi perhatian ialah useDelimiter(). Kaedah ini menghantar rentetan yang anda mahu gunakan sebagai pembatas. Sebagai contoh, kami tiba-tiba berminat dengan puisi Jepun dan memutuskan untuk menggunakan pengimbas untuk membaca beberapa haiku penyair hebat Matsuo Basho. Walaupun tiga ayat yang berbeza diberikan kepada kita dalam satu baris yang kekok, kita boleh memisahkannya dengan mudah dan memformatnya dengan baik:
public class Main {
   public static void main(String[] args) {
       Scanner scan = new Scanner("On a Bare Branch" +
               "Raven sits alone.'" +
               "Autumn evening." +
               "''***''" +
               "There's such a moon in the sky,'" +
               "Like a tree cut down at the root:'" +
               "A fresh cut turns white." +
               "''***''" +
               "How the river has overflowed!" +
               "The heron wanders on short legs,'" +
               "Knee-deep in water.");

       scan.useDelimiter("'");

       while (scan.hasNext()) {
           System.out.println(scan.next());
       }

       scan.close();
   }
}
Kami menggunakan kaedah useDelimeter() kelas Pengimbas sebagai pemisah baris : ia bertanggungjawab untuk membahagikan data masuk kepada bahagian. Dalam kes kami, petikan tunggal ( "'" ) diluluskan sebagai hujah dan digunakan untuk memisahkan rentetan . Teks yang mengikuti petikan ini muncul pada baris baharu kerana dalam gelung while kita menggunakan kaedah println() kelas Sistem untuk membaca data. Akibatnya, kita akan mempunyai output yang cantik dalam konsol, sama seperti dalam buku:
На голой ветке
Ворон сидит одиноко.
Осенний вечер.

*** 
 
В небе такая луна,
Словно дерево спилено под корень:
Белеет свежий срез.

*** 
 
Как разлилась река!
Цапля бредет на коротких ножках,
По колено в воде.
Dalam contoh yang sama, terdapat satu lagi kaedah yang mesti anda perhatikan - close(). Seperti mana-mana objek yang berfungsi dengan strim I/O, pengimbas harus ditutup apabila ia menyelesaikan kerjanya supaya ia tidak lagi menggunakan sumber komputer kita. Jangan lupa kaedahnya close()!
public class Main {

   public static void main(String[] args) {

       Scanner sc = new Scanner(System.in);
       System.out.println("Enter the number:");

       int number = sc.nextInt();

       System.out.println("Thank you! You entered a number" + number);

       sc.close();//Now we did everything right!

   }
}
Itu sahaja! Seperti yang anda lihat, kelas Pengimbas agak mudah digunakan dan sangat berguna! :)
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION