פורסם 2008 במרץ 1217 שנים עליכם לכתוב שיטה, המוצאת את החלק הזהה הארוך ביותר בין שתי רשימות. השיטה מקבלת כפרמטרים שתי רשימות מקושרות חד סטריות (כל רשימה נתונה על-ידי Element שהוא תחילת הרשימה), אשר בכל אחת מהן האיברים ממוינים בסדר עולה ממש (אין איברים זהים). ערך ההחזרה של השיטה הוא מסוג Element, אשר התכונה _number שלו מכילה את אורך החלק הזהה, והתכונה _next שלו מכילה את האיבר הראשון (באחת מן הרשימות) בחלק הזהה.אין לסרוק את הרשימות הנתונות (כל אחת מהן) יותר מפעם אחת!דוגמא:רשימה א' 1->2->4->6->8->10->15->nullרשימה ב' 2->4->8->10->15->nullהערך המוחזר יכיל את המספר 3 ואיבר ה-_next שלו יהיה האיבר שערכו המספרי הוא 8. (החלק הזהה הארוך ביותר הוא זה המתחיל באיבר שמספרו 8, ולאחריו האיברים שמספריהם 10 ו-15, סה"כ 3 איברים).איך ניתן למצוא במעבר אחד על הרשימות את החלקים הזהים אם הרשימות לא מכילות את אותו מספר האיברים ?
פורסם 2008 במרץ 1217 שנים מה זה משנה כמה איברים יש?תחזיק שני מצביעים - אחד עבור כל רשימה.בכל איטרציה של הלולאה, תקדם רק אחד מהמצביעים קדימה (תחליט איזה צריך לקדם לפי האיבר שעליו הוא מצביע...)
פורסם 2008 במרץ 1517 שנים מחבר הנה הקוד שכתבתי , אני לא מצליח לעלות על הטעותהנה הקוד public class Element{ private int _number; private Element _next; public Element(int number) { _number = number; _next = null; } public Element(int number , Element next ) { _number = number; _next = next; } public int getNumber() {return _number;} public Element getNextElement() {return _next;} public static Element rett(Element e1 , Element e2) { Element a1= e1;//pointer to the "head" of e1 Element a2 = e2; //pointer to the "head" of e2 Element tempCount = new Element (0); int count = 0; int currLong = 0; Element curr = new Element(0); while (a1.getNextElement() != null && a2.getNextElement() !=null) { if (a1.getNumber() < a2 .getNumber() ) { a1=a1.getNextElement(); } else if(a1.getNumber() == a2.getNumber()) { if(count ==0) {// temp._number =count ; tempCount. _next =a1; } count++ ; a1= a1.getNextElement(); a2= a2.getNextElement(); } else { a2=a2.getNextElement(); } if(count>currLong) { curr._number = count; curr._next =tempCount; } } return curr; }} והנה הMAIN שאני מריץ איתו public class main{ public static void main (String [] args) { Element p1 = new Element( 1 , new Element (2, new Element (4 ,new Element(6 , new Element(8,new Element(10 , new Element(15))))))); Element p2 = new Element ( 2 , new Element(4,new Element(8 , new Element (15))) ); System.out.println(Element.rett(p1 , p2)); }}
פורסם 2008 במרץ 1517 שנים עריכה :זה כל המחלקה public class Element { private int _number; private Element _next; public Element(int number) { _number = number; _next = null; } public Element(int number , Element next ) { _number = number; _next = next; } public int getNumber() { return _number; } public Element getNextElement() { return _next; } public void setNumber(int num) { _number=num ; } public void setNext(Element next) { _next =next; } public Element getLongest (Element first , Element second ) { int count=0 ,longest=0; Element result =new Element(0) ; while ( first != null && second !=null) { if (first.getNumber() != second.getNumber()) { if (first.getNumber ( ) > second.getNumber( ) ) second = second.getNextElement () ; else first = first.getNextElement() ; count = 0; } else { count++; if (count >longest) { longest= count; if (longest==1) result.setNext(first); } } } result.setNumber(longest) ; return result ; }}
פורסם 2008 במרץ 1517 שנים מחבר תודה על ההשקעה , אבל יש טעות בקוד! הוא נכנס ללואה אין שופית בקטע של ה IF-ELSE בתוך ה WHILE !!!
פורסם 2008 במרץ 1517 שנים צודק . נסה את זה public class Element { private int _number; private Element _next; public Element(int number) { _number = number; _next = null; } public Element(int number , Element next ) { _number = number; _next = next; } public int getNumber() { return _number; } public Element getNextElement() { return _next; } public void setNumber(int num) { _number=num ; } public void setNext(Element next) { _next =next; } public Element getLongest (Element first , Element second ) { int count=0 ,longest=0; Element result =new Element(0) ; while ( first != null && second !=null) { if (first.getNumber() != second.getNumber()) { if (first.getNumber ( ) > second.getNumber( ) ) second = second.getNextElement () ; else first = first.getNextElement() ; count = 0; } else { count++; if (count >longest) { longest= count; if (longest==1) result.setNext(first); } second = second.getNextElement(); first = first.getNextElement(); } } result.setNumber(longest) ; return result ; }}
פורסם 2008 במרץ 1517 שנים מחבר פה אני מקבל בדיוק את אותה תשובה כמו בקוד שלי , אני מקבל את הכתובת של אחד ה "Element"
פורסם 2008 במרץ 1517 שנים לא הבנתי , אבל המתודה אמורה להחזיר Element מה הבעיה ? אם אתה רוצה להדפיס את _number תעשה getNumber לאלמנט [br]פורסם בתאריך: 15.03.2008 בשעה 19:58:26תפעיל את ה MAIN הזה ותראה שזה עובד public class main{ public static void main (String [] args) { Element p1 = new Element( 1 , new Element (2, new Element (4 ,new Element(6 , new Element(8,new Element(10 , new Element(15))))))); Element p2 = new Element ( 2 , new Element(4,new Element(8 , new Element (15))) ); System.out.println(p2= Element.getLongest(p1 , p2)); System.out.println(p2.getNumber()); }}
פורסם 2008 במרץ 1517 שנים מחבר את השיטה שכתבת שיניתי לשיטה סטטית ואת ההדפסה ביצעתי System.out.println(Element.getLongest(p1 , p2));ואז במקום לקבל 3 ו 8 קיבליתי "Element@39e5b5"
פורסם 2008 במרץ 1517 שנים NEOGOD אני ממש לא מבין אותך , אצלי זה עובד מצוין , מה הבעיה בדיוק ? תסביר את עצמך .
פורסם 2008 במרץ 1517 שנים זה כי אתה מדפיס את האלמנט, במקום את הערך שבו. אתה צריך להדפיס ככה:System.out.println(Element.getLongest(p1 , p2).getNumber());
פורסם 2008 במרץ 1517 שנים ותשים לב נאו אתה העתקת את הרשימות מהדוגמא בשאלה המקורית אבל חיסרת 10 ברשימה השניה לכן התוצאה היא לא אותו דבר כמו בשאלהככה אתה רשמת Element p1 = new Element( 1 , new Element (2, new Element (4 ,new Element(6 , new Element(8,new Element(10 , new Element(15))))))); Element p2 = new Element ( 2 , new Element(4,new Element(8 , new Element (15))) ); וככה זה בשאלהרשימה א' 1->2->4->6->8->10->15->nullרשימה ב' 2->4->8->10->15->nulשים לב שחיסרת 10 ברשימה השניה שלך לכן זו לא אותה תוצאה כמו בדוגמא
פורסם 2008 במרץ 1617 שנים יש באג קריטי בתוכנית שלי , זאת המתודה התוקנת public static Element getLongest (Element first , Element second ) { int count=0 ,longest=0; Element result =new Element(0) ; Element t =new Element(0); while ( first != null && second !=null) { if (first.getNumber() != second.getNumber()) { if (first.getNumber ( ) > second.getNumber( ) ) { second = second.getNextElement () ; count =0; } else { first = first.getNextElement() ; count = 0; } } else { count++; if (count==1) t=first ; if (count >longest) { longest= count; result.setNext(t); } second = second.getNextElement(); first = first.getNextElement(); } } result.setNumber(longest) ; return result ; }}
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.