עבור לתוכן

עזרה בשיעורי בית בג'אווה

Featured Replies

פורסם

אני בכיתה י' אז זה בטח יהיה לכם קל... התרגיל בכל אופן:

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

import java.util.Scanner;
public class ArrayHW1
{
public static void main(String[]args)
{
Scanner input=new Scanner(System.in);
int[] A=new int[10];
int I;
for(I=0; I<10; I++)
{
System.out.println("נא הכנס את איבר מס' "+(I+1));
A[I]=input.nextInt();

אבל לא הצלחתי לעשות את הקטע עם להוציא את המספר הכי גבוה, כלומר איך בכלל לעשות את זה.

תודה..

פורסם

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

פורסם
  • מחבר

תודה, הסתדרתי.

אבל יש לי שאלה קטנה,

עשיתי ככה:

import java.util.Scanner;
public class ArrayHW1
{
public static void main(String[]args)
{
Scanner input=new Scanner(System.in);
int[] A=new int[10];
int I;
int X=-100;
int Z=0;
for(I=0; I<10; I++)
{
System.out.println("נא הכנס את איבר מס' "+(I+1));
A[I]=input.nextInt();
if(A[I]>X)
{
Z=I;
X=A[I];
}
}
System.out.print("המספר הגדול ביותר במערך הוא "+X);
System.out.println(" ומיקומו הוא "+Z);
}
}

הוא לא נתן לי לעשות קומפילציה בלי שהגדרתי לו שZ=0. למה אני חייב להגיד בהתחלה שZ=0? הרי יש שורה שאומרת במפורש למה הוא שווה..

פורסם

אם תסתכל על כל הדרכים שאפשר להגיע מהשורה שבו אתה מגדיר את Z לשורה בה אתה מדפיס אותו, יש דרכים שעוברות דרך התניות שאי אפשר לדעת את ערכן בזמן קימפול (ורק בהן אתה שם בו ערך), לכן מבחינת הקומפיילר יתכן שבזמן ריצה תנסה להדפיס את המשתנה לפני שאתחלת אותו והוא מכריח אותך להגדיר את ערכו.

פורסם

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

הרבה יותר יעיל ונכון לעבוד ככה.

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

פורסם
  • מחבר

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

ועוד שאלה שאני צריך עזרה:

תוכנית הקולטת 10 מס' למערך ומדפיסה את המס' אשר מופיע הכי הרבה פעמים במערך

איך עושים את זה?

פורסם

מיין את המערך ותסרוק אותו כשאתה בודק/זוכר מי הרצף הכי ארוך.

פורסם
  • מחבר

אם לא איכפת לך לכתוב את הכמה שורות של איך עושים את זה.. לא בדיוק הבנתי אותך

פורסם

האלגוריתם הזה אמור להראות כך (צורתו הבסיסית ביותר)

כתבתי בC# שזה דיי דומה לג'אווה

      int[] Arr = { 1, 2, 3, 4, 5, 6, 7, 5, 4, 5, 6 };
int BigstNum = Arr[0];
int BigstPos=0;
for (int i=1;i<Arr.Length-1;i++)
if (Arr[i] > +BigstNum)
{
BigstNum = Arr[i];
BigstPos = i;
}

בסוף התוכנית

BigstNum יכיל את הערך של המספר הכי גדול

BigstPos יכיל את המיקום של המספר הכי גדול

פורסם

int[] arr = new int[]{4,3,2,4};
int who, how = 1, tmp = 1;
Arrays.sort(arr);
who = arr[0];
for (int i=1;i<arr.length;i++)
{
if (arr[i] == arr[i-1])
{
tmp++;
} else {
if (tmp >= how)
{
how = tmp;
who = arr[i-1];
}
}
}

פורסם

וטף יש פונקציה כזאת?(SORT)

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

פורסם

רק שאתה ענית על שאלה אחת ואני אחרת (הוא שאל באמצע עוד שאלה).

פורסם

מה? הקטע של אם המספר הגבוה מופיע מספר פעמים?

תסתכל שוב על התוכנית שלי

פורסם

לא, הקטע שהוא שאל שאלה נוספת.

פורסם

צודק עכשיו ראיתי...

ארכיון

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

דיונים חדשים