שאלת טירון...

Do It Yourself

New member
שאלת טירון...

שאלה ממבחן: כתבו שיטה בשם countSameChar הפועלת על אובייקטים מהמחלקה String. השיטה צריכה לקבל מחרוזת כפרמטר ולהחזיר את מספר התווים הזהים המופיעים במיקום זהה בשתי המחרוזות (המחרוזת שבאובייקט והמחרוזת שבפרמטר). חתימת השיטה:
public int countSameChar(String s)​
ולשאלה שלי ששברתי את הראש עליה: מבלי להתחשב במטרה הסופית של השאלה, אני רוצה לספור כמה תווים יש בשתי המחרוזות. אז במחרוזת s לא היתה לי בעיה - אני בודק את זה ע"י s.length() אבל איך אני בודק כמה תווים יש במחרוזת השניה? ניסיתי (אני לא יודע אם זה נכון) להשתמש ב-this:
this.length()​
אבל זה מחזיר לי שגיאת קומפילציה. אשמח לתגובה, תודה.
 

HaifaMan

New member
האובייקט שלך הוא לא מטיפוס String אני מניח

אלא הוא מכיל מחרוזת... נניח קוראים למחרוזת myString אז אתה צריך myString.length().
 

HaifaMan

New member
ובקריאה נוספת

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

Do It Yourself

New member
לא הבנתי

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

Do It Yourself

New member
מקפיץ, מוסיף ומחדד...

היי, שוב נתקלתי בשאלה דומה - ושוב נתקעתי באותו המקום בדיוק - העניין של ההתייחסות: (ותודה לך HaifaMan על הנסיון, אבל לא הבנתי כל כך את התשובה שלך..) השאלה החדשה: "כתבו שיטה בשם countCouple הפועלת על אובייקטים מהמחלקה String. השיטה צריכה להחזיר את מספר הזוגות של אותיות זהות עוקבות שנמצאות במחרוזת עליה היא מופעלת. חתימת השיטה היא:
public int countCouples ()​
אני כרגע ממש לא מחפש את הפתרון לשאלה - נתקעתי עוד קצת לפני.. הבעיה שלי היא שאני רוצה להתחיל בלולאת for שתרוץ כמספר התווים שבמחרוזת (אם יש 4 תווים במחרוזת - הלולאה תרוץ 4 פעמים), אבל אני לא יודע איך אני מתייחס ל-String עצמו, שהרי אני לא מקבל אותו, אלא מפעיל את השיטה הזו על String קיים! ניסיתי להשתמש ב-
this.length()​
אבל קיבלתי הודעת שגיאה בקומפילציה. אני ממש ממש מתחיל להתייאש - אם מישהו יכול לעזור לי אני אשמח.. תודה!
 

HaifaMan

New member
תצרף את כל הקוד שלך

אם אתה בתוך אובייקט מסוג String אז מה שכתבת תקין ולא גורם לשגיאת קומפילציה.
 

Do It Yourself

New member
הקוד

public class temp { public int countCouples () { int len = this.length(); return len; } }​
שוב, כרגע הפתרון לא חשוב לי, אני רק רוצה, לצורך הדוגמא, לקבל את מספר התווים במחרוזת שעליה אני מפעיל את השיטה. תודה רבה על העזרה!!!
 

HaifaMan

New member
ברור לך למה זה לא עובד

this הוא אובייקט מסוג temp ולtemp אין מתודה בשם length.
 

uvdude

New member
יש לך כמה אופציות

ראשית כל - המחלקה String הינה final ולכן אתה לא יכול ליצור מחלקה חדשה שיורשת ממנה כמו שהציעו פה. כמו כן, אתה לא יכול סתם ככה לשנות את המחלקה String שכן היא מחלקת בסיס בשפת Java (אתה יכול אם אתה ממש רוצה, אבל זה לא המטרה של השאלה) לדעתי המטרה של השאלה היא לכתוב שיטה ששייכת למחלקה String כמו שביקשו, כשהכוונה היא שאתה לא אמור להריץ אותה. כמו שהסברתי לעיל, אתה גם לא יכול להריץ. אם אתה ממש רוצה לבדוק שהיא עובדת, תצטרך לכתוב שיטה סטטית שמקבלת את שתי המחרוזות כפרמטר ופועלת על שניהם ואז תוכל לקרוא s1.length() ו-s2.length()... שורה תחתונה - אתה צודק בקריאה this.length(), במצב התיאורטי שמבקשים להוסיף שיטה למחלקה String (שזה משהו שאתה לא יכול לעשות), אבל אתה לא יכול לבדוק את זה כי לדעתי השאלה היא לא להרצה...
 

Do It Yourself

New member
תודה!

שברתי את הראש על זה המון זמן, גם בחיפוש באינטרנט, גם בכתיבה בפורומים - אני מקווה שאתה צודק. אני פשוט אניח לזה ואתפלל שזה לא יופיע בבחינה
- אם כן, אשתמש ב-this. תודה על העזרה והתשובה המפורטת!
 

uvdude

New member
לא יודע איפה אתה לומד

אבל ב"מבוא ל..." באו"פ אין כזה דבר שיגידו לך "להוסיף שיטה לString". מה שכן עושים בד"כ זה מבקשים לכתוב שיטה סטטית שמקבלת את שתי המחרוזות כפרמטר למשל...
 
למעלה