آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

عدد تصادفی

GOOD  10 سال پیش  10 سال پیش
0 0

با سلام من میخواهم تو پروژه هنگ من به طور شانسی 3 تا حرف از کلمه مورد نظر نمایش داده بشه (همیشه) ولی مشکل اینجاست که چطور باید بگم که اگر این 3 عدد مثل هم شدند دوباره عدد شانسی بده؟ با کد زیر احتمال خیلی کم میشه ولی صفر نمیشه باید چی کار کرد؟!

    private void resetGame() {
        int randomNumber = (int) (Math.random() * words.length);
        currentWord = words[randomNumber].toLowerCase();
        char[] komak = currentWord.toCharArray();
        int randomkomak1 = (int) (Math.random() * komak.length);
        int randomkomak2 = (int) (Math.random() * komak.length);
        int randomkomak3 = (int) (Math.random() * komak.length);

        int rnd1 = 0;
        int rnd2 = 1;
        int rnd3 = 2;

        for (int i = 1; i == 100; i++) {
            if (randomkomak1 == randomkomak2 && randomkomak2 == randomkomak3) {
                randomkomak1 = (int) (Math.random() * komak.length);
                randomkomak2 = (int) (Math.random() * komak.length);
                randomkomak3 = (int) (Math.random() * komak.length);
            }
            if (randomkomak1 == randomkomak2) {
                randomkomak1 = (int) (Math.random() * komak.length);
                randomkomak2 = (int) (Math.random() * komak.length);
            }
            if (randomkomak1 == randomkomak3) {
                randomkomak1 = (int) (Math.random() * komak.length);
                randomkomak3 = (int) (Math.random() * komak.length);
            }
            if (randomkomak2 == randomkomak3) {
                randomkomak2 = (int) (Math.random() * komak.length);
                randomkomak3 = (int) (Math.random() * komak.length);
            }
            if ( !(randomkomak1 == randomkomak2) && !(randomkomak2 == randomkomak3)) {
                rnd1 = randomkomak1;
                rnd2 = randomkomak2;
                rnd3 = randomkomak3;
            } else {
                i = 20000;
            }
        }
0 0
اصلا از این کدی که نوشتم خوشم نمیاد کد بهتری هست بگذارید (10 سال پیش)
0 0
کلا این کد اشتباه (10 سال پیش)
 برای این سوال 5 پاسخ وجود دارد.
پاسخ به سوال 
مسعود فرمانی  10 سال پیش
0 0

برای اینکه احتمال تکرار در تولید اعداد تصادفی به صفر برسه:

  1. آرایه ای n تایی از اعداد صحیح درست کن و توی حلقه for آرایه رو اصطلاحا initialize کن
  2. یک متغیر بساز  به اسم max که و مقدارشو بذار برابر با بزرگترین ایندکس آرایه که میشه طول آرایه منهای 1
  3. یک عدد تصادفی بین 0 و max بساز و مقدار آرایه در خانه های 0ام و max ام رو با هم جابجا کن
  4. مقدار آرایه در خانه max ام میشه عدد تصادفی که میخوای پس مقدار آرایه در خونه max ام رو return کن
  5. برای اینکه این عدد دوباره تکرار نشود مقدار max رو یکی کم کن
  6. تا زمانیکه max > 0 از شماره 3 تا 5 رو تکرار کن
  7. هرموقع max= 0 میتونی دوباره مقدارشو به حالت اول برگردونی(البته الان آرایه ات shuffle شده )
 
publicclassActivityMainextendsActivity{
int[] numbers =newint[21];
int max;
@override
publicvoid onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
 for(int i =0; i <21; i++){///initializing array
numbers[i]= i;
}
max = numbers.length -1;//این متغیر مقدار بزرگترین ایندکس فعلی آرایه را دارد....از 20 شروع میشه
while(max >0){
Log.e("LOG",""+ uniqeRandomNumbers());
if(max ==0){
max = numbers.length -1;////هروقت مقدار مکس 0 شد،دوباره مقدار بیشترین ایندکس آرایه رو واریز میکنیم
}
}

}


publicint uniqeRandomNumbers(){

int r_index =(int)(Math.random()* max);//یک عدد تصادفی بین 0 و مکس بساز
///////////////////////////
int swap;
swap = numbers[max];
numbers[max]= numbers[r_index];
numbers[r_index]= swap;///////مقادیر ایندکس مکس و عدد تصادفی بدست اومده رو جابجا کن
return numbers[max--];//مقدار آرایه در ایندکس مکس رو برمیگردونه و یکی از مکس کم میکنه

}
}
0 0
البته این پاسخ رو توی یه سوال دیگه خود شما راجبه اعداد تصادفی گفته بودم...اگه مشکلی داری با این کدها بپرس... (10 سال پیش)
پاسخ به سوال 
GOOD  10 سال پیش
0 0

فردا صبح کد شما(اقای Masoud Farmani) رو میبینم سوال داشتم حتما میپرسم

این کد رو چند بار امتحان کردم انگار درست هست سما هم امتحان کنید جوابش رو بگید

 package ESMAEILI.JAVAD;

import java.util.ArrayList;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.Button;
import android.widget.TextView;


public class Tajrobe2Activity extends Activity {

    private String[]          words            = new String[]{
                                               "Hello",
                                               "Orange",
                                               "Android",
                                               "Programming",
                                               "Object Oriented",
                                               "Converter"
                                               };
    private String            currentWord;
    private TextView          txtDashes;
    private TextView          txtWrong;

    private ArrayList<Button> invisibleButtons = new ArrayList<Button>();
    private int               nWrong;
    private int               nCorrect;

    public int                lenght;

    public int                randomkomak1     = (int) (Math.random() * lenght);
    public int                randomkomak2     = (int) (Math.random() * lenght);
    public int                randomkomak3     = (int) (Math.random() * lenght);
    public int                number           = 0;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        resetGame();

    }


    public void resetGame() {
        int randomNumber = (int) (Math.random() * words.length);
        currentWord = words[randomNumber].toLowerCase();
        char[] komak = currentWord.toCharArray();
        lenght = komak.length;

        randomkomak1 = (int) (Math.random() * lenght);
        randomkomak2 = (int) (Math.random() * lenght);
        randomkomak3 = (int) (Math.random() * lenght);

        check();

        Log.i("log", "random 1 = " + randomkomak1);
        Log.i("log", "random 2 = " + randomkomak2);
        Log.i("log", "random 3 = " + randomkomak3);

        //   if (number == 2) {

        //     }

    }


    public void check() {
        number = 0;
        if (randomkomak1 == randomkomak2) {

        } else {
            number++;
        }
        if (randomkomak2 == randomkomak3) {

        } else {
            number++;
        }
        if ( !(number == 2)) {
            randomkomak1 = (int) (Math.random() * lenght);
            randomkomak2 = (int) (Math.random() * lenght);
            randomkomak3 = (int) (Math.random() * lenght);
            check();
        }
        if (number == 2) {

            return;
        }

        //  Log.i("log", "x = " + x);

    }
}
پاسخ به سوال 
Reza  10 سال پیش
0 0

سلام ، یه راه خیلی کوتاه و ساده :

برای اینکه احتمال تکرار صفر مطلق بشه ( نه اینکه کم بشه ) :

 int randomNumber = (int) (Math.random() * words.length);
currentWord = words[randomNumber].toLowerCase();
char[] komak = currentWord.toCharArray();

int randomkomak1;
int randomkomak2;
int randomkomak3;

randomkomak1 = (int) (Math.random() * komak.length);

do {
randomkomak2 = (int) (Math.random() * komak.length);
}
while (randomkomak2 == randomkomak1);

do {
randomkomak3 = (int) (Math.random() * komak.length);
}
while ((randomkomak3 == randomkomak1) || (randomkomak3 == randomkomak2));

از اینجا به بعد randomkomak1 و randomkomak2 و randomkomak3 ، سه اندیس متفاوت هستند

پاسخ به سوال 
GOOD  10 سال پیش
0 0

این کد رو نوشتم جواب داد هر 3 متفاوت میشه

 package ESMAEILI.JAVAD;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;


public class AActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Button btn = (Button) findViewById(R.id.brn);
        btn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {

    
                  a();
            }
        });
    }


    public void a() {
        int number = 0;
        int rnd1 = (int) (Math.random() * 5);
        int rnd2 = (int) (Math.random() * 5);
        int rnd3 = (int) (Math.random() * 5);

        if (rnd1 != rnd2) {
            number++;
        }
        if (rnd2 != rnd3) {
            number++;
        }
        if (rnd1 != rnd3) {
            number++;
        }

        if (number == 3) {
            Log.i("log", "rnd1 = " + rnd1);
            Log.i("log", "rnd2 = " + rnd2);
            Log.i("log", "rnd3 = " + rnd3);

        } else {

            a();

        }
    }
}
0 0
میشه if هارو اینجوی نوشت بهتره if (rnd1 != rnd2) { if (rnd2 != rnd3) { if (rnd1 != rnd3) { number++; } } } (10 سال پیش)
0 0
پایین گذاشتم (10 سال پیش)
پاسخ به سوال 
GOOD  10 سال پیش
0 0

     if (rnd1 != rnd2) {
            if (rnd2 != rnd3) {
                if (rnd1 != rnd3) {
                    number++;
                }
            }
        }

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .