Java/פלט וקלט
כאשר כותבים תוכנית, קרוב לוודאי שנזדקק למידע אותו ייתן המשתמש, כמו גם אפשרות להעביר מידע אל המשתמש. המונחים פלט וקלט הם מונחים בסיסיים במדעי המחשב: קלט הוא מידע אותו מקבל המחשב מהמשתמש באמצעים כמו מקלדת, עכבר וכדומה. פלט הוא המידע אותו נותן המחשב למשתמש באמצעים כמו מסך המחשב, מדפסת וכדומה. בפרק זה נעסוק בצורות הבסיסיות של הקלט והפלט, דהיינו - קליטת נתונים פשוטים באמצעות המקלדת, והדפסת נתונים על המסך.
פלט
עריכהכבר בפרקים הקודמים נתקלתם בפקודה System.out.println(...)
, שמדפיסה על המסך את מה שנמצא בין הסוגריים ויורדת שורה. פקודה דומה היא System.out.print(...)
, שמבצעת פעולה זהה, אך בלא להעביר שורה לבסוף. המשתמע מכך הוא ששורות הקוד
System.out.print("Hello ");
System.out.print("World");
יציגו את התוצאה
ולא
World
אך אם נשתמש בפקודה System.out.println היה נכתב
World
קלט שאילת שאלה
עריכהישנן דרכים רבות לקבל קלט: קריאה מקבצים, פעולות עכבר שמבצע המשתמש, וכן הלאה. בשלב זה נשתמש בקלט בסיסי שנותן המשתמש משורת הפקודה, כלומר - בשלב בו אמור המשתמש לתת קלט, תחכה התוכנית שהמשתמש יכתוב קלט רצוי, ואחרי שהוכנס - תמשיך את פעולתה (בדרך כלל - תוך שימוש בקלט). אם עובדים עם Java משורת הפקודה של מערכת ההפעלה הדבר ברור. כאשר עובדים עם eclipse, יש לעבור לחלון ה-Console (המקביל לשורת הפקודה), בזמן ריצת התוכנית, ושם להכניס את הקלט הרצוי. כדי ליישם זאת נצטרך ללמוד מספר מונחים חדשים:
ייבוא מחלקות
עריכהבדומה ל-C, גם Java בנויה בצורה מודולרית ומציעה חבילות רבות המרחיבות את ההיצע הקטן של הפקודות המובנות. עם הזמן נכיר חבילות רבות. כרגע נשתמש בחבילה בסיסית הנקראת java.util, ובפרט - במחלקה בשם Scanner. כדי להשתמש במחלקה זו, אפשר לייבא אותה באמצעות הפקודה
import java.util.Scanner;
.
אפשר גם לייבא את כל חבילת java.util בפקודה אחת, באמצעות
import java.util.*;
כדאי לדעת: יש גם דרך נוספת להשתמש במחלקה חיצונית מבלי לייבא אותה, באמצעות פנייה ישירה למחלקה. במקרה זה היא לא נוחה ולא נשתמש בה, אך נעסוק בה בהמשך. |
את פקודת הייבוא יש לכתוב בראש התוכנית, עוד לפני ההכרזה על המחלקה (כלומר, לפני הפקודה public class ...
).
אובייקטים ובנאים מספר רנדומלי
עריכהבשלב זה עדיין לא נעסוק באובייקטים ובבנאים (Constructors), ובשורות הבאות נשתמש בהם מבלי להבין לגמרי את משמעותם. בתוך מתודת ה-main נכתוב את השורות הבאות:
Scanner s = new Scanner(System.in);
שורה זו מאתחלת אובייקט מטיפוס Scanner בשם s, המקבל כפרמטר את זרם הקלט. כאמור - בשלב זה עדיין לא נמצאים בידינו הכלים להבין שורה זו.
int i;
i = s.nextInt();
השורה הראשונה כבר מוכרת לנו: היא מאתחלת משתנה מטיפוס int בשם i. השורה השנייה קולטת לתוך i את הערך אותו מכניס המשתמש. השורה הזאת קוראת לScanner s שהגדרנו קודם לקלוט את הint הבא. השורה משתנה בהתאם לשם הScanner. למשל אם נקרא לScanner בשם input כלומר נגדיר אותו קודם לכן בשורה Scanner input = new Scanner(System.in) השורה שבא נשתמש כדי לקלוט לתוך i מספר תהיה ()input.nextInt
שימו לב: מה לדעתכם יקרה אם יכניס המשתמש מספר לא שלם, או גרוע מכך - אות? בדקו! |
לקליטת סטרינג נשתמש בשורה ()s.nextLine ובשורה נשתמש אחרי קליטה לתוך משתנים בסיסיים (לדוגמא int ) אחרי השורה (בint) שמגדיריםלתוך המשתנה_()s.nextInt
כלומר שורות הקוד יראו:
()int i = s.nextInt
()s.nextLine
אם לא נכתוב ככה יהיה לנו באג בתוכנה.
כמו כן השורה הראשונה משתנה, במישתנים הבסיסיים היא תהיה: השם של הScanner.next ואז שם הטיפוס באות גדולה. כפי שכבר ראינו בint השורה תהיה s.nextInt בdouble היא תהיה s.nextDouble וכן הלאה...
ישנה עוד מחלקה שבה נוכל להשתמש שהיא מחלקה של מספרים אקראיים את המחלקה נזמן באמצעות import java.util.Random;
.
וכדי להכריז על אובייקט מהמחלקה נשתמש בשורה
Random r = new Random();
צורות שימוש
עריכהלאחר אתחול אובייקט Scanner, ניתן לקלוט בעזרתו סוגים שונים של משתנים. בדוגמה הקודמת ראינו כיצד קולטים משתנה מטיפוס int. באופן זהה ניתן לקלוט גם משתנים מטיפוסים אחרים. בהנחה שמאותחל אובייקט Scanner בשם s:
- הפקודה s.next(); תחזיר מחרוזת, כלומר - תאפשר לנו לקלוט משתנה מטיפוס String.
לאובייקט מסוג random גם יש פקודה שנקראת nextInt(), שמאפשרת לקבל מספרים שלמים (כי זה int) אקראיים מאפס עד המספר שבחרת פחות אחד. אם לא תכתבו מספר בסוגריים, המחשב ייתן מספר מסוג int.
אם נרצה מספר רנדומלי בין 0-9 אנו נוסיף את התחום בתוך הסוגריים כך:
num=r.nextInt(10);
בפלט המחשב ייתן לנו מספר אקראי בין 0-9. כדי לקבל מספר בין 1 ל-10 נוסיף 1 כמו בדוגמא:
num=r.nextInt(10)+1;
כדי לקבל תחום מספרים אחר פשוט נוסיף מספר אחר. למשל, כדי לקבל מספר אקראי בין 2-10 נכתוב:
num=r.nextInt(9)+2;
שימו לב: מה קרה פה בתכנית. |
עכשיו תורכם: מה לדעתכם הנוסחה לתחום של מספרים אקראיים? |
דוגמה
עריכהנציג כעת תוכנית קצרה המשתמשת בפקודות הקלט והפלט שלמדנו עד כה:
import java.util.*;
public class IOExample {
public static void main(String[] args) {
int a, b, c;
Scanner s = new Scanner(System.in);
System.out.println("Enter a number: ");
a=s.nextInt();
System.out.println("Enter another number: ");
b=s.nextInt();
c=a+b;
System.out.println(c);
}
}
עכשיו תורכם: מה לדעתכם עושה התוכנית? כיצד תוכלו לשנות אותה כך שהיא תייצר עוד משתנה רנדומלי ותציג את מכפלתם של כל המשתנים? |
נספח
עריכה
הפרק הקודם: משתנים |
פלט וקלט | הפרק הבא: מחרוזות |