[11 בינואר 2008] [46 תגובות]
עד כה ראינו כיצד ניתן להגדיר משתנים(למשל מספרים) ולבצע עליהם פעולות חשבוניות. ניזכר כי המספרים הוגדרו בתוך הקוד, לדוגמה:
int x = 5;
כעת נרצה שהתוכנית תבקש מהמשתמש לכתוב מספר(בעזרת המקלדת), ואת מספר זה נשמור בתוך x. לכן עלינו ללמוד על קליטת נתונים מהמשתמש.
הוספת הרחבות
קיימות פעולות רבות בשפת Java שאינן כלולות בחבילה הבסיסית של Java. אחת מהפעולות הללו היא קליטת קלט מהמשתמש. על מנת לאפשר את הפעולות הללו, יש להוסיף את ההצהרה הבאה בתחילת התוכנית:
import packageName;
כאשר packageName הוא השם של חבילת ההרחבה. במקרה של קליטת קלט מהמשתמש, נוסיף את java.util.Scanner בצורה הבאה:
import java.util.Scanner;
קלט
לאחר שהוספנו את החבילה, אנו יכולים לבצע את הפעולה הבאה:
Scanner console = new Scanner(System.in);
פעולה זו מאתחלת משתנה בשם console מטיפוס Scanner, איתו נוכל לקלוט מידע משמשתמש. למעשה, console הוא אובייקט של המחלקה Scanner, אבל נלמד על מחלקות ובאובייקטים רק בהמשך הדרך. כרגע, צריך לדעת לכלול את השורה הזו.
כעת אנו מוכנים לקלוט מידע. הדבר הראשון שנבקש הוא מספר שלם מהמשתמש, כך:
int x = console.nextInt();
בשורת קוד זה, התבצעו 3 פעולות:
- הגדרנו משתנה בשם x מטיפוס integer (מספר שלם).
- קראנו לפונקציה בשם nextInt הקולטת מידע מהמשתמש.
- סימן השוויון (=) אומר למחשב להכניס את התשובה של המשתמש למשתנה x.
בעת הרצת התוכנית המשתמש יראה סמן מהבהב המסמן לו להקליד מידע בעזרת המקלדת (בסיום הוא ילחץ על המקש Enter). בשלב זה, התוכנית מחכה לקלט והיא לא ממשיכה לרוץ לפקודות הבאות. אם המשתמש יבחר שלא להכניס את המספר - התוכנית תהיה "תקועה" בשורה זו לנצח!
ניתן לקלוט יותר ממספר אחד על ידי שיכפול השורה מספר פעמים (נשתמש במשתנים x, y ו-z על מנת לשמור את המספרים בזיכרון):
int x = console.nextInt(); int y = console.nextInt(); int z = console.nextInt();
לאחר סיום קליטת כל המידע הרצוי, יש להורות על כך לאובייקט console. נעשה זאת כך:
console.close();
התוכנית המלאה נראית כך:
import java.util.Scanner;
import java.util.Scanner; public class input{ public static void main(String[] args){ Scanner console = new Scanner(System.in); int x = console.nextInt(); int y = console.nextInt(); int z = console.nextInt(); console.close(); } }
דוגמה שימושית
נוכל לכתוב תוכנית המקבלת שני מספרים, מחברת אותם ומציגה את התשובה למשתמש:
import java.util.Scanner; public class input{ public static void main(String[] args){ Scanner console = new Scanner(System.in); System.out.println("Please enter a number: "); int x = console.nextInt(); System.out.println("Please enter a number: "); int y = console.nextInt(); int z = x + y; System.out.println("The answer of " + x + " plus " + y + " is: " + z); console.close(); } }
כאשר נריץ את התוכנית, היא תבקש שני מספרים ותשמור אותם ב-x וב-y. לאחר מכן תחבר אותם ואת התוצאה תשמור במשתנה z. לבסוף, התוכנית תדפיס את התוצאה. הנה פלט לדוגמה:
Please enter a number: 3
Please enter another number: 5
The answer of 3 plus 5 is: 8
Press any key to continue...
פקודות קלט נוספות
למדנו את הפקודה על מנת לקלוט מספר שלם. הנה שאר הפקודות עבור הסוגים השונים של המשתנים:
מחרוזות:
String str = console.next();
מספרים עשרוניים:
double f = console.nextDouble();
פלט
כבר למדנו כיצד להדפיס מחרוזות על המסך(וכמו כן כיצד להדפיס מספרים ומשתנים אחרים). כעת נלמד פקודה נוספת לפלט.
שימו לב כי בעזרת System.out.println, כל פעם שהדפסנו משפט, המשפט הבא היה מודפס בשורה נפרדת. בקוד הבא:
System.out.println("Hello"); System.out.println("World");
הפלט יהיה:
Hello
World
Press any key to continue...
כעת נרצה להדפיס טקסט על המסך, שלא ירד שורה בסופו, אלא ישאר באותה השורה. נשתמש בפקודה עם שם דומה אך מעט שונה: System.out.print - הנה הקוד:
System.out.print("Hello"); System.out.print("World");
הפלט יהיה:
HelloWorldPress any key to continue...
שימו לב כי כאן לא ירדנו שורה בסוף כתיבת Hello וגם לא בסוף כתיבת World.
סיכום
כעת שאנו יודעים לקלוט נתונים מהמשתמש, לעבד אותם ולהדפיס תוצאות למסך - נוכל להתקדם בלמידה לביצוע מטלות קשות יותר מחיבור שני מספרים.
שלום! אני מנסה לתכנת ב-Visual Studio 2005 וגם שם אין אפשרות לעבוד עם פקודת Console כדי להכניס לתוכנית נתונים ממשתמש שמקליד אותם. כל הדברים עובדים, מהדר רץ, חוץ מבעיה הגדולה הזאת של חוסר יכולת להכניס נתונים שלא בקוד מהתחלה. מה לעשות? ניסיתי להכניס את הקבצים הרלוונטים שפרסמתם לספריה וכו', אבל זה לא עובד. אולי ל-Visual Studio צריך משהו מיוחד?? בבקשה תעזרו לי
איפה ההמשך???? O.o
השיעור הבא הוא הפקודה if, כאן תוכל לראות את רשימת השיעורים: http://www.ketacode.com/java.asp
שוב שלום,
הרצתי את הקוד כלשונו של 'דוגמא שימושית'
וזו השגיאה קיבלתי, כיוון שעדין איני בקיא, איני מבין כ"כ את השגיאה.
תודה,
חיים
-------------------Configuration: <Default>--------------------
java.lang.NoClassDefFoundError: input
Caused by: java.lang.ClassNotFoundException: input
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
Could not find the main class: input. Program will exit.
Exception in thread "main"
Process completed.
בהמשך לעניין
זו השגיאה מהCOMMANLIN
C:\Java>javac GetNo.java
GetNo.java:3: class input is public, should be declared in a file named input.ja
va
public class input{
^
1 error
C:\Java>
שתי אפשרויות לסדר את זה:
1. להוריד את המילה public מהקוד ולהדר פעם נוספת
2. לשנות את שם הקובץ ל-input.java ולהדר פעם נוספת.
הסבר: לא אמרתי בפוסט (אני אתקן), אבל אם כותבים את המילה public לפני ה-class input אז חייבים לקרוא לקובץ בשם זהה (כלומר זהה ל-input). ניתן להסיר את המילה publicת בשלב זה של הלימוד אין לכך משמעות אחרת.
רציתי לדעת למה בתכנית הזאת הוספת public לפני הclass
ומה זה משנה לתוכנית?
זה קשור לנושא יותר מתקדם של הרשאות גישה. אני אסביר בכל זאת, גם אם לא הכל יהיה מובן. זה יהיה מאוד פשטני מכיוון שאי אפשר להסביר את כל הנושא בפיסקה אחת.
בתכנות מונחה-עצמים (OOP) ישנן מחלקות (classes). מחלקה מסוגלת לזכור ערכים שונים ולבצע פעולות שונות. למשל בקוד כאן, יצרנו מחלקה בשם input. מחלקות יכולות לתקשר עם מחלקות אחרות.
כאשר אנו מוסיפים את ההרשאה public ("הרשאה ציבורית") לפני הגדרת המחלקה, אנו מאשרים לכולם להכיר את input. כלומר כל מחלקה אחרת יכולה לבקש מ-input לבצע עבורה פעולות. כאשר מגדירים מחלקה כ-public אנו מחוייבים ששם הקובץ יהיה זהה לשם המחלקה. לכן חובה כאן בדוגמה ששם הקובץ יהיה input.java ולא אחר.
אם לא כותבים הרשאה public, ההרשאה תהיה ברירת המחדל: private ("הרשאה פרטית"). כאן רק המחלקה עצמה (Input) יכולה להפעיל את הפונקציות שלה.
יש צורך בהסבר יותר מעמיק ממה שהסברתי כאן ואני מקווה שאני אגיע לכך בהמשך השיעורים והכל ייה יותר ברור.
איך יורדים שורה הבתי שיש כמה אפשרויות אפשר הסבר ?
מה לגבי תחילת לולאה ? ומתי היא ניגמרת איך אפשר לדעת לפי הסוגרים המסוסלסות לא הבנתי
ניסיתי לעשות את זה מההתחלה ויש לי בעיה
C:\JAVA\input.java:2: illegal start of type
import packageName;
^
C:\JAVA\input.java:2: ';' expected
import packageName;
^
C:\JAVA\input.java:3: illegal start of type
import java.util.Scanner;
^
C:\JAVA\input.java:3: ';' expected
import java.util.Scanner;
^
C:\JAVA\input.java:3: illegal start of type
import java.util.Scanner;
^
C:\JAVA\input.java:3: ';' expected
import java.util.Scanner;
^
C:\JAVA\input.java:3: <identifier> expected
import java.util.Scanner;
^
עזרה פליז
דבר ראשון, קשה לעזור כשלא יודעים מה עשית בדיוק.
דבר שני, packageName זאת הייתה רק דוגמה, לא תוכל להדר את התוכנית עם שורה זו.
דבר אחרון, אתה מוזמן ליצור קשר במייל ולהסביר איזה תוכנית ניסית להריץ, מה קרה וכולה...
זה מה שיצא לי אני לא מבין מה הבעיה במקום הpackageName שמתי מלא שמות וזה עדיין לא עבד
זה בimport
קח תמונה:
http://eliad.org/viewer.php?id=1257459008.png
היי,
כיצד קולטים מהמשתמש מספרים המופרדים ברווח ולא לאחר Enter בכל פעם?
תודה.
פשוט תעשה
1 2 3
רק עושים רווח ואז זה יעשה את 3 המספרים
@איתמר, כתבת את הפקודה import במקום הלא נכון. שים לב לדוגמה האחרונה בקשר למיקום הנכון.
@חיים, בעזרת הכלים שלמדנו עד כה, זה לא ממש אפשרי. אם אתה מעוניין לחפש לבד, תבדוק את הפקודה split של המחלקה String וצריך ידע על מערכים (Arrays).
אהה
כי לא הסתקלתי לסוף ראיתי רק את החלק הראשון מה לא טוב תתקן את זה כי לא רשמתה שלא רושמים את זה מעל Class.
וכמה זמן אתה מתכנת שאתה כזה טוב?
אני מקבל את ההצעה שלך ואני אציין שזה אמור להיכתב מחוץ ל-Class.
אתה יכול לקרוא קצת עלי בעמוד האודות.
שלום טל.
האם ישנה אפשרות לקרוא את הפלט שתוכנית אחרת כותבת.יש לי Class שמדפיס פלט ל console ואני רוצה לקרוא אותו לתוך משתנה.אני הוא זה שמפעיל את ה class המדפיס ואני רוצה לקרוא את מה שנכתב ל consol לתוך משתנה בתוכנית שלי.
תגיד יש אפשרות לקלוט boolean?
כן, אפשר להשתמש ב:
boolean flag = console.nextBoolean();
שיודע לקרוא True או False ולתרגם לערך בוליאני.
הבעיה היא שאם יש משהו אחר, התוכנית קורסת. בהמשך נלמד על חריגות (Exceptions) וכיצד מטפלים במקרים כאלה.
שאלה:
את הפקודה import packagename צריך במקום ה public class?
איפה מכניסים את זה?
אפשר דוגמא מדוייקת לאיך שהקוד צריך להיות?
בדיוק נפתח חלק באתר המיועד לשאלות: http://www.ketacode.com/qa/
אם תפרסם שם את השאלה, אני מאוד אשמח לענות לך ולתת דוגמה מלאה.
ברצוני לציין שהאתר www.Codes.co.il חוזר לרשת בימים אלו!
זהו אינו פרסום מתחרה, אלא הפנייה, על-מנת לראות גם את מיטב מוחות המתכנתים בארץ בפורום.
אני מאמין שמי שהקים אתר זה, הוא אדם מוכשר, ואשמח לראות אותו גם מבקר בפורום שלי.
זהו הפוסט השני שלי כאן בנושא, מצטער אם אני עובר על חוקי האתר, במידה וכן, אנא ידעו אותי.
תודה מראש,
orl2008. =]
היי טל יש לך טעות בחלק שכתבת את התוצאה של " המחשבון הזה" אני לא יודע לתת תיאור מדויק אבל זה בחלק שלפני הפלט בסוף. שכחת לכתוב את ה " + " בתוצאה הסופית לכן ניסיתי להשוות את התוצאה שלי לתוצאה שלך וראיתי שהוספתי + לפני ה z לכן חשבתי שלא הצליח לי. לכן ניסיתי לשנות כמה דברים שנראו לי חשודים כי כתבת שהם אמורים להיות שונים. אני לא בא בכדי לכועס עלייך אני רק רוצה שתתקן את זה למקרים הבאים
תודה
@יותם, אתה לא כל כך ברור. אם ישנה טעות, אני אשמח לתקן. אתה מוזמן להסביר באופן ברור יותר.
בס"ד
שלום,
כתבתי תוכנית והיא פועלת לא נכון, אשמח אם תתקן אותי.
import java.util.Scanner;
class hello
{
public static void main(String args[])
{
Scanner console = new Scanner(System.in);
System.out.println ("נא הכנס מיספר" );
double a = console.nextDouble();
System.out.println ("נא הכנס מיספר" );
double b = console.nextDouble();
double p = a+b;
double m = a-b;
double k = a*b;
double h = a/b;
System.out.println ( "איזה פעולה ברצונך לבצע?" );
String t = console.next();
if (t=="+")
{
System.out.println (p );
}
else if (t=="-")
{
System.out.println (m );
}
else if (t=="*")
{
System.out.println (k );
}
else
{
System.out.println (h );
}
console.close();
}
}
תודה רבה רבה מראש!
כתבתי את התוכנית הזאת ב j creator שנועדה לעשות מחשבון
import java.util.Scanner;
class calculator {
public static void main(String args[]) {
Scanner console =new Scanner(System.in);
System.out.println("Enter the math operation you want:x,+,-,/(Division)");
char c = console.nextChar();
int f=5;
while(f==5){
if (c == 'x')
{
System.out.print("please enter the number:");
double x = console.nextDouble();
System.out.print("please enter the number:");
double s = console.nextDouble();
double z = s*x;
System.out.println(x+"x"+s+"="+z);
}
if (c == '+')
{
System.out.print("please enter the number:");
double x = console.nextDouble();
System.out.print("please enter the number:");
double s = console.nextDouble();
double z = s+x;
System.out.println(x+"+"+s+"="+z);
}
if (c== '-'){
System.out.print("please enter the number:");
double x = console.nextDouble();
System.out.print("please enter the number:");
double s = console.nextDouble();
double z = s-x;
System.out.println(x+"-"+s+"="+z);
}
if (c== '/')
{
System.out.print("please enter the number:");
double x = console.nextDouble();
System.out.print("please enter the number:");
double s = console.nextDouble();
double z = s/x;
System.out.println(x+"/"+s+"="+z);
}
}
console.close();
}
}
וקיבלתי שגיאה כזאת
symbol : method nextChar()
location: class java.util.Scanner
char c = console.nextChar();
^
1 error
Process completed.
שוב תודה לך טל
כדי לרדת שורה רושמים :
r/n/
היי טל, מה קורה?
החלטתי לנסות ללמד תכנות JAVA או לפחות להציץ בזה קצת..אממ...בשיעור שלך של "קלט ופלט" ניסיתי להריץ בJCREATOR את הדוגמא של "דוגמא שימושית" אך הוא נתן לי מספר שגיעות..ניסיתי לשנות פה ושם אבל מספר השיגעות רק הלך וגדל..חחח..
אשמח אם תוכל לתת לי תשובה..בנתיים אני מאוד נהנה מהכתיבה שלך ומהידע..
להלן השגיעות..
א. זה מה שהכנסתי בJCREATOR :
public class input {
import java.util.Scanner
public class input{
public static void main(String[] args){
Scanner console = new Scanner(System.in);
System.out.println("Please enter a number: ");
int x = console.nextInt();
System.out.println("Please enter a number: ");
int y = console.nextInt();
int z = x + y;
System.out.println("The answer of " + x + " plus " + y + " is: " + z);
console.close();
}
}
public input() {
}
}
ואלו הן השגיעות
--------------------Configuration: <Default>--------------------
C:\Users\Alon\Desktop\java\input.java:3: error: illegal start of type
import java.util.Scanner
^
C:\Users\Alon\Desktop\java\input.java:3: error: ';' expected
import java.util.Scanner
^
C:\Users\Alon\Desktop\java\input.java:3: error: illegal start of type
import java.util.Scanner
^
C:\Users\Alon\Desktop\java\input.java:3: error: ';' expected
import java.util.Scanner
^
C:\Users\Alon\Desktop\java\input.java:3: error: <identifier> expected
import java.util.Scanner
^
5 errors
Process completed.
תודה מראש על העזרה.
לא משנה..הסתדרתי..הבנתי מה היתה הטעות..:)
נתנו לי לכתוב קוד בjava וזו פעם ראשונה שלי בשפה הזאת אני צריכה להתקשר לחוברת באקסל
כך שההיתי צריכה להוסיף
apache poi 3.7.jar
download serverlet.jar
הוספתי אותם אבל הוא לא מכיר לי את הנתיב הזה
import org.apache.poi.hssf.usermodel.HSSFCell;
תודה רבה מראש לבאים לעזרתי
שלום עשיתי העתק הדבק של הקובץ וכשאני מריץ אותו הוא לא רושם לי להכניס מספר.
אני בכל זאת מכניס מספר עושה אנטר וככה עוד פעמיים וזהו הוא מסיים לי את ההרצה בלי תשובה לכלום.
הבעיה היא אצלי או מה?
ואגב קראתי לקובץ input
הסתדרתי, הבעיה היתה שהקובץ שהיה פתוח היא בכלל hello.java
תודה בכל אופן. :)
שלום
האם יש גם input.next... ל-Char? אני לא מצאתי אותו, אשמח אם תעזור :)
איך אני עושה שהוא מקבל 3 מספרים שלמים, מחשב את הסכומים שלהם את המכפלות ומדפיק את התוצאות ? תודה.. (:
טל..אני לא מבין כמה דברים.
דבר ראשון מה שהסברת מתחילת פעולת הקלט עד לסיומה
ככה עשיתי כמו שהסברת שורה אחר שורה.
import packageName;
import java.util.Scanner;
Scanner console = new Scanner(System.in);
int x = console.nextInt();
console.close();
אבל בדוגמא זה לא נראה ככה ואתה הוספת public class input{
אשמח אם תעזור לי תודה.
בעצם הבנתי איפה הטעות, אבל משו ממש קטן שלא מסתדר לי חח
תוכל להסביר לי תקטע עם הסוגריים המסולסלות ? מתי צריך להשים אותם ואיך?
תודה.
היי טל,
אני כותב את התוכניות באפליקציה וובית - compilr מאחר ואין לי אפשרות להתקין תוכנות על המחשב שלי (כמו כן מתאפשר לי לכתוב תוכניות על הטאבלט דרך הדפדפן).
הרצתי את התוכנית שנמצאת תחת הכותרת דוגמא שימושית באפליקציה זו וזו התוצאה שקיבלתי:
Error: Could not find or load main class Program
האם תוכל לעזור לי לדעת מה הבעיה,
מצד אחד הבילד עבר בהצלחה אך כפי שאתה רואה הוא לא מוצא את ה main class
תודה.
היי רק רציתי להגיד תודה רבה.
המדריך שלך מאוד טוב, כתוב בצורה ברורה, ובאמת מאוד עוזר.
שוב, תודה רבה. :)
היי
אשמח אם תוכלו לעזור לי:
ברצוני לכתוב תוכנית בjava בה עלי להגדיר 2 מערכים שגודלם 10 שאת איבריו המשתמש יגדיר ע"י קלט ולאח"מ התוכנית תבדוק האם האיברים במערך השני שווים לריבוע האיברים (חזקת 2)במערך הראשון בהתאמה. א"כ , התוכנית תפלוט פקודה המאשרת זאת ואם לא- פקודה השוללת זאת.
נ.ב. כתבתי את התוכנית אך היא אינה אצלי וברצוני לאמת אותה.
אשמח לתשובה מהירה.
תודה רבה מראש !! (-:
רציתי לציין שהשיעורים כתובים בצורה מצויינת!
החלה תוחנה
החלה תוחנה
החלה תוחנה
החלה תוחנה