נעמה. פורסם 2006 באוקטובר 25 Share פורסם 2006 באוקטובר 25 יש לי שאלה: : הדמיה של קו ייצור כסאות הכולל 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 }} קישור לתוכן שתף באתרים אחרים More sharing options...
Ghosthunter פורסם 2006 באוקטובר 25 Share פורסם 2006 באוקטובר 25 תבדקי את הelse ifים שלך. קישור לתוכן שתף באתרים אחרים More sharing options...
נעמה. פורסם 2006 באוקטובר 26 מחבר Share פורסם 2006 באוקטובר 26 מה השינוי ב if- else שיש ב JAVA לעומת ++C?אין לי מושג איך עושים את זה. קישור לתוכן שתף באתרים אחרים More sharing options...
k-o-b-y פורסם 2006 באוקטובר 26 Share פורסם 2006 באוקטובר 26 קודם כל, בלי לקרוא את הקוד לעומק, את צריכה לתחום ב- {} בלוקי 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); } קישור לתוכן שתף באתרים אחרים More sharing options...
שניצל פורסם 2006 באוקטובר 27 Share פורסם 2006 באוקטובר 27 מה השינוי ב if- else שיש ב JAVA לעומת ++C?אין לי מושג איך עושים את זה.אין שינוי, הטעות שלך הייתה קורה גם ב-C++... קישור לתוכן שתף באתרים אחרים More sharing options...
mega1234 פורסם 2006 באוקטובר 27 Share פורסם 2006 באוקטובר 27 עדיף לך להשתמש במשפט SWITCH.http://java.sun.com/docs/books/tutorial/java/nutsandbolts/switch.html קישור לתוכן שתף באתרים אחרים More sharing options...
נעמה. פורסם 2006 באוקטובר 30 מחבר Share פורסם 2006 באוקטובר 30 סליחה שלא ידעתי שגם בJAVA צריך סוגריים, חשבתי שזו תוכנה חכמה.זה עדיין רושם לי טעויות, לדוגמא:java:81: not a statement BuildCheir build = new BuildCheir(n,k); ^מה זה אומר? קישור לתוכן שתף באתרים אחרים More sharing options...
שניצל פורסם 2006 באוקטובר 30 Share פורסם 2006 באוקטובר 30 ודאי שב-Java צריך סוגריים. אפשר בלי סוגריים, אבל זה לא יעשה את אותו הדבר (בלי סוגריים, רק הפקודה הראשונה שאחרי ה-if תכלל בתוכו, והפקודות הבאות ייקראו בכל מקרה).לגבי השגיאה שלך, כנראה יש לך טעות איפשהו מסביב לשורה הזו. כתבי כאן את השורה הזו וגם כמה שורות לפניה ואחריה, ונראה מה הבעיה. קישור לתוכן שתף באתרים אחרים More sharing options...
נעמה. פורסם 2006 באוקטובר 30 מחבר Share פורסם 2006 באוקטובר 30 התכנית היא בדיוק במו הציטוט למעלה רק עם סוגריים סביב ה if-else קישור לתוכן שתף באתרים אחרים More sharing options...
שניצל פורסם 2006 באוקטובר 30 Share פורסם 2006 באוקטובר 30 הממ את יכולה להעלות את הכל בכל זאת? קישור לתוכן שתף באתרים אחרים More sharing options...
נעמה. פורסם 2006 באוקטובר 30 מחבר Share פורסם 2006 באוקטובר 30 הנה זה:// 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. קישור לתוכן שתף באתרים אחרים More sharing options...
שניצל פורסם 2006 באוקטובר 30 Share פורסם 2006 באוקטובר 30 לגבי שתי השגיאות הראשונות אני לא בטוח, אבל נראה לי שלפני 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). קישור לתוכן שתף באתרים אחרים More sharing options...
נעמה. פורסם 2006 באוקטובר 30 מחבר Share פורסם 2006 באוקטובר 30 אז איפה אני מצהירה עליהם? בvoid main? ???וגם מה הjoin עושה, ואיפה ואיך אני צריכה לאתחל את האובייקטים שלא אותחלו (מקרים 1 עד 3) ??? קישור לתוכן שתף באתרים אחרים More sharing options...
שניצל פורסם 2006 באוקטובר 30 Share פורסם 2006 באוקטובר 30 להצהיר עליהם ב-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 ייקראו, וכן הלאה. קישור לתוכן שתף באתרים אחרים More sharing options...
נעמה. פורסם 2006 באוקטובר 30 מחבר Share פורסם 2006 באוקטובר 30 אממממ לא! אני צריכה לבנות מכונה שמייצרת כיסא, אבל שלא תעבוד על ריק <מתייחס רק עד להכנסת הכסא הרביעי> כלומר: בפעם הראשונה רק יש שלד, אח"כ שלד(לכיסא 2) וגם צביעה (כיסא 1) אח"כ שלד (לכיסא 3) וגם צביעה (כיסא 2) וגם הוספת מושב (כיסא 1) אח"כ שלד (לכיסא 4) וגם צביעה (כיסא 3) וגם הוספת מושב (כיסא 2) וריפוד (כיסא 1) וחוזר חלילה בלי הפסקה. מה אני צריכה לשנות כדי שזה יפעל ככה? קישור לתוכן שתף באתרים אחרים More sharing options...
Recommended Posts
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.