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

java

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

java

משתמש סופר מקצוען
מנוי פרימיום
הנדסת תוכנה
אם כבר בתשלום - מעדיפה את copilot
 

RGS

משתמש פעיל
יוצרי ai
תודה רבה.
אין ספק שזה כבר מוריד את רמת הסרבול של הקוד.
יש לי גם תחושה שהשימוש גם בwhile וגם בfor מיותר.
אבל כשהשארתי רק את הwhile - זה רץ כל פעם רק פעם אחת.
אז שמתי את הwhile בתוך הfor כדי שירוץ 10 פעמים.
אז רץ יותר מפעם אחת, אבל כל פעם מספר אחר של פעמים... מה הבעיה?
ברור שזה ירוץ פעם אחת,
את בודקת בwhile האם המקום פנוי,
צריך לרוץ 10 פעמים וכל פעם לבדוק על מספר אחר האם פנוי.
זה ירוץ כל פעם כמות אחרת כי זה יכול לרוץ 9 פעמים עד שימצא מילה שלא הוגרלה,וזה יכול לרוץ פעם אחת...
מקווה שהובנתי...
 

מישהו12

מהמשתמשים המובילים!
הנדסת תוכנה
את בודקת בwhile האם המקום פנוי,
* אתה בודק ;)
זה ירוץ כל פעם כמות אחרת כי זה יכול לרוץ 9 פעמים עד שימצא מילה שלא הוגרלה,וזה יכול לרוץ פעם אחת...
הבנתי...
אז צריך לעשות שימוש בdo while? זה גם מה שChatGPT הציע. (חשדתי בזה מההתחלה. אבל מה זה משנה שהוא נעצר? הוא אמור לרוץ שוב, כי הוא בתוך הfor שמוגדר לרוץ 10 פעמים בכל מקרה, לא?)
 
  • חחח
Reactions: RGS

RGS

משתמש פעיל
יוצרי ai
אז צריך לעשות שימוש בdo while? זה גם מה שChatGPT הציע. (חשדתי בזה מההתחלה. אבל מה זה משנה שהוא נעצר? הוא אמור לרוץ שוב, כי הוא בתוך הfor שמוגדר לרוץ 10 פעמים בכל מקרה, לא?)
לא כל כך הבנתי מה התכוונת...
 

זיתים

משתמש צעיר
* אתה בודק ;)

הבנתי...
אז צריך לעשות שימוש בdo while? זה גם מה שChatGPT הציע. (חשדתי בזה מההתחלה. אבל מה זה משנה שהוא נעצר? הוא אמור לרוץ שוב, כי הוא בתוך הfor שמוגדר לרוץ 10 פעמים בכל מקרה, לא?)
אומנם הfor רץ 10 פעמים אך בכל סיבוב שלו הwhile בודק פעם אחת אם המילה כבר הייתה או לא, ואם כן הוא מדלג לסיבוב הבא..
 

מישהו12

מהמשתמשים המובילים!
הנדסת תוכנה
לא כל כך הבנתי מה התכוונת...
הwhile נמצא בתוך הfor.
הfor מוגדר לרוץ 10 פעמים.
אז מה זה משנה שהwhile נעצר? (כי הגיע לתא שכבר מסומן בtrue)
הוא לא אמור להיות מופעל מחדש בכל פעם שלולאת הfor רצה, כלומר 10 פעמים בכל מקרה?
(ותכל'ס, גם אז אני בבעיה, כי הוא ירוץ 10 פעמים, כשחלק מהפעמים הוא מצא true ולכן לא עשה שום דבר. אולי זה מה שהתכוונת מההתחלה?).
אוף, הסתבכתי.
-------------------------------
בודק do while.
 

java

משתמש סופר מקצוען
מנוי פרימיום
הנדסת תוכנה
אז צריך לעשות שימוש בdo while? זה גם מה שChatGPT הציע. (חשדתי בזה מההתחלה. אבל מה זה משנה שהוא נעצר? הוא אמור לרוץ שוב, כי הוא בתוך הfor שמוגדר לרוץ 10 פעמים בכל מקרה, לא?)
do while לא מתאים פה.
השימוש גם בwhile וגם בfor לא מיותר.
בfor אתה רץ כדי שכל המילים תודפסנה,
ובwhile אתה בודק שהמילה הנוכחית חדשה.
 

זיתים

משתמש צעיר
לכן do while יעזור פה ויחזור על עצמו עד שימצא מילה שלא true
 

RGS

משתמש פעיל
יוצרי ai
הwhile נמצא בתוך הfor.
הfor מוגדר לרוץ 10 פעמים.
אז מה זה משנה שהwhile נעצר? (כי הגיע לתא שכבר מסומן בtrue)
הוא לא אמור להיות מופעל מחדש בכל פעם שלולאת הfor רצה, כלומר 10 פעמים בכל מקרה?
(ותכל'ס, גם אז אני בבעיה, כי הוא ירוץ 10 פעמים, כשחלק מהפעמים הוא מצא true ולכן לא עשה שום דבר. אולי זה מה שהתכוונת מההתחלה?).
אוף, הסתבכתי.
-------------------------------
בודק do while.
את הFOR צריך להריץ 10 פעמים.
ואת הWHILE להריץ כל פעם עד שהוא מוצא מקום עדיין לא הוגרל.
אין איך ליעל את זה יותר מזה
 

java

משתמש סופר מקצוען
מנוי פרימיום
הנדסת תוכנה
לכן do while יעזור פה ויחזור על עצמו עד שימצא מילה שלא true
כל ההבדל בין do while לwhile זה בפעם הראשונה שהוא רץ - האם לבדוק או לא.
במקרה הזה - זה לא עושה הבדל.
 

java

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

commit

משתמש מקצוען
הנדסת תוכנה
הwhile נמצא בתוך הfor.
הfor מוגדר לרוץ 10 פעמים.
אז מה זה משנה שהwhile נעצר? (כי הגיע לתא שכבר מסומן בtrue)
הוא לא אמור להיות מופעל מחדש בכל פעם שלולאת הfor רצה, כלומר 10 פעמים בכל מקרה?
(ותכל'ס, גם אז אני בבעיה, כי הוא ירוץ 10 פעמים, כשחלק מהפעמים הוא מצא true ולכן לא עשה שום דבר. אולי זה מה שהתכוונת מההתחלה?).
אוף, הסתבכתי.
-------------------------------
בודק do while.
הקוד לא כתוב נכון.
אפשר להשתמש בdo-while, אבל לא זו הבעיה.
 

מישהו12

מהמשתמשים המובילים!
הנדסת תוכנה
do while לא מתאים פה.
למה לא?
אם הdo while נראה ככה:
הוא ירוץ לנצח עד שימצא תא בfalse, ויעביר אותו להמשך טיפול על פי הקוד.
בגלל שהוא בתוך הfor שרץ 10 פעמים, רק 10 תאים יוצגו בפועל.
(כי כל פעם, אם התא היה true, הוא ממשיך לבדוק. אם false, התא עובר את הטיפול, והלולאה רצה שוב, עד 10)
Java:
            do {
                position = r.nextInt(19);
            } while (used[position]);
השימוש גם בwhile וגם בfor לא מיותר.
בfor אתה רץ כדי שכל המילים תודפסנה,
ובwhile אתה בודק שהמילה הנוכחית חדשה.
תודה.
לכאורה אפשר לקצר, לא (אפשר לשים שני תנאים בdo while)? להגדיר משתנה counter. ואז ברגע שהוא יגיע ל10, הdo while יעצור גם אם התא בfalse.
כל ההבדל בין do while לwhile זה בפעם הראשונה שהוא רץ - האם לבדוק או לא.
במקרה הזה - זה לא עושה הבדל.
למה לא?
(אגב, בפועל עובד [בדקתי 3 פעמים ורץ 10 פעמים])
 

מישהו12

מהמשתמשים המובילים!
הנדסת תוכנה
הקוד לא כתוב נכון.
אפשר להשתמש בdo-while, אבל לא זו הבעיה.
אשמח להערות לשיפוץ. כאמור:
אני מתחיל בJava. המטרה שלי היא לכתוב קוד שתואם את רמת הידע שלי (שכרגע מסתכמת במערכים ולולאות) ולשדרג אותו עם הלימוד...
לכן בהחלט יתכן שהוא מסורבל.
השאלה אם אפשר לשפץ אותו ברמת הידע שלי, שצויינה לעיל.
הקוד כרגע
Java:
/* LearnLang.java
   Author: Ashi Vered
   Version: 1.0
   Date: 23.8.5784
 */

import java.util.Random;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        int score = 0;
        Scanner in = new Scanner(System.in);
        Random r = new Random();
        //array to mark which positions are used
        boolean[] used = new boolean[20];



        //array for original words
        String[] words_orig = new String[20];
        //list of original words
        words_orig[0] = "אבא";
        words_orig[1] = "אמא";
        words_orig[2] = "אח";
        words_orig[3] = "אחות";
        words_orig[4] = "סבא";
        words_orig[5] = "סבתא";
        words_orig[6] = "דוד";
        words_orig[7] = "דודה";
        words_orig[8] = "אחיין";
        words_orig[9] = "אחיינית";
        words_orig[10] = "יהלום";
        words_orig[11] = "חבר";
        words_orig[12] = "משפחה";
        words_orig[13] = "טוב";
        words_orig[14] = "רע";
        words_orig[15] = "אמת";
        words_orig[16] = "שקר";
        words_orig[17] = "מחשב";
        words_orig[18] = "יפה";
        words_orig[19] = "מכוער";

        //array for new words
        String[] words_new = new String[20];
        //list of new words
        words_new[0] = "father";
        words_new[1] = "mother";
        words_new[2] = "brother";
        words_new[3] = "sister";
        words_new[4] = "grandfather";
        words_new[5] = "grandmother";
        words_new[6] = "uncle";
        words_new[7] = "aunt";
        words_new[8] = "nephew";
        words_new[9] = "niece";
        words_new[10] = "diamond";
        words_new[11] = "friend";
        words_new[12] = "family";
        words_new[13] = "good";
        words_new[14] = "bad";
        words_new[15] = "true";
        words_new[16] = "false";
        words_new[17] = "computer";
        words_new[18] = "beautiful";
        words_new[19] = "ugly";


        for (int i = 0; i < 10; i++) {
            int selectArray = r.nextInt(2); // Randomly decide whether to prompt for a translation from original lang to new lang.
            int position; // Randomly choose a position in the arrays (i.e. choose which word to display).
            String answer;
            // check if position are used
            do {
                position = r.nextInt(19);
            } while (used[position]);
            used[position] = true;

                if (selectArray == 0) {
                    // show word in original language.
                    String word_orig = words_orig[position];
                    String word_new = words_new[position];
                    System.out.println("the word in Hebrew: " + word_orig);
                    System.out.println("Enter translate");
                    answer = in.next();
                    if (answer.equals(word_new)) {
                        System.out.println("success!");
                        score++;
                    } else {
                        System.out.println("Error!");
                        System.out.println("Real translate is: " + word_new);
                    }
                } else {
                    // show word in new language.
                    String word_orig = words_orig[position];
                    String word_new = words_new[position];
                    System.out.println("the word in English: " + word_new);
                    System.out.println("Enter translate");
                    answer = in.next();
                    if (answer.equals(word_orig)) {
                        System.out.println("success!");
                        score++;
                    } else {
                        System.out.println("Error!");
                        System.out.println("Real translate is: " + word_orig);
                    }
                }
            }
        System.out.println("Your score: " + score + "/10");



        in.close();
        }

    }
 

java

משתמש סופר מקצוען
מנוי פרימיום
הנדסת תוכנה
אותה תשובה ל2 השאלות -
לא שמתי לב לסדר הפעולות של הקוד,
יש באמת צורך.
לכאורה אפשר לקצר, לא (אפשר לשים שני תנאים בdo while)? להגדיר משתנה counter. ואז ברגע שהוא יגיע ל10, הdo while יעצור גם אם התא בfalse.
לא הבנתי. איך הcounter יגיע ל10 בלי שהוא הגריל מספר מתאים?
השאלה אם אפשר לשפץ אותו ברמת הידע שלי, שצויינה לעיל.
שפות אחרות אתה כן מכיר?
כי יש דברים שקל ללמוד להמיר משפה לשפה, אבל אם זו שפת תכנות ראשונה - זה שונה.
 

TzipiR

משתמש פעיל
Java:
        String[] wordsOrig = {"father", "mother", "brother", "sister", "grandfather", "grandmother", "uncle", "aunt", "nephew", "niece", "diamond", "friend", "family", "good", "bad", "true", "false", "computer", "beautiful", "ugly"};
        String[] wordsNew = {"אבא", "אמא", "אח", "אחות", "סבא", "סבתא", "דוד", "דודה", "אחיין", "אחיינית", "יהלום", "חבר", "משפחה", "טוב", "רע", "אמת", "שקר", "מחשב", "יפה", "מכוער"};
דבר ראשון ובסיסי (צורם לעין....)
 

מישהו12

מהמשתמשים המובילים!
הנדסת תוכנה
שפות אחרות אתה כן מכיר?
קצת פייתון, קצת batch (אם זה בכלל נחשב שפת תכנות).
אף שפה לא מכיר באמת.
רק כמו שראית, ברגע שכתבת בJS מה היית עושה - הבנתי את הרעיון (בצורה מאוד כללית, והיה צריך עוד הרבה עזרה. אבל את העיקרון).
כי אני מבין איך באופן כללי תכנות עובד. ויודע אנגלית די טוב.
אז אני מבין קוד ברוב השפות המודרניות שיצא לי להתקל בהן.
 

TzipiR

משתמש פעיל
Java:
        String[] wordsOrig = {"father", "mother", "brother", "sister", "grandfather", "grandmother", "uncle", "aunt", "nephew", "niece", "diamond", "friend", "family", "good", "bad", "true", "false", "computer", "beautiful", "ugly"};
        String[] wordsNew = {"אבא", "אמא", "אח", "אחות", "סבא", "סבתא", "דוד", "דודה", "אחיין", "אחיינית", "יהלום", "חבר", "משפחה", "טוב", "רע", "אמת", "שקר", "מחשב", "יפה", "מכוער"};
דבר ראשון ובסיסי (צורם לעין....)
השורה של התרגום התהפכה... אבל הרעיון...
 

קומקום חשמלי

משתמש פעיל
אשמח להערות לשיפוץ. כאמור:

לכן בהחלט יתכן שהוא מסורבל.
השאלה אם אפשר לשפץ אותו ברמת הידע שלי, שצויינה לעיל.
הקוד כרגע
Java:
/* LearnLang.java
   Author: Ashi Vered
   Version: 1.0
   Date: 23.8.5784
 */

import java.util.Random;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        int score = 0;
        Scanner in = new Scanner(System.in);
        Random r = new Random();
        //array to mark which positions are used
        boolean[] used = new boolean[20];



        //array for original words
        String[] words_orig = new String[20];
        //list of original words
        words_orig[0] = "אבא";
        words_orig[1] = "אמא";
        words_orig[2] = "אח";
        words_orig[3] = "אחות";
        words_orig[4] = "סבא";
        words_orig[5] = "סבתא";
        words_orig[6] = "דוד";
        words_orig[7] = "דודה";
        words_orig[8] = "אחיין";
        words_orig[9] = "אחיינית";
        words_orig[10] = "יהלום";
        words_orig[11] = "חבר";
        words_orig[12] = "משפחה";
        words_orig[13] = "טוב";
        words_orig[14] = "רע";
        words_orig[15] = "אמת";
        words_orig[16] = "שקר";
        words_orig[17] = "מחשב";
        words_orig[18] = "יפה";
        words_orig[19] = "מכוער";

        //array for new words
        String[] words_new = new String[20];
        //list of new words
        words_new[0] = "father";
        words_new[1] = "mother";
        words_new[2] = "brother";
        words_new[3] = "sister";
        words_new[4] = "grandfather";
        words_new[5] = "grandmother";
        words_new[6] = "uncle";
        words_new[7] = "aunt";
        words_new[8] = "nephew";
        words_new[9] = "niece";
        words_new[10] = "diamond";
        words_new[11] = "friend";
        words_new[12] = "family";
        words_new[13] = "good";
        words_new[14] = "bad";
        words_new[15] = "true";
        words_new[16] = "false";
        words_new[17] = "computer";
        words_new[18] = "beautiful";
        words_new[19] = "ugly";


        for (int i = 0; i < 10; i++) {
            int selectArray = r.nextInt(2); // Randomly decide whether to prompt for a translation from original lang to new lang.
            int position; // Randomly choose a position in the arrays (i.e. choose which word to display).
            String answer;
            // check if position are used
            do {
                position = r.nextInt(19);
            } while (used[position]);
            used[position] = true;

                if (selectArray == 0) {
                    // show word in original language.
                    String word_orig = words_orig[position];
                    String word_new = words_new[position];
                    System.out.println("the word in Hebrew: " + word_orig);
                    System.out.println("Enter translate");
                    answer = in.next();
                    if (answer.equals(word_new)) {
                        System.out.println("success!");
                        score++;
                    } else {
                        System.out.println("Error!");
                        System.out.println("Real translate is: " + word_new);
                    }
                } else {
                    // show word in new language.
                    String word_orig = words_orig[position];
                    String word_new = words_new[position];
                    System.out.println("the word in English: " + word_new);
                    System.out.println("Enter translate");
                    answer = in.next();
                    if (answer.equals(word_orig)) {
                        System.out.println("success!");
                        score++;
                    } else {
                        System.out.println("Error!");
                        System.out.println("Real translate is: " + word_orig);
                    }
                }
            }
        System.out.println("Your score: " + score + "/10");



        in.close();
        }

    }
2 דברים שהציקו לי
1. יש כאן הרבה קוד כפול עם הIF והELSE
2. חובה להוסיף תנאי עצירה נוסף לDO WHILE אחרת כשהכל יהיה TRUE הלולאה לא תעצר לעולם
 

אולי מעניין אותך גם...

הפרק היומי

הפרק היומי! כל ערב פרק תהילים חדש. הצטרפו אלינו לקריאת תהילים משותפת!


תהילים פרק לא

א לַמְנַצֵּחַ מִזְמוֹר לְדָוִד:ב בְּךָ יְהוָה חָסִיתִי אַל אֵבוֹשָׁה לְעוֹלָם בְּצִדְקָתְךָ פַלְּטֵנִי:ג הַטֵּה אֵלַי אָזְנְךָ מְהֵרָה הַצִּילֵנִי הֱיֵה לִי לְצוּר מָעוֹז לְבֵית מְצוּדוֹת לְהוֹשִׁיעֵנִי:ד כִּי סַלְעִי וּמְצוּדָתִי אָתָּה וּלְמַעַן שִׁמְךָ תַּנְחֵנִי וּתְנַהֲלֵנִי:ה תּוֹצִיאֵנִי מֵרֶשֶׁת זוּ טָמְנוּ לִי כִּי אַתָּה מָעוּזִּי:ו בְּיָדְךָ אַפְקִיד רוּחִי פָּדִיתָה אוֹתִי יְהוָה אֵל אֱמֶת:ז שָׂנֵאתִי הַשֹּׁמְרִים הַבְלֵי שָׁוְא וַאֲנִי אֶל יְהוָה בָּטָחְתִּי:ח אָגִילָה וְאֶשְׂמְחָה בְּחַסְדֶּךָ אֲשֶׁר רָאִיתָ אֶת עָנְיִי יָדַעְתָּ בְּצָרוֹת נַפְשִׁי:ט וְלֹא הִסְגַּרְתַּנִי בְּיַד אוֹיֵב הֶעֱמַדְתָּ בַמֶּרְחָב רַגְלָי:י חָנֵּנִי יְהוָה כִּי צַר לִי עָשְׁשָׁה בְכַעַס עֵינִי נַפְשִׁי וּבִטְנִי:יא כִּי כָלוּ בְיָגוֹן חַיַּי וּשְׁנוֹתַי בַּאֲנָחָה כָּשַׁל בַּעֲוֹנִי כֹחִי וַעֲצָמַי עָשֵׁשׁוּ:יב מִכָּל צֹרְרַי הָיִיתִי חֶרְפָּה וְלִשֲׁכֵנַי מְאֹד וּפַחַד לִמְיֻדָּעָי רֹאַי בַּחוּץ נָדְדוּ מִמֶּנִּי:יג נִשְׁכַּחְתִּי כְּמֵת מִלֵּב הָיִיתִי כִּכְלִי אֹבֵד:יד כִּי שָׁמַעְתִּי דִּבַּת רַבִּים מָגוֹר מִסָּבִיב בְּהִוָּסְדָם יַחַד עָלַי לָקַחַת נַפְשִׁי זָמָמוּ:טו וַאֲנִי עָלֶיךָ בָטַחְתִּי יְהוָה אָמַרְתִּי אֱלֹהַי אָתָּה:טז בְּיָדְךָ עִתֹּתָי הַצִּילֵנִי מִיַּד אוֹיְבַי וּמֵרֹדְפָי:יז הָאִירָה פָנֶיךָ עַל עַבְדֶּךָ הוֹשִׁיעֵנִי בְחַסְדֶּךָ:יח יְהוָה אַל אֵבוֹשָׁה כִּי קְרָאתִיךָ יֵבֹשׁוּ רְשָׁעִים יִדְּמוּ לִשְׁאוֹל:יט תֵּאָלַמְנָה שִׂפְתֵי שָׁקֶר הַדֹּבְרוֹת עַל צַדִּיק עָתָק בְּגַאֲוָה וָבוּז:כ מָה רַב טוּבְךָ אֲשֶׁר צָפַנְתָּ לִּירֵאֶיךָ פָּעַלְתָּ לַחֹסִים בָּךְ נֶגֶד בְּנֵי אָדָם:כא תַּסְתִּירֵם בְּסֵתֶר פָּנֶיךָ מֵרֻכְסֵי אִישׁ תִּצְפְּנֵם בְּסֻכָּה מֵרִיב לְשֹׁנוֹת:כב בָּרוּךְ יְהוָה כִּי הִפְלִיא חַסְדּוֹ לִי בְּעִיר מָצוֹר:כג וַאֲנִי אָמַרְתִּי בְחָפְזִי נִגְרַזְתִּי מִנֶּגֶד עֵינֶיךָ אָכֵן שָׁמַעְתָּ קוֹל תַּחֲנוּנַי בְּשַׁוְּעִי אֵלֶיךָ:כד אֶהֱבוּ אֶת יְהוָה כָּל חֲסִידָיו אֱמוּנִים נֹצֵר יְהוָה וּמְשַׁלֵּם עַל יֶתֶר עֹשֵׂה גַאֲוָה:כה חִזְקוּ וְיַאֲמֵץ לְבַבְכֶם כָּל הַמְיַחֲלִים לַיהוָה:
נקרא  4  פעמים

אתגר AI

הבעות פנים • אתגר 57

לוח מודעות

למעלה