פורסם 2007 באוגוסט 1518 שנים public class EqualDemo{ public static void main(String args[]) { String str1 = "123"; String str2 = "456"; Yogly ogly1 = new Yogly(); Yogly ogly2 = new Yogly(); if (ogly1.equals(ogly2)) System.out.println("ogly1 is equal to ogly2"); if (str1.equals(str2)) System.out.println("str1 is equal to str2"); }}class Yogly{ int x,y; public boolean equals(Yogly yo) { return (x==yo.x && y==yo.y); }} נלקח מפה http://www.zindell.com/israeliJavaBook/israeliJavaBookWebText3.html(יש לשנות את הקידוד כדי לראות בעברית )אם משהו יוכל להסביר לי איך התוכנית הזאת עובדת אשמח ולא הבנתי את השורה הזאת if (str1.equals(str2)) איך str1 יכול לקרוא לפונקציה equals אם הוא לא ממחלקה Yogly ???ובעיקר לא הבנתי איך הפונקציה equal עובדת public boolean equals(Yogly yo) { return (x==yo.x && y==yo.y); } עריכה : הבנתי איך הפונקציה עובדת . רק השאלה שלי איך if (str1.equals(str2)) איך str1 יכול לקרוא לפונקציה equals אם הוא לא ממחלקה Yogly ???ועוד משהו public boolean equals(Yogly yo) לא היה צריך לעשות ככה ? equals(yogly yo = new yogly())
פורסם 2007 באוגוסט 1518 שנים 1. לכל מחלקה בג'אווה מוגדרת המתודה equals (זה מגיע מהירושה מ-object).בין השאר, גם למחרוזות.2. לא, מה גרם לך לחשוב שזה צריך להיות ככה...?
פורסם 2007 באוגוסט 1518 שנים מחבר 1. לכל מחלקה בג'אווה מוגדרת המתודה equals (זה מגיע מהירושה מ-object).כלומר גם אם לא הייתי רושם את הפונקציה הזאת בכלל בתוכנית public boolean equals(Yogly yo) { return (x==yo.x && y==yo.y); } הייתי יכול להשוות בין שתי המחרוזות על ידי הפונקציה equals ?
פורסם 2007 באוגוסט 1518 שנים מחבר אחלה הבנתי את התוכנית ניסיתי לכתוב בעצמי ווראציה של התוכנית הנ"ל עריכה : הצלחתי , סליחה על הטירחה. [attachment deleted by admin]
פורסם 2007 באוגוסט 1618 שנים מחבר class Cord{ private int x,y; private byte color; public void set(int a,int b, byte color) { this.x=a; // the parameter name is different from // the instance variable name so the use // of the word this isn't neccesary ! this.y=b; // the parameter name is different from // the instance variable name so the use // of the word this isn't neccesary ! this.color=color; // the parameter has the same name as // the instance variable color so the // use of the word this is necessery } public void set(int a,int b) { x=a; y=b; } public void set(byte clr) { color=clr; } public void set() { x=y=0; set((byte)0); //calling the function set(byte) to set the color //to be zero. you can use the word 'this' //but you don't have to ! } public void set(int a) { x=a; y=a; } public boolean equals(Cord otherCord) { if (otherCord.x==x && otherCord.y==y) return true; else return false; }}public class ThisDemo{ public static void main(String args[]) { Cord CordA1; Cord CordA2;// byte clr1=(byte)2; CordA1=new Cord(); CordA2=new Cord();// CordA1.set(clr1); CordA1.set(10); // Now CordA1 is (10,10) in color 2 CordA2.set(10,10,(byte)2); // Now CordA2 is (10,10) in color 2 too ! if (CordA1.equals(CordA2)) System.out.println("\nThe two new Cords equal"); }} חברים , יש לי שתי שאלות על הקוד הזה :1. איך זה יכול להיות שיש 5 פונקציות עם אותו שם (set ) כאשר כל אחת עושה משהו אחר אז אם מהתוכנית הראשית אני קורא ל set , מאיפה אני יודע איזה פונקציה תפעל דווקא ?2.אשמח להסבר קצרצר על המילה השמורה this ומה היא עושה תודה .
פורסם 2007 באוגוסט 1618 שנים 1. הקומפיילר יודע לאיזו פונקציה לקרוא בדיוק לפי מספר הפרמטרים שהוא מקבל, והטיפוסים שלהם. לדוגמה, בקוד שלך, אם אני קורא לפונקציה הבאה (נניח ש-c הוא אוביקט מטיפוס Cord):c.set();אז כיוון שלא העברת פרמטרים לפונקציה, הוא יודע לקרוא לפונקציה שלא מקבלת פרמטרים. אם תקרא לפונקציה ככה:c.set(1,2);אז הקומפיילר ידע לקרוא לפונקציה שמקבלת שני משתנים מסוג int, כי זה מה שהעברת.שים לב שיכולות להיות כפילויות משמעות - נניח, הקריאה הבאה:c.set(1);במקרה הזה, הקומפיילר לא ידע אם התכוונת לפונקציה שמקבלת byte או לפונקציה שמקבלת int, ולכן הקומפיילר ידווח על שגיאה (יכול להיות שאני טועה, וכברירת מחדל הוא ייקח את ה-int, אבל אני לא בטוח).2. this מתייחס לאובייקט הנוכחי. לרוב אתה לא צריך אותו, כי יש לך גישה ישירה לאיברים שלו (במקום this.x יכולת פשוט לרשום x).מתי כן צריך אותו? אם אתה רוצה להתייחס לאובייקט עצמו ולהעביר אותו כפרמטר לפונקציות אחרות.
פורסם 2007 באוגוסט 1618 שנים מחבר תודה ! רק שאלה אחרונה אם לדוגמא אני אקרא ככה ל set c.set(1(byte),2(byte)) אז זה חוקי ככה ?
פורסם 2007 באוגוסט 1618 שנים קודם כל, נראה לי שאתה צריך לשים את ה-(byte) לפני המספר, לא אחריו, כלומר ככה:c.set((byte)1, (byte)2);חוץ מזה, ואללה - אין לי מושג. אני מניח שהקומפיילר יידע לבצע את ההמרה האוטומטית חזרה ל-int. הדרך הכי טובה לדעת היא לנסות.
פורסם 2007 באוגוסט 1618 שנים תודה ! רק שאלה אחרונה אם לדוגמא אני אקרא ככה ל set c.set(1(byte),2(byte)) אז זה חוקי ככה ? בעיקרון זה תלוי באיזה קומפיילר משתמשים, יש קומפיילרים שידעו לשנות את ה-byte ל-int ויש כאלה שיצעקו על זה.ברמת העיקרון זה לא אמור לעבוד כי int הוא טיפוס פרימיטיבי ולכן אין לו פונקציית בנאי שמקבלת byte ולכן הקומפיילר לא יודע איך לבצע את השינוי.
פורסם 2007 באוגוסט 1618 שנים ג'אווה לא, אבל יש קומפיילרים כמו JBuilder למשל שיודעים לעשות את ההמרות לבד.
פורסם 2007 באוגוסט 1618 שנים כל הקומפיילרים של JAVA הם אותו אחד - זה שהתקנת עם הJDK. אתה מדבר על סביבת עבודה. בJAVA אתה לא יכול לשלוח לו INT ולקוות שהוא ימיר את זה לBYTE. חלק מסביבות העבודה מזהות שיש שם שגיאת קומפילציה, והם מודיעות לך על זה, ומציעות דרכים לתקן.
פורסם 2007 באוגוסט 1918 שנים מחבר class Kushkush{ private int x,y; public Kushkush() { this(0,0); } public Kushkush(int a, int b) { x=a; y=b; } public Kushkush(int a) { this(a,a); } public void set(int a,int b) { x=a; y=b; } public boolean equals(Kushkush otherKushkush) { if (otherKushkush.x==x && otherKushkush.y==y) return true; else return false; } public void display() { System.out.println("\nx="+x+" y="+y); }}class ClassVecDemo{ public static void main(String args[]) { int index; Kushkush kushkushs[]; kushkushs = new Kushkush[10]; for (index=0; index<10; index++) { kushkushs[index] = new Kushkush(index+1,index+1); } for (index=0; index<10; index++) { kushkushs[index].display(); } }} הפלט של התוכנית הוא כזה x=1 y=1 x=2 y=2 .... ..... .... ..... .... x=10 y=10 לא הבנתי את השורה הזאת kushkushs[index] = new Kushkush(index+1,index+1); המערך קושקוש ;D בעל 10 איברים , ובכל איבר נמצא אובייקט מסוג קושקוש ? האם יש הגבלה לכמות נתונים שאפשר להכניס לאיבר אחד במערך ? או שבעצם בג'אווה אני יכול להכניס אין סוף נתונים לאיבר אחד במערך אחד ? עריכה :ראיתי שיש מערכים של int ו char .....ששמה יש הגבלה לנתונים שבכל איבר שבמערכך האם במערך של אובייקטים יש איזשהי הגבלה לכמה נתונים אפשר להכניס לכל איבר ?
פורסם 2007 באוגוסט 1918 שנים המערך קושקוש ;D בעל 10 איברים , ובכל איבר נמצא אובייקט מסוג קושקוש ? המערך בעל 10 איברים, וכל איבר הוא מסוג קושקוש. השורה הזו: kushkushs = new Kushkush[10]; יוצרת מערך בגודל 10, שמכיל 10 null-ים (אובייקטים שלא קיימים). הלולאה שבאה אח"כ ממלאת את המערך - בכל מקום במערך שמה אובייקט חדש מטיפוס KushKush (במקום ה-null שהיה שם קודם). כל איבר במערך הוא משתנה בפני עצמו. אתה יכול להחליף את הערך שבו, לא להוסיף ערך.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.