לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה ‎print ‎"Hello World!"; if‎ ‎not rules.‎know ‎then rules.‎read(); חץ ימינה  

לך אחורה   לובי הפורומים > מחשבים > תכנות ובניית אתרים
שמור לעצמך קישור לדף זה באתרי שמירת קישורים חברתיים
תגובה
 
כלי אשכול חפש באשכול זה



  #1  
ישן 28-03-2011, 22:41
צלמית המשתמש של SkyRaider
  SkyRaider SkyRaider אינו מחובר  
 
חבר מתאריך: 08.02.06
הודעות: 941
ג'אווה| תרגיל פשוט -דרוש עזרה.

אהלן,
התחלתי ללמוד את שפת תכנות ג'אווה כשפה הראשונה שלי.
אני לומד מויקיספר, הגעתי לשאלה אחת ונתקלתי בבעיות הבנה. (חוץ מזה, יכול להיות שהשאלה מתקדמת לרמתי)
הנה השאלה:
http://he.wikibooks.org/wiki/Java/%...%9C%D7%99%D7%9D
חיפוש במחרוזת
כעת כיתבו תוכנית שתקבל אות ומחרוזת, ותדע לומר מתי מופיעה האות במחרוזת בפעם הראשונה. לדוגמה: אם המשתמש יכניס "a" ו-"Bla bla", הפלט יהיה 3, שכן האות מופיעה בפעם הראשונה במקום השלישי. דאגו לכך שאם האות לא מופיעה כלל, תגיב התוכנית בהתאם.

הנחיות:
  • את קליטת האות בצעו באמצעות קליטה של מחרוזת, ואז שימוש ב-charAt.
  • שימו לב למקרה בו מופיעה אות כמה פעמים במחרוזת - דאגו שבמקרה כזה לא ישתבש פלט התוכנית.
  • שגיאה נוספת יכולה להיווצר מהצורה בה מתייחסת הפקודה charAt למחרוזות. בעוד שעבורנו האות הראשונה מספרה 1, עבור charAt האות הראשונה היא במקום ה-0. תיקון קל יכול לסדר את הבעייה.
זה הפתרון שלהם:

import java.util.Scanner;public class Strings { public static void main(String[] args) { String str; char c; int location=-1; boolean found = false; System.out.print("Enter a string: "); Scanner s = new Scanner(System.in); str = s.nextLine(); System.out.print("Now enter a character: "); c = s.nextLine().charAt(0); for(int i=0; i<str.length() && !found; i++) { if(str.charAt(i) == c) { לא מספיק שווה אחד? location = i+1; found = true; } } if (location!=-1) System.out.println(location); else System.out.println("Not found"); }}




מה שלא הבנתי מסומן באדום.
-מה פשר השימוש בlocation=-1 לאורך כל התרגיל?
-רק פרק הבא הם ירחיבו על בוליאנים וכבר מכניסים את זה, מה פשר השימוש של boolean found = false; לאורך כל התרגיל?
-מה הם עשו בc = s.nextLine().charAt(0); לפרטי פרטים.
-אשמח להסבר מפורט על אופן הביצוע במחרוזת (ולא ידעתי שאפשר לעשות תנאי שם) i<str.length() && !found
-מה הסיפור של found = true;
- ומה הם עשו בחלק האחרון של התרגיל?


אגב, אם אתם מכירים אתרים טובים ללימוד ג'אווה (וגם C , אשר תהיה השפה הבאה שלי), אודה לכם אם תשתפו.

ותודה מראש על כל עזרה.
_____________________________________
Bad Spellers Unite!


נערך לאחרונה ע"י SkyRaider בתאריך 28-03-2011 בשעה 22:43.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #2  
ישן 29-03-2011, 00:18
צלמית המשתמש של RP.
  משתמש זכר RP. RP. אינו מחובר  
 
חבר מתאריך: 04.11.04
הודעות: 6,986
בתגובה להודעה מספר 1 שנכתבה על ידי SkyRaider שמתחילה ב "ג'אווה| תרגיל פשוט -דרוש עזרה."

דבר ראשון הצעה כללית - כשאתה מעתיק קטע קוד, תשתמש בתווית code (מופיע למעלה בצורת סולמית), ככה אתה שומר על הצורה של הקוד ככה שהוא עדיין קריא וזה עוזר לנו לעזור לך, כי אז הקוד שלך יראה ככה:
קוד:
import java.util.Scanner; public class Strings { public static void main(String[] args) { String str; char c; int location=-1; boolean found = false; System.out.print("Enter a string: "); Scanner s = new Scanner(System.in); str = s.nextLine(); System.out.print("Now enter a character: "); c = s.nextLine().charAt(0); for(int i=0; i<str.length() && !found; i++) { if(str.charAt(i) == c) { location = i+1; found = true; } } if (location!=-1) System.out.println(location); else System.out.println("Not found"); } }

תסכים איתי שזה הרבה יותר נחמד ככה

לגבי השאלות שלך - יש לך הרבה שאלות שקשה לענות לך עליהן בלי שלמדת מה זה משתנים בוליאנים (או יותר נכון ביטויים בוליאנים), זה נושא מאוד פשוט ואני ממליץ לך לקרוא עליו לפני שאתה ניגש לנסות להבין את הקוד הזה, וזה באופן כללי אחד הנושאים היותר בסיסיים בתכנות.

בגדול ביטוי (או משתנה בוליאני) יכול להיות אחד משני ערכים: 1 (true) או 0 (false).
במקרה הזה משתמשים במשתנה found כדי לציין האם כבר מצאנו את האות שאנחנו מחפשים.
בהתחלה (לפני שהתחלנו לחפש) התשובה היא כמובן לא, לכן מציבים לתוכו false. ואם מצאנו את האות שאנחנו מחפשים אנחנו מציבים לתוכו את הערך true.
שים לב שהבדיקה האם מצאנו את האות מתבצעת בתוך לולאת for - לולאת for (כמו כל לולאה אחרת) רצה כל עוד מתקיים תנאי בוליאני כלשהו. במקרה הזה התנאי הוא הביטוי:
קוד:
i<str.length() && !found

כדי להבין מה קורה פה צריך לחלק את הביטוי הזה לחלקים
1.
קוד:
i<str.length()
- הביטוי הזה אומר תבדוק האם i שמייצג את האינדקס של האות שאותה אנחנו בודקים האם הוא קטן מאורך המילה.
2.
קוד:
!found
המשמעות הזה היא "לא מצאנו", בעצם אנחנו מבצעים את הלולאה כל עוד ערכו של found הוא false. הסימן קריאה לפני המילה מייצג את האופרטור הלוגי not, שזה פשוט שלילה של הביטוי שאליו הוא צמוד. משמע אם found הוא false, אז found! יחזיר true, ולהיפך.
3. && - זה מייצג את האופרטור הלוגי and ("וגם") שהוא אומר שהלולאה תרוץ רק כל עוד שני התנאים הנ"ל מתקיימים.

ואם אנחנו מסכמים את הכל ביחד לביטוי יחיד - הלולאה תרוץ כל עוד "האינדקס של האות שאותה אנחנו בודקים כעת קטן מאורך המילה וגם עדיין לא מצאנו את האות שאנחנו מחפשים".

יכול להיות שזה נשמע טיפה מסובך, אבל אני מבטיח לך שאחרי שתכתוב שניים-שלושה תנאים כאלה זה יראה לך הדבר הכי טבעי בעולם.

לגבי location - זה משתנה שמייצג את המקום של האות שאותה אנחנו מחפשים. הסיבה שמאתחלים אותו ל [tex]-1[/tex] היא רק כדי שנוכל להבדיל בין המצב שבו מצאנו אות לבין כזה שלא.

אני מציע שתקרא קצת על ביטויים בוליאנים ורק אז תסתכל על הקוד הזה.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #3  
ישן 29-03-2011, 15:29
צלמית המשתמש של SkyRaider
  SkyRaider SkyRaider אינו מחובר  
 
חבר מתאריך: 08.02.06
הודעות: 941
בתגובה להודעה מספר 2 שנכתבה על ידי RP. שמתחילה ב "דבר ראשון הצעה כללית - כשאתה..."

רשמתי הודעה גדולה אך היא נמחקה בגלל באג באתר.
במקום לרשום שוב הודעה גדולה אקצר לצערי..

המשתנה הבוליאני שנקלט כfound עם ערך של false תלוי במשהו?

מה משמעות
קוד:
c = s.nextLine().charAt(0);


בתוך הלולאה, נקלט משתנה i=0 , התנאי להמשך הלולאה כל עוד הנ"ל לא מתקיים:
קוד:
i<str.length()


כלומר הערך של i הגדל כל עוד הוא קטן מגודלו של המחרוזת str
אגב, הערה חשוב המאוד לדעתי, הקוד לעיל של אורך המחרוזת, לא אמור להיות תוספת של
קוד:
i<str.length()-1
כדי שזה יהיה האורך הנכון והמלא של המחרוזת?

וגם
!found
מה יגרום למשתנה הבוליאני לשנות מצב לtrue? כמו ששאלתי, האם הוא תלוי במשהו?

מתחת יש תנאי שרץ כל סיבוב של הלולאה, בתוך התנאי יש השוואה, אך השאלה שלי היא, לא אמורים להשוות מחרוזות עם פונקציית equals?

ומתחת location מקבל ערך חדש? לאן הערך הקודם שלו נעלם?
ואז שוב משתנה בוליאני... (*מרגיש כאילו נפל לי אסימון, בתחתית סיום התגובה אפרט)

מתחת ללולאה, רק לא מובן לי העניין עם הערך של משתנה location מה הסיפור שלו עם מינוס 1?

לגבי האסימון,

תקן אותי עם אני טועה, המשתנה הבוליאני לא תלוי בכלום בתחילת התרגיל אלא רק ניתן לו הערך false ורק בלולאה, כל הרצה הרי מפעילה את התנאי ובמקרה והתנאי נכון, המשתנה הבוליאני משנה את ערכו וכל עוד i קטן מאורכה של המחרוזת, רק אז המחרוזת מופסקת והגענו לפתרון. הדבר נכון גם לגבי המשתנה location, אם התנאי נכון הוא פשוט משנה את ערכו לגמרי ל-מה שרשום?
אז זה האסימון הקטן שלי שקרה רק כששיכתבתי את ההודעה מחדש לאחר שנמחקה חח קטעים, שים לב שיש לי עוד שאלות למעלה.
נ.ב. עדיין לא ישבתי על בוליאנים, מקווה שהיום.
תודה!
_____________________________________
Bad Spellers Unite!

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

מזער את תיבת המידע אפשרויות משלוח הודעות
אתה לא יכול לפתוח אשכולות חדשים
אתה לא יכול להגיב לאשכולות
אתה לא יכול לצרף קבצים
אתה לא יכול לערוך את ההודעות שלך

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 16:54

הדף נוצר ב 0.06 שניות עם 10 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2024 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר