עבור לתוכן

עזרה בבחירת מימוש בתרגיל ב-Java

Featured Replies

פורסם

היי, אני סטודנט באונ' ת"א ונתנו לנו תרגיל (שהוא די פרוייקט) ויש לי דילמה קשה בנוגע לבחירת המימוש בו.

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

public class World {

/**
* Create a new world of size n. If the world has already been created
* this function return null.
* @param n the size of the world
* @return the newly created world, or null in case of an error.
*/
public static World createWorld(int n) {
// TODO Your code goes here
}

/**
* Get the already created world.
* @return the world, or null if it hasn't been created yet.
*/
public static World getWorld() {
// TODO Your code goes here
}

/**
* Create a new animal of the specified species at coordinate (x, y)
* @param s - The species the new animal belongs to
* @param x - the x coordinate
* @param y - the y coordinate
* @return - Returns 'true' if the animal was created as requested and
* 'false' otherwise (in case another animal occupies this coordinate).
*/
public boolean createAnimalAt(Species s, int x, int y) {
// TODO Your code goes here
}

/**
* Retrieve the patch at view coordinates (h, v).
* For example the square left of the current one is (-1, 0)
* @param h - horizontal coordinate relative to the view center.
* @param v - vertical coordinate relative to the view center.
* @return the requested patch, or null if the coordinates specify
* a patch outside the view.
*/
public Tile getTileAt(Animal a, int h, int v) {
// TODO Your code goes here
}

/**
* Run a simulation of the world.
* See more details in the assignment description
* @see <a href="[url]http://www.cs.tau.ac.il/courses/software1/0809a/hw.pdf/hw8.pdf">Assignment[/url] 8</a>
*/
public void simulate() {
// TODO Your code goes here
}

// You may change this constructor to your needs (add parameters etc.)
// However you may not turn it into a public one!
private World() {
// TODO Your code goes here
}

// TODO Your code goes here

}

עכשיו, כמובן שבשבילי הדבר הטבעי ביותר שעלה לי לראש על מנת לממש את כל העסק הוא מערך דו מימדי בגודל nxn כל איבר משבצת ובנוסף אליו לעשות רשימה של תורות של החיות במשחק לפי הסדר. הבעיה היא שכפי שאתם רואים יש שם 2 מתודות סטטיות שהן CreateWorld ו-getWorld. השאלה שמציקה לי היא איך במחלקה לא סטטית אני אמור לשמור מצביע לעצם שנוצר? :nixweiss: אני יכול לכל היותר להחזיק איזשהו משתנה בוליאני שיגיד לי האם נוצר כבר עצם, אבל לא לתת קישור לעצם עצמו..

בקיצור, זה נראה לי ממש ממש עקום. ולכן אני פונה אליכם: יש למישהו רעיון לאיך להמשיך מפה? כי לי ממש אין מושג קלוש :s07:

תודה מראש :yelclap:

פורסם

הממ מריח כמו singleton pattern

(להרחבה נא ראה גוגל או ויקיפדיה)

בכל מקרה אני הייתי ממש את זה בצורה הבאה (לא הכנסתי את כל המתודות)


public class World{
private static World m_WorldInstance;
private SomeType m_World[][]; //Or linked list, sparse matrix, or whatever you want/need

public static World createWorld(int n){
if(m_WorldInstance == null){
m_WorldInstance = new World(...);
return m_WorldImstance;
}

return null;
}

}

מפה לא קשה לממש את getWorld וכו'.

הרעין בקצרה של singleton שלא ניתן ידינית ליצור אובייקט (עקב זה שה CONSTRUCTOR הוא PRIVATE/PROTECTED). ולכן המחלקה מחזיקה במשתנה סטטי של עצמה שהוא כביכול ה INSTANCE (לא יודע מה המילה המגבילה לזה בעיברית) של עצמה. והיא נותנת מתודה סטטית ליצירה של אובייקט שבתוכה יש בדיקה אם לא נוצר אובייקט היא יוצרת אותו, ובכל מקרה אחר מחזירה את האובייקט שכבר נוצר.

בכלל מקרה להחרבה תקרא בגוגל ובויקיפדיה על Singleton Pattern

פורסם
  • מחבר

וואי, תודה רבה ממש עזרת לי :xyxthumbs:

פורסם

וואו, זה החומר בJAVA באוניברסיטה?

אני בדיוק ביום חמישי האחרון סיימתי את הבגרות של מדעי המחשב ב' בJAVA, כיתה י"א. בינתיים החומר לא נראה שונה או מתקדם יותר ממה שהיה אצלנו.

האמת שאפילו בראש חשבתי על פתרון דומה לזה שMasterDK :xyxthumbs:

פורסם

זה חלק קטן מהחומר באוניברסיטה, כן. אבל ג'אווה זה קורס יחסית בסיסי (זה קורס "תוכנה 1", זה הקורס השני שלוקחים אחרי מבוא למדעי המחשב, שהוא די קשה).

פורסם

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

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים