עבור לתוכן

ג'אווה - למה הסקריפט הבא לא עובד טוב?

Featured Replies

פורסם

import java.util.*;
class probability
{
public static void main(String[]args)
{
int[]a = new int[7];
for(int i=0; i<a.length; i++)
a[i]=0;
for(int j=0; j<1000000; j++)
a[(int)Math.random()*6]++;
for(int k=1; k<a.length; k++)
System.out.println(a[k] +" "+k);
}
}

המטרה היא לבצע מיליון איטרציות של "הטלת קובייה" בעצם ולבדוק את היחס שיוצא בין כל מספר (מ1 עד 6).

מה שבעצם עשיתי בשורה הזו:

a[(int)Math.random()*6+1]++;

זה להוסיף לתא ה{מספר אקראי מ1 עד6} עוד אחד. בעצם דרך השורה הזאת אני מונה במערך את מספר הפעמים שיצא כל מספר מ1-6.

למה בסוף הפלט הוא כזה:

1000000 1
0 2
0 3
0 4
0 5
0 6

כלומר כל הערכים נכנסו לתא הראשון משום מה.

תודה :)

פורסם

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

תנסה לכתוב את זה ככה:


a[((int)(Math.random()*6))+1]++;

פורסם
  • מחבר

וואו אני פשוט אף פעם לא מסוגל לפרסם את הפוסטים שלי שקשורים בג'אווה בשפות תכנות :kopfpatsch:

תעבירו בבקשה

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

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

מישהו יודע איך?

עריכה: אוקיי, עכשיו ראיתי את מה שרשמת. תודה רבה, זה עבד :)

וסתם בשביל הקטע, התוצאות:

166707 1

166550 2

166631 3

167429 4

165870 5

166813 6

פורסם

עריכה: טעיתי קודם - הצורה שכתבתי לך קודם היא הצורה הנכונה.

פורסם

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

הקוד לא עבד לך מסיבה פשוטה - ההמרה ל-int התבצעה לפני הכפל ב-6. ה-random הגריל מספר בין 0 ל-1, שאז הומר ל-int (והפך ל-0), ולכן תמיד קיבלת 1.

אגב, יש סיבה שאתה משתמש במערך בגודל 7 ומתעלם מהתא הראשון (במקום פשוט להשתמש במערך בגודל 6)?

פורסם

זה פורום תוכנה ולא תיכנות. :)

מועבר למקום המתאים.

פורסם

תיצור אובייקט מסוג RANDOM

לאובייקט הזה יש מתודה שנקראת NEXT שמקבל כ INT

את הערך המקסימלי . אתה צריך להשתמש ב 5 כערך מקסימלי ולהוסיף אחד לתוצאה כך שהערכים ינועו

בין 1 ו 6

ארכיון

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

דיונים חדשים