פורסם 2006 באוקטובר 2519 שנים יש לי שאלה: : הדמיה של קו ייצור כסאות הכולל 4 עמדות עבודה המתבצעות במקביל. העמדה הראשונה בונה את השלד של הכסא. העמדה השניה מקבלת את השלד מהעמדה הראשונה וצובעת את השלד. העמדה השלישית מקבלת את השלד הצבוע ומרכיבה עליו את המושב. העמדה הרביעית מקבלת את השלד עם המושב ומרפדת את המושב.[b]צריך לממש את היישום הכולל כמה תהליכים מקביליים המסונכרנים באמצעות תהליך ראשי. הימנע מליצור תהליך בשלב שאינו פעיל. אין קלט.[/b]זו התכנית שרשמתי ויש לי בעיה, אשמח לעזרתכם: ??? ???class BuildCheir extends Thread // build sheled{ int numA,k; public BuildCheir(int nb, int _k) // constructor { numA=nb; k=_k; start(); } public void run () { System.out.println("Build sheled of the cheir "+(k-1)); }}class PaintCheir extends Thread // paint the cheir{ int numB,k; public PaintCheir(int nb, int _k) // constructor { numB=nb; k=_k; start(); } public void run () { System.out.println ("Paint the sheled "+(k-2)); }}class PutMoshav extends Thread // put moshav on the cheir sheled{ int numC,k; public PutMoshav(int nb, int _k) // constructor { numC=nb; k=_k; start(); } public void run () { System.out.println ("Put moshav on the sheled "+k); }}class PutRipud extends Thread // put ripud on the cheir moshav{ int numB,k; public PutRipud(int nb, int _k) // constructor { numB=nb; k=_k; start(); } public void run () { System.out.println ("Put ripud on the sheled "+(k-2)); }}public class Cheir { int n=4; // no of pieces. int k; // nb turn void rotable() { System.out.flush(); for(k=1 ; k<=(n+4); k++) { if (k==1) BuildCheir build = new BuildCheir(n,k); else if (k==2) BuildCheir build = new BuildCheir(n,k); PaintCheir paint = new PaintCheir(n,k); else if (k==3) BuildCheir build = new BuildCheir(n,k); PaintCheir paint = new PaintCheir(n,k); PutMoshav moshav = new PutMoshav(n,k); else if (k==4) BuildCheir build = new BuildCheir(n,k); PaintCheir paint = new PaintCheir(n,k); PutMoshav moshav = new PutMoshav(n,k); PutRipud ripud = new PutRipud(n,k); try { build.join(); paint.join(); moshav.join(); ripud.join(); } catch(InterruptedException excp) { } System.out.println ("take new cheir "); if (k>4) System.out.println ("finish cheir no. "+(k-3)); } } public static void main (String args[]) { Cheir rt= new Cheir(); rt.rotable(); while(true) {}; // hold screen }}
פורסם 2006 באוקטובר 2619 שנים מחבר מה השינוי ב if- else שיש ב JAVA לעומת ++C?אין לי מושג איך עושים את זה.
פורסם 2006 באוקטובר 2619 שנים קודם כל, בלי לקרוא את הקוד לעומק, את צריכה לתחום ב- {} בלוקי if ו else המכילים יותר משורה אחת. הכוונה היא ש:if (k==1) BuildCheir build = new BuildCheir(n,k); else if (k==2) BuildCheir build = new BuildCheir(n,k); PaintCheir paint = new PaintCheir(n,k); else if (k==3) BuildCheir build = new BuildCheir(n,k); PaintCheir paint = new PaintCheir(n,k); PutMoshav moshav = new PutMoshav(n,k); else if (k==4) BuildCheir build = new BuildCheir(n,k); PaintCheir paint = new PaintCheir(n,k); PutMoshav moshav = new PutMoshav(n,k); PutRipud ripud = new PutRipud(n,k); צריך להיות:if (k==1) BuildCheir build = new BuildCheir(n,k);else if (k==2) { BuildCheir build = new BuildCheir(n,k); PaintCheir paint = new PaintCheir(n,k);}else if (k==3) { BuildCheir build = new BuildCheir(n,k); PaintCheir paint = new PaintCheir(n,k); PutMoshav moshav = new PutMoshav(n,k);} else if (k==4){ BuildCheir build = new BuildCheir(n,k); PaintCheir paint = new PaintCheir(n,k); PutMoshav moshav = new PutMoshav(n,k); PutRipud ripud = new PutRipud(n,k); }
פורסם 2006 באוקטובר 2719 שנים מה השינוי ב if- else שיש ב JAVA לעומת ++C?אין לי מושג איך עושים את זה.אין שינוי, הטעות שלך הייתה קורה גם ב-C++...
פורסם 2006 באוקטובר 2719 שנים עדיף לך להשתמש במשפט SWITCH.http://java.sun.com/docs/books/tutorial/java/nutsandbolts/switch.html
פורסם 2006 באוקטובר 3019 שנים מחבר סליחה שלא ידעתי שגם בJAVA צריך סוגריים, חשבתי שזו תוכנה חכמה.זה עדיין רושם לי טעויות, לדוגמא:java:81: not a statement BuildCheir build = new BuildCheir(n,k); ^מה זה אומר?
פורסם 2006 באוקטובר 3019 שנים ודאי שב-Java צריך סוגריים. אפשר בלי סוגריים, אבל זה לא יעשה את אותו הדבר (בלי סוגריים, רק הפקודה הראשונה שאחרי ה-if תכלל בתוכו, והפקודות הבאות ייקראו בכל מקרה).לגבי השגיאה שלך, כנראה יש לך טעות איפשהו מסביב לשורה הזו. כתבי כאן את השורה הזו וגם כמה שורות לפניה ואחריה, ונראה מה הבעיה.
פורסם 2006 באוקטובר 3019 שנים מחבר הנה זה:// turn table for 3 parallel holemakers// file name Table1.java Tishrey 5764import java.io.*; class BuildCheir extends Thread // build sheled{ int numA,k; public BuildCheir(int nb, int _k) // constructor { numA=nb; k=_k; start(); } public void run () { System.out.println("Build sheled of the cheir "+(k-1)); }}class PaintCheir extends Thread // paint the cheir{ int numB,k; public PaintCheir(int nb, int _k) // constructor { numB=nb; k=_k; start(); } public void run () { System.out.println ("Paint the sheled "+(k-2)); }}class PutMoshav extends Thread // put moshav on the cheir sheled{ int numC,k; public PutMoshav(int nb, int _k) // constructor { numC=nb; k=_k; start(); } public void run () { System.out.println ("Put moshav on the sheled "+k); }}class PutRipud extends Thread // put ripud on the cheir moshav{ int numB,k; public PutRipud(int nb, int _k) // constructor { numB=nb; k=_k; start(); } public void run () { System.out.println ("Put ripud on the sheled "+(k-2)); }}public class Cheir { int n=4; // no of pieces. int k; // nb turn void rotable() { System.out.flush(); for(k=1 ; k<=(n+4); k++) { if (k==1) BuildCheir build = new BuildCheir(n,k); else if (k==2) { BuildCheir build = new BuildCheir(n,k); PaintCheir paint = new PaintCheir(n,k); } else if (k==3) { BuildCheir build = new BuildCheir(n,k); PaintCheir paint = new PaintCheir(n,k); PutMoshav moshav = new PutMoshav(n,k); } else if (k==4) { BuildCheir build = new BuildCheir(n,k); PaintCheir paint = new PaintCheir(n,k); PutMoshav moshav = new PutMoshav(n,k); PutRipud ripud = new PutRipud(n,k); } try { build.join(); paint.join(); moshav.join(); ripud.join(); } catch(InterruptedException excp) { } System.out.println ("take new cheir "); if (k>4) System.out.println ("finish cheir no. "+(k-3)); } } static public void main (String args[]) { Cheir rt= new Cheir(); rt.rotable(); while(true) {}; // hold screen }}והטעויות שהקומפיילר רושם: Z:\Cheir.java:81: not a statement BuildCheir build = new BuildCheir(n,k); ^ Z:\Cheir.java:81: ';' expected BuildCheir build = new BuildCheir(n,k); ^ Z:\Cheir.java:103: cannot resolve symbol symbol : variable build location: class Cheir build.join(); paint.join(); moshav.join(); ripud.join(); ^ Z:\Cheir.java:103: cannot resolve symbol symbol : variable paint location: class Cheir build.join(); paint.join(); moshav.join(); ripud.join(); ^ Z:\Cheir.java:103: cannot resolve symbol symbol : variable moshav location: class Cheir build.join(); paint.join(); moshav.join(); ripud.join(); ^ Z:\Cheir.java:103: cannot resolve symbol symbol : variable ripud location: class Cheir build.join(); paint.join(); moshav.join(); ripud.join(); ^ 6 errors ----jGRASP wedge2: exit code for process is 1. ----jGRASP: operation complete.
פורסם 2006 באוקטובר 3019 שנים לגבי שתי השגיאות הראשונות אני לא בטוח, אבל נראה לי שלפני else אסור שיהיה ; (מומלץ שתעטפי גם את השורה הבודדת בסוגריים מסולסלים).לגבי השגיאות האחרות:על build, paint, moshav ו-ripud הצהרת בתוך ה-if-ים, ולכן אי אפשר לגשת אליהם מחוץ להם.מה שקורה הוא שאובייקט "חי" רק בטווח (scope) בו הצהרת עליו.קחי את הקוד הזה לדוגמה:if (/* some condition */) { int i = 10;}i = i + 1; // Error!בקוד הזה, i הוגדר בתוך ה-if, ולכן כשמנסים לגשת אליו מחוץ ל-if אי אפשר.אם בכל זאת נרצה להשתמש ב-i, נצטרך להגדיר אותו מחוץ ל-if, כך:int i;if (/* some condition */) { i = 10;}i = i + 1; // Good!שימי לב שיש מקרים שבהם את גם קוראת ל-join על אובייקטים שלא אותחלו (בכל המקרים ש-k בין 1 ל-3).
פורסם 2006 באוקטובר 3019 שנים מחבר אז איפה אני מצהירה עליהם? בvoid main? ???וגם מה הjoin עושה, ואיפה ואיך אני צריכה לאתחל את האובייקטים שלא אותחלו (מקרים 1 עד 3) ???
פורסם 2006 באוקטובר 3019 שנים להצהיר עליהם ב-main לא יעזור, כי הם עדיין יהיו מחוץ ל-scope.את צריכה להצהיר עליהם או כאיברים בקלאס Cheir (ואז הם ישרדו גם מעבר לקריאה לפונקציה, אם תרצי), או שתצהירי עליהם בתחילת הפונקציה rotable.(את יכולה גם להצהיר עליהם בתוך לולאת ה-for, היות ואת לא משתמשת בהם מחוץ לה)הפונקציה join אומרת ל-thread הנוכחי לחכות ל-thread שכרגע רץ עד שיסתיים (כלומר ה-thread שבו רצה הפונקציה rotable יחכה ל-threadים של build,paint,moshav ו-ripud).שימי לב שבמקרים שהם לא אותחלו, את בכלל לא צריכה לעשות להם join.נניח, אם k == 2 אז רק build ו-paint רצים, כך שאי אפשר לעשות moshav.join או ripud.join.רק משהו אחד לא בדיוק הצלחתי להבין - את מנסה בעצם "לבנות" ארבעה כסאות, כשבכל כיסא רק חלק מהשלבים קורים? כי מה שיקרה כרגע הוא בעצם שבכיסא הראשון רק ה-build ייקרא, בשני ה-build וה-paint ייקראו, וכן הלאה.
פורסם 2006 באוקטובר 3019 שנים מחבר אממממ לא! אני צריכה לבנות מכונה שמייצרת כיסא, אבל שלא תעבוד על ריק <מתייחס רק עד להכנסת הכסא הרביעי> כלומר: בפעם הראשונה רק יש שלד, אח"כ שלד(לכיסא 2) וגם צביעה (כיסא 1) אח"כ שלד (לכיסא 3) וגם צביעה (כיסא 2) וגם הוספת מושב (כיסא 1) אח"כ שלד (לכיסא 4) וגם צביעה (כיסא 3) וגם הוספת מושב (כיסא 2) וריפוד (כיסא 1) וחוזר חלילה בלי הפסקה. מה אני צריכה לשנות כדי שזה יפעל ככה?
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.