CodeGym /Blog Java /rawak /Kelas Pengimbas Java
John Squirrels
Tahap
San Francisco

Kelas Pengimbas Java

Diterbitkan dalam kumpulan
Hai! Pelajaran kita hari ini akan menjadi istimewa! Dalam pelajaran hari ini, kita akan bercakap tentang Kelas Pengimbas Java. Sebelum ini, proses menyelesaikan tugas dan menulis program adalah mudah: kami menulis beberapa kod, menjalankan main()kaedah, program melakukan apa yang diperlukan, dan kami selesai. Tetapi kini semuanya akan berubah! Hari ini kita akan belajar bagaimana untuk benar-benar berinteraksi dengan program: kita akan mengajarnya cara untuk bertindak balas terhadap tindakan kita! Sebelum kita mula menganalisis kod, pernahkah anda berurusan dengan peranti seperti pengimbas? Mungkin. Bahagian dalam pengimbas agak rumit, tetapi idea asas tentang cara ia berfungsi adalah sangat mudah: ia membaca data yang diberikan pengguna (seperti pasport atau polisi insurans) dan menyimpan maklumat ini dalam ingatan (contohnya, sebagai imej ). Hari ini anda akan mencipta pengimbas anda sendiri! Sudah tentu, ia tidak akan dapat mengendalikan dokumen kertas, tetapi teks tidak akan menjadi masalah untuknya :) Jom!

Kelas Pengimbas Java

Kelas pengimbas - 1Pertama sekali, kita mesti berkenalan dengan kelas java.util.Scanner . Fungsinya sangat mudah. Seperti pengimbas sebenar, ia membaca data daripada sumber yang anda tentukan. Contohnya, rentetan, fail, konsol. Seterusnya, ia mengiktiraf maklumat dan memprosesnya dengan sewajarnya. Berikut ialah contoh paling mudah:

public class Main {

   public static void main(String[] args) {

       Scanner scanner = new Scanner("It matters not how strait the gate,\n" +
               "How charged with punishments the scroll,\n" +
               "I am the master of my fate,\n" +
               "I am the captain of my soul");
       String s = scanner.nextLine();
       System.out.println(s);
   }
}
Kami telah mencipta objek pengimbas dan menentukan sumber datanya (rentetan teks). Kaedah nextLine () mengakses sumber data (teks kami dengan quatrain), mencari baris seterusnya yang belum dibaca (iaitu baris pertama dalam kes ini), dan mengembalikannya. Kemudian kami memaparkannya pada konsol: Output konsol:

It matters not how strait the gate,
Kita boleh menggunakan kaedah nextLine() beberapa kali dan memaparkan keseluruhan petikan puisi:

public class Main {

   public static void main(String[] args) {

       Scanner scanner = new Scanner("It matters not how strait the gate,\n" +
               "How charged with punishments the scroll,\n" +
               "I am the master of my fate,\n" +
               "I am the captain of my soul");
       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 mengambil satu langkah ke hadapan dan membaca baris seterusnya. Output program dipaparkan:

It matters not how strait the gate, 
How charged with punishments the scroll, 
I am the master of my fate, 
I am the captain of my soul
Seperti yang telah kami katakan, sumber data pengimbas tidak semestinya rentetan. Sebagai contoh, ia boleh menjadi konsol. Beberapa berita menarik untuk anda: sebelum ini, kami hanya memaparkan data di sana, tetapi kini kami akan membaca data dari papan kekunci! Mari lihat apa lagi yang dilakukan oleh kelas Pengimbas :

public class Main {

   public static void main(String[] args) {

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

       int number = sc.nextInt();

       System.out.println("Thanks! You entered the number " + number);

   }
}
Kaedah nextInt () membaca dan mengembalikan nombor yang dimasukkan. Dalam program kami, kami menggunakannya untuk memberikan nilai kepada nombor pembolehubah . Ia sudah lebih seperti pengimbas sebenar! Program ini meminta pengguna memasukkan sebarang nombor. Selepas pengguna melakukan ini, program mengucapkan terima kasih kepada pengguna, memaparkan hasilnya, dan selesai. Tetapi kita masih mempunyai masalah yang serius. Pengguna mungkin membuat kesilapan dan memasukkan sesuatu yang salah. Berikut ialah contoh di mana program semasa kami berhenti berfungsi:

public class Main {

   public static void main(String[] args) {

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

       int number = sc.nextInt();

       System.out.println("Thanks! You entered the number " + number);

   }
}
Mari cuba masukkan rentetan "CodeGym" sebaliknya nombor: Output konsol:

Enter a number: 
CodeGym 
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
Eh, oh. Kami menghadapi masalah besar -_- Untuk mengelakkan situasi sedemikian, kami perlu mencari cara untuk mengesahkan data yang dimasukkan oleh pengguna. Sebagai contoh, jika pengguna memasukkan apa-apa selain nombor, adalah baik untuk memaparkan amaran bahawa maklumat yang dimasukkan bukan nombor. Dan jika maklumat itu baik, maka kami boleh mengesahkannya. Tetapi ini memerlukan kita untuk "melihat ke masa hadapan" untuk melihat perkara yang akan datang dalam strim kita. Bolehkah Pengimbas melakukan ini? Dan bagaimana! Dan ia mempunyai banyak kaedah untuk melakukan ini: hasNextInt() — Kaedah ini menyemak sama ada bahagian data input seterusnya ialah nombor (mengembalikan benar atau salah, mengikut kesesuaian). hasNextLine() — Kaedah ini menyemak sama ada bahagian input seterusnya ialah rentetan. hasNextByte() ,hasNextShort() , hasNextLong() , hasNextFloat() , hasNextDouble() — Semua kaedah ini melakukan semakan yang serupa untuk jenis data yang tinggal. Mari cuba ubah program membaca nombor kami:

public class Main {

   public static void main(String[] args) {

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

       if (sc.hasNextInt()) {
           int number = sc.nextInt();
           System.out.println("Thanks! You entered the 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. Dan ia memaparkan pengesahan hanya jika ia. Jika input tidak melepasi semakan, program mengambil perhatian dan meminta pengguna untuk mencuba lagi. Pada asasnya, anda boleh berkomunikasi dengan objek Pengimbas dan mengetahui terlebih dahulu jenis data yang menanti anda. Nombor, rentetan, atau sesuatu yang lain? Nombor? Dan jenis apa? An int , short , long ?" Fleksibiliti ini memberi anda peluang untuk membina logik program yang bergantung pada tingkah laku pengguna. Kita harus mengambil perhatian kaedah penting lain: useDelimiter() . Anda menghantar rentetan kepada kaedah ini. Rentetan mengandungi aksara yang anda mahu gunakan sebagai pemisah atau pembatas. Sebagai contoh, katakan kami tiba-tiba berminat dengan puisi Jepun, dan memutuskan untuk menggunakan pengimbas kami untuk membaca beberapa haiku yang ditulis oleh penyair hebat Matsuo Bashō. Walaupun tiga ayat yang berbeza disampaikan kepada kita sebagai satu rentetan yang janggal, kita boleh memisahkannya dengan mudah dan menjadikannya cantik:

public class Main {
   public static void main(String[] args) {
       Scanner scan = new Scanner("On a withered branch'" +
               "A crow has alighted.'" +
               "Nightfall in autumn." +
               "''***''" +
               "Such a moon above,'" +
               "Like a tree cut at the root:'" +
               "he fresh cut is white." +
               "''***''" +
               "How the river floods!'" +
               "A heron wanders on short legs,'" +
               "Knee-deep in the water.");

       scan.useDelimiter("'");

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

       scan.close();
   }
}
Kami menggunakan "\ n /*/*/*" (karakter baris baharu dan tiga asterisk) sebagai pembatas kami. Akibatnya, kami mempunyai output konsol yang cantik, sama seperti dalam buku:
On a withered branch 
A crow has alighted. 
Nightfall in autumn. 

*** 

Such a moon above, 
Like a tree cut at the root: 
The fresh cut is white. 

*** 

How the river floods! 
A heron wanders on short legs, 
Knee-deep in the water.
Contoh ini mempunyai satu lagi kaedah yang mesti kita nyatakan: close() . Seperti mana-mana objek yang berfungsi dengan aliran I/O, pengimbas mesti ditutup apabila ia selesai supaya ia berhenti menggunakan sumber komputer. Jangan lupa kaedah close() !

public class Main {

   public static void main(String[] args) {

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

       int number = sc.nextInt();

       System.out.println("Thanks! You entered the number " + number);
      
       sc.close(); // Now we've done everything right!

   }
}
Itu sahaja! Seperti yang anda lihat, kerana ia sangat membantu, kelas Pengimbas agak mudah digunakan! :) Untuk mengukuhkan apa yang anda pelajari, kami cadangkan anda menonton pelajaran video daripada Kursus Java kami
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION