CodeGym /בלוג Java /Random-HE /כיתת סורק Java
John Squirrels
רָמָה
San Francisco

כיתת סורק Java

פורסם בקבוצה
היי! השיעור שלנו היום יהיה מיוחד! בשיעור של היום, נדבר על כיתת סורק Java. בעבר, תהליך השלמת המשימות וכתיבת התוכנות היה פשוט: אנחנו כותבים קוד כלשהו, ​​מפעילים את השיטה main() , התוכנה עושה את מה שנדרש וסיימנו. אבל עכשיו הכל ישתנה! היום נלמד איך באמת ליצור אינטראקציה עם התוכנית: נלמד אותה איך להגיב לפעולות שלנו! לפני שנתחיל לנתח את הקוד, האם אי פעם נאלצת להתמודד עם מכשיר כמו סורק? כנראה. החלק הפנימי של הסורק די מסובך, אבל הרעיון הבסיסי של איך הוא עובד הוא פשוט מאוד: הוא קורא נתונים שהמשתמש מספק (כגון דרכון או פוליסת ביטוח) ומאחסן את המידע הזה בזיכרון (למשל, כתמונה ). היום אתה הולך ליצור סורק משלך! כמובן, הוא לא יוכל להתמודד עם מסמכי נייר, אבל טקסט לא יהיה לו בעיה :) בוא נלך!

כיתת סורק של Java

כיתת סורקים - 1בראש ובראשונה, עלינו להכיר את מחלקת java.util.Scanner . הפונקציונליות שלו פשוטה מאוד. כמו סורק אמיתי, הוא קורא נתונים ממקור שאתה מציין. לדוגמה, מחרוזת, קובץ, המסוף. לאחר מכן, הוא מזהה את המידע ומעבד אותו כראוי. הנה הדוגמה הפשוטה ביותר:
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);
   }
}
יצרנו אובייקט סורק וציינו את מקור הנתונים שלו (מחרוזת טקסט). שיטת nextLine() ניגשת למקור הנתונים (הטקסט שלנו עם ריבוע), מוצאת את השורה הבאה שלא נקראה (שהיא השורה הראשונה במקרה זה), ומחזירה אותה. לאחר מכן אנו מציגים אותו בקונסולה: פלט מסוף:

It matters not how strait the gate,
אנו יכולים להשתמש בשיטת nextLine() מספר פעמים ולהציג את קטע השיר כולו:
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);
   }
}
בכל פעם, הסורק שלנו לוקח צעד אחד קדימה וקורא את השורה הבאה. הפלט של התוכנית מוצג:

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
כפי שכבר אמרנו, מקור הנתונים של הסורק לא חייב להיות מחרוזת. לדוגמה, זה יכול להיות הקונסולה. כמה חדשות מרגשות עבורך: בעבר, רק הצגנו שם נתונים, אבל עכשיו נקרא נתונים מהמקלדת! בוא נראה מה עוד עושה מחלקת ה- Scanner :
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);

   }
}
השיטה nextInt() קוראת ומחזירה את המספר שהוזן. בתוכנית שלנו, אנו משתמשים בו כדי להקצות ערך למספר המשתנה . זה כבר יותר כמו סורק אמיתי! התוכנית מבקשת מהמשתמש להזין מספר כלשהו. לאחר שהמשתמש עשה זאת, התוכנית מודה למשתמש, מציגה את התוצאה ומסיימת. אבל עדיין יש לנו בעיה רצינית. המשתמש עלול לטעות ולהזין משהו שגוי. הנה דוגמה שבה התוכנית הנוכחית שלנו מפסיקה לעבוד:
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);

   }
}
בוא ננסה להזין את המחרוזת "CodeGym" במקום מספר: פלט מסוף:
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
או - או. אנחנו בבעיה גדולה -_- כדי להימנע ממצבים כאלה, עלינו למצוא דרך לאמת את הנתונים שהזין המשתמש. לדוגמה, אם המשתמש מזין משהו אחר מלבד מספר, יהיה טוב להציג אזהרה שהמידע שהוזן אינו מספר. ואם המידע בסדר, נוכל לאשר. אבל זה ידרוש מאיתנו "להסתכל אל העתיד" כדי לראות מה מגיע בזרם שלנו. האם סורק יכול לעשות זאת? ואיך! ויש לה שלל שיטות לעשות זאת: hasNextInt() - שיטה זו בודקת אם הנתח הבא של נתוני הקלט הוא מספר (מחזיר אמת או שקר, לפי המתאים). hasNextLine() - שיטה זו בודקת אם נתח הקלט הבא הוא מחרוזת. hasNextByte() , hasNextShort() , hasNextLong() , hasNextFloat() , hasNextDouble() - כל השיטות הללו מבצעות בדיקות דומות עבור סוגי הנתונים הנותרים. בואו ננסה לשנות את תוכנית קריאת המספרים שלנו:
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!");
       }

   }
}
כעת התוכנית שלנו בודקת אם התו הבא שהוזן הוא מספר. והוא מציג אישור רק אם כן. אם הקלט לא עובר את הבדיקה, התוכנית שמה לב ותבקש מהמשתמש לנסות שוב. בעצם, אתה יכול לתקשר עם אובייקט ה-Scanner ולברר מראש איזה סוג נתונים מחכה לך. מספר, מחרוזת או משהו אחר? מספר? ואיזה סוג? An int , short , long ?" גמישות זו נותנת לך את ההזדמנות לבנות לוגיקה של תוכנית שתלויה בהתנהגות המשתמש. כדאי לשים לב לשיטה חשובה נוספת: useDelimiter() . אתה מעביר מחרוזת לשיטה זו. המחרוזת מכילה את תווים שאתה רוצה להשתמש בהם כמפרידים או תוחמים. לדוגמה, נניח שפתאום התעניינו בשירה יפנית, והחלטנו להשתמש בסורק שלנו כדי לקרוא איזה הייקו שנכתב על ידי המשורר הגדול Matsuo Bashō. גם אם יועברו לנו שלושה פסוקים שונים בתור מחרוזת מביכה אחת, נוכל לפצל אותם בקלות ולעבד אותם יפה:
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();
   }
}
אנו משתמשים ב- "\ n /*/*/*" (תו קו חדש ושלוש כוכביות) כמפריד שלנו. כתוצאה מכך, יש לנו פלט קונסולות יפהפה, בדיוק כמו בספרים:
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.
לדוגמא הזו יש שיטה אחת נוספת שעלינו לציין לחלוטין: close() . כמו כל אובייקט שעובד עם זרמי קלט/פלט, הסורק חייב להיות סגור כשהוא נעשה כדי שיפסיק לצרוך את משאבי המחשב. לעולם אל תשכח את שיטת 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!

   }
}
זהו זה! כפי שאתה יכול לראות, עד כמה זה מועיל, כיתת הסורק היא די קלה לשימוש! :) כדי לחזק את מה שלמדת, אנו מציעים לך לצפות בשיעור וידאו מקורס ג'אווה שלנו

קריאה נוספת:

הערות
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION