הגעת למגבלת הצפייה למשתמשים שאינם רשומים באתר
  • נשמח אם תצטרפו לקהילה שלנו. הרשמה לאתר תקנה לכם את האפשרות לשאול שאלות ולהגיב לשרשורים באתר ללא כל עלות
  • טופס ההרשמה לאתר נמצא כאן למטה ולוקח פחות מ-30 שניות למלא אותו (כן, בדקנו עם סטופר 🤓)

עזרה בתיכנות בג'אווה

  • פותח/ת השרשור talp
  • פורסם בתאריך

talp

משתמש משקיע
4,968
4,036
נק' מוניטין:
12,989
4,968
4,036
קאנטרי זכרון
היי, אני תקוע כבר יומיים על משהו ויש לי הגשה ביום חמישי..

בקצרה, אנחנו בונים מערכת של חדר כושר (במקרה) ויש לי בעיה בשליפת נתונים מתוך arraylist.
יש לי מתודה כזאת:

public Customer getCustomerById(String id){
for (Customer c: customers){
if (c.getId()==id)
return c;
}
return null;
}

אני מקבל ת.ז. בתור מחרוזת, עובר על כל הרשימה ואם יש התאמה בין הת.ז. אני שולף את הC שהוא בעצם לקוח מסוג Customer.
התוכנית מחזירה לי NULL במקום להחזיר לי את הCustomer.

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

עריכה:

public Customer getCustomerById(String id){
for (Customer c: customers){
if ((c!=null) && c.getId()!=null)
if (c.getId().equals(id))
return c;
}
return null;
}
שיניתי ל equals והתוכנית קורסת כשאני מנסה להחזיר את c
 
נערך לאחרונה:
  • פותח/ת השרשור
  • #3
התוכנית קורסת או עפה?
עפה.. פתרתי את זה ועכשיו יש לי בעיה חדשה.. אני אעתיק לך את מה שרשמתי בפורום אצלינו בלימודים. אני בספק אם תצליח לעזור לי מבלי לראות את הקוד (הוא מעל 1000 שורות ככה שזה בלגן) אבל בכל זאת, אולי תדע להגיד לי מה השגיאה.

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

בפקודות האלה בMAIN:

MyFileLogWriter.writeToFileInSeparateLine("changeCustomerAddress returns: "
+ "Successfully changed address of customer: "
+ customerId + " "
+ IShape.getCustomers().get(
IShape.getCustomers().indexOf(
new Customer(customerId))));



אני אמור לשנות כתובת של לקוח, ואם זה מצליח אז להחזיר את האינדקס שלו.

הכל עובד פיקס, אפילו אני מוצא את האובייקט עצמו ב customers[0], אבל זה מחזיר לי מינוס 1 ושגיאה שחרגתי המערך.

אני לא יודע מה הבעיה.

מצורפת תמונה:

ds.jpg


1.הID נמצא בarraylist

2.יש התאמה עם customerid ונמצא במקום ה 0

3.מראה שזה נמצא גם במקום ה 0 וגם שזה מחזיר מינוס 1 משום מה

4. הerror שהתוכנית נותנת לי



ואז מופיעה לי לשונית של arraylist<E> ורשום source not found
 
אני זורק ניחוש-עבדת עם אינדקס שרץ מאחד ולא מאפס וכל פעם הורדת 1 מהאינדקס ובאיזשהוא מקום עשית פעמיים.
אגב אני די בטוח שכתוב לך שהשגיאה בשורה 463 בmain
 
  • פותח/ת השרשור
  • #5
אני זורק ניחוש-עבדת עם אינדקס שרץ מאחד ולא מאפס וכל פעם הורדת 1 מהאינדקס ובאיזשהוא מקום עשית פעמיים.
אגב אני די בטוח שכתוב לך שהשגיאה בשורה 463 בmain
המיין שולח אותי למתודה ששולחת למתודה וככה האלה...
שורה תחתונה יש לי arraylist של לקוחות ואני צריך לבדוק שID של לקוח נמצא בarraylist של לקוחות.
אני רץ ב for each ככה שבלתי אפשרי שחרגתי מהמערך ואני מחזיר את הלקוח(העצם עצמו) אחרי שמצאתי התאמה (מצאתי התאמה!) בין הת.ז. שלהם.
לפי הסדר (חוץ מזה שבסוף זה חוזר לMAINCLASS תסתכל מהשורה של changecustomeraddress
1.jpg
2.jpg
3.jpg
 
תפריד שנייה, המתודה עובדת בדקת בנפרד? אם כן יש לך שם הרבה ifים שכניראה לא מתקיימים
לחילופין אתה יכול להוסיף פקודת פלט במקומות קריטיים וככה לזהות לאן התוכנית מגיעה ואיפה כניראה עפה
 
  • פותח/ת השרשור
  • #7
תפריד שנייה, המתודה עובדת בדקת בנפרד? אם כן יש לך שם הרבה ifים שכניראה לא מתקיימים
לחילופין אתה יכול להוסיף פקודת פלט במקומות קריטיים וככה לזהות לאן התוכנית מגיעה ואיפה כניראה עפה
בעיקרון ב"מונחה עצמים" אי אפשר לעשות את זה.. או שאני לא יודע. בc שעשיתי זה עבד.. עכשיו לא.
פירסמתי debugger למעלה.. הכל הולך תקין ורץ למקום הנכון (מבחינת true). הבעיה היא שאין לי מושג איך זה חורג מarraylist
 
  • פותח/ת השרשור
  • #9
מה אי אפשר לעשות במונחה עצמים?
אני יכול רק להכניס פרינטים לתוך המיין.. לא לקלאסים הפנימיים.
זה גם קלט ממש מסובך בשביל ליצור בעצמי עצמים ולבדוק
 
אני יכול רק להכניס פרינטים לתוך המיין.. לא לקלאסים הפנימיים.
זה גם קלט ממש מסובך בשביל ליצור בעצמי עצמים ולבדוק
אני לא חושב שאתה צודק, לא זוכר כבר בדיוק אבל אני כמעט בטוח שזה אפשרי
 
אם הבנתי את הבעיה אז לדעתי הבעיה היא שאתה מנסה למצוא אובייקט שנראה ככה: {id: xxx} כאשר בפועל האובייקטים שלך נראים ככה {id: xxx, name:yyy } ואז אתה לא מוצא אותו ולכן אתה מקבל -1. זה אומר שהפונקציה לא מצאה. וזה נותן outofboundexception.

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

אתה יכול גם לרוץ בfor ואז לקחת את ה i כמיקום.
 
מציע לך לשאול בSTACK OVERFLOW, הם קצת פלצנים, אבל תקבל תשובות ענייניות מאוד מהר.
 
אני לא יודע JAVA אבל פה:
34127


קוד:
IShape.getCustomer().indexOf(new Customer(customerId))...

נראה לי מוזר עם הNEW,איך זה אמור לעבוד?

עריכה:ובמקרה שזה מחזיר 1- ,אתה פונה לאינדקס הזה בGET הראשון,כנראה שפה התקלה.
 
  • פותח/ת השרשור
  • #15
תודה חברים הסתדרתי...
הבעיה הייתה שהייתי אמור ליצור אובייקט חדש של "לקוח" שיש לו רק ת.ז.
ואז להשוות עם אובייקט קיים של "לקוח"(שיש לו עוד פרטים כמו כתובת) ואם יש להם אותו ת.ז. (לא אכפת משאר הנתונים) אז אני אמור להחזיר שהם שווים ואז לשנות את ההוא שכבר בתוך הרשימה ולתת לו כתובת חדשה.
מתודת ה equals שלי לא הייתה נכונה ע"פ ההנחה שרק ת.ז. היא ברת השוואה, ככה שתמיד חיפשתי ברשימה לקוח שבחיים לא יהיה שם ואז חרגתי מהרשימה והחזרתי NULL
 
תודה חברים הסתדרתי...
הבעיה הייתה שהייתי אמור ליצור אובייקט חדש של "לקוח" שיש לו רק ת.ז.
ואז להשוות עם אובייקט קיים של "לקוח"(שיש לו עוד פרטים כמו כתובת) ואם יש להם אותו ת.ז. (לא אכפת משאר הנתונים) אז אני אמור להחזיר שהם שווים ואז לשנות את ההוא שכבר בתוך הרשימה ולתת לו כתובת חדשה.
מתודת ה equals שלי לא הייתה נכונה ע"פ ההנחה שרק ת.ז. היא ברת השוואה, ככה שתמיד חיפשתי ברשימה לקוח שבחיים לא יהיה שם ואז חרגתי מהרשימה והחזרתי NULL
המתודה לא השוותה בין הסטרינגים בשדה הרלוונטי?
 
תודה חברים הסתדרתי...
הבעיה הייתה שהייתי אמור ליצור אובייקט חדש של "לקוח" שיש לו רק ת.ז.
ואז להשוות עם אובייקט קיים של "לקוח"(שיש לו עוד פרטים כמו כתובת) ואם יש להם אותו ת.ז. (לא אכפת משאר הנתונים) אז אני אמור להחזיר שהם שווים ואז לשנות את ההוא שכבר בתוך הרשימה ולתת לו כתובת חדשה.
מתודת ה equals שלי לא הייתה נכונה ע"פ ההנחה שרק ת.ז. היא ברת השוואה, ככה שתמיד חיפשתי ברשימה לקוח שבחיים לא יהיה שם ואז חרגתי מהרשימה והחזרתי NULL
נשמע כמו מה שאמרתי 🙄
 
שימו לב! השרשור ישן: לא היו תגובות בשרשור מעל 90 יום.

ייתכן שהתוכן בשרשור כבר אינו רלוונטי ולכן עדיף לפתוח שרשור חדש.
Back
למעלה תחתית