انجمن سایت کلیدستان



ساخت یک عدد تصادفی بدون تکرار (در رنامه نویسی اندروید)زمان کنونی: ۱۳۹۵/۰۹/۱۸، ۰۲:۱۸ ب.ظ
کاربران در حال بازدید این موضوع: 1 مهمان
نویسنده: parniaznet
آخرین ارسال: parniaznet
پاسخ 4
بازدید 1087

رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
ساخت یک عدد تصادفی بدون تکرار (در رنامه نویسی اندروید)

ساخت یک عدد تصادفی بدون تکرار (در رنامه نویسی اندروید)

#1
سلام
وقت بخیر
فرض کنید بین 1 تا 20 بخوایم رندوم عدد بگیریم و البته تکراری هم نداشته باشه و این پروسه رو برای 20 بار انجام بدیم و در نهایت بگیم شماره ها تموم شد، برای ساخت یک عدد رندوم بدون تکرار باید چه کدی نوشت؟

من برای ساخت عدد رندوم از کد زیر استفاده می کنم اما این کد تکراری هم میده :

کد پی‌اچ‌پی:
Random rand = new Random();
int i1 rand.nextInt((max min) + 1) + min
پاسخ

ساخت یک عدد تصادفی بدون تکرار (در رنامه نویسی اندروید)

#2
سلام
به نظر من بهتره اول یه متد بسازید 
داخل اون یک چرخه بسازید که به یک تعداد خاص ( که از شما مثلا 20 هست ) عدد راندوم بسازه و مقدار های اون رو  داخل یک ArrayList بریزه
بعد یک دکمه بسازید که اون مقدار رو دریافت کنه و برابر یک ارای لیست جدید قرار بده و با هر دفه زدن روی دکمه اولین ایتم ارای لیست رو حذف کنه یا بگیره بریزه داخل یک ارای لیست دیگه  ( که من داخل کدم از حذف استفاده کردم ) و با فشردن هر بار دکمه اون مقداری که داخل ایتم 0 هست رو فقط نشون بده و وقتی ایتم هامون تموم شد با یه کد دستوری که قراره تعداد ایتمهای ارای لیست رو بگیره بفهمیم ایتم هامون تموم شده و یک پیام یا هر چیز دیگه به کاربر نشون بده یا کد رو از اول شروع کنه
کدی که من برای این موضوع نوشتم براتون این هست شاید روش های سادتری برای این کار باشه ولی نظر من اینه فعلا اگه کسی هست نظر دیگه ای داشته باشه حتما بگه ممنون

کد پی‌اچ‌پی:
ArrayList<IntegerintegerList  getRandomSubset(20);
    @
Override
    
protected void onCreate(Bundle savedInstanceState) {
        
super.onCreate(savedInstanceState);
        
setContentView(R.layout.activity_main);
        final 
Button btn = (Button)findViewById(R.id.btn);

        
btn.setOnClickListener(new View.OnClickListener() {
            @
Override
            
public void onClick(View v) {
                if (
integerList.size()==0){
                    
integerList getRandomSubset(20);
                }else {
                    
btn.setText(String.valueOf(integerList.get(0)));

                    
integerList.remove(integerList.get(0));
                    if (
integerList.size()==0)
                        
btn.setText("تمام شد");
                }
            }
        });
    }


    public 
ArrayList<IntegergetRandomSubset(int max){
        
ArrayList<Integernumber = new ArrayList<Integer>();
        for (
int i 1<= max; ++inumber.add(i);
        
Collections.shuffle(number);
        return 
number;
    } 

موفق باشید
پاسخ
 سپاس شده توسط admin ، parniaznet

ساخت یک عدد تصادفی بدون تکرار (در رنامه نویسی اندروید)

#3
من قصد دارم

کد:
ArrayList<Integer> integerList  = getRandomSubset(20);

رو با مقداری که از اکتیویتی قبلی میارم پر کنم ، یعنی max ، در اکتیویتی قبلی به int تبدیل کردم عددی که از سرور میگیرم رو و در اکتیویتی جدید هم به صورت int دریافت می کنم اما این ارور رو بهم میده :

کد پی‌اچ‌پی:
04-17 22:21:35.981E/AndroidRuntime(23456): FATAL EXCEPTIONAsyncTask #6
04-17 22:21:35.981E/AndroidRuntime(23456): Processcom.milionbor.srpPID23456
04
-17 22:21:35.981E/AndroidRuntime(23456): java.lang.RuntimeExceptionAn error occured while executing doInBackground()
04-17 22:21:35.981E/AndroidRuntime(23456):     at android.os.AsyncTask$3.done(AsyncTask.java:300)
04-17 22:21:35.981E/AndroidRuntime(23456):     at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
04-17 22:21:35.981E/AndroidRuntime(23456):     at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
04-17 22:21:35.981E/AndroidRuntime(23456):     at java.util.concurrent.FutureTask.run(FutureTask.java:242)
04-17 22:21:35.981E/AndroidRuntime(23456):     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
04-17 22:21:35.981E/AndroidRuntime(23456):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
04-17 22:21:35.981E/AndroidRuntime(23456):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
04-17 22:21:35.981E/AndroidRuntime(23456):     at java.lang.Thread.run(Thread.java:841)
04-17 22:21:35.981E/AndroidRuntime(23456): Caused byjava.lang.IndexOutOfBoundsExceptionInvalid index 0size is 0
04
-17 22:21:35.981E/AndroidRuntime(23456):     at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
04-17 22:21:35.981E/AndroidRuntime(23456):     at java.util.ArrayList.get(ArrayList.java:308)
04-17 22:21:35.981E/AndroidRuntime(23456):     at com.milionbor.srp.Bazigari$SaveProductDetails.doInBackground(Bazigari.java:280)
04-17 22:21:35.981E/AndroidRuntime(23456):     at com.milionbor.srp.Bazigari$SaveProductDetails.doInBackground(Bazigari.java:1)
04-17 22:21:35.981E/AndroidRuntime(23456):     at android.os.AsyncTask$2.call(AsyncTask.java:288)
04-17 22:21:35.981E/AndroidRuntime(23456):     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
04-17 22:21:35.981E/AndroidRuntime(23456):     ... 4 more
04
-17 22:21:36.814E/WindowManager(23456): android.view.WindowLeakedActivity com.milionbor.srp.Bazigari has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{42660730 V.E..... R......D 0,0-684,192that was originally added here
04
-17 22:21:36.814E/WindowManager(23456):     at android.view.ViewRootImpl.<init>(ViewRootImpl.java:422)
04-17 22:21:36.814E/WindowManager(23456):     at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:250)
04-17 22:21:36.814E/WindowManager(23456):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
04-17 22:21:36.814E/WindowManager(23456):     at android.app.Dialog.show(Dialog.java:297)
04-17 22:21:36.814E/WindowManager(23456):     at com.milionbor.srp.Bazigari$SaveProductDetails.onPreExecute(Bazigari.java:273)
04-17 22:21:36.814E/WindowManager(23456):     at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:587)
04-17 22:21:36.814E/WindowManager(23456):     at android.os.AsyncTask.execute(AsyncTask.java:535)
04-17 22:21:36.814E/WindowManager(23456):     at com.milionbor.srp.Bazigari$NetCheck.onPostExecute(Bazigari.java:256)
04-17 22:21:36.814E/WindowManager(23456):     at com.milionbor.srp.Bazigari$NetCheck.onPostExecute(Bazigari.java:1)
04-17 22:21:36.814E/WindowManager(23456):     at android.os.AsyncTask.finish(AsyncTask.java:632)
04-17 22:21:36.814E/WindowManager(23456):     at android.os.AsyncTask.access$600(AsyncTask.java:177)
04-17 22:21:36.814E/WindowManager(23456):     at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
04-17 22:21:36.814E/WindowManager(23456):     at android.os.Handler.dispatchMessage(Handler.java:110)
04-17 22:21:36.814E/WindowManager(23456):     at android.os.Looper.loop(Looper.java:193)
04-17 22:21:36.814E/WindowManager(23456):     at android.app.ActivityThread.main(ActivityThread.java:5333)
04-17 22:21:36.814E/WindowManager(23456):     at java.lang.reflect.Method.invokeNative(Native Method)
04-17 22:21:36.814E/WindowManager(23456):     at java.lang.reflect.Method.invoke(Method.java:515)
04-17 22:21:36.814E/WindowManager(23456):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:829)
04-17 22:21:36.814E/WindowManager(23456):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:645)
04-17 22:21:36.814E/WindowManager(23456):     at dalvik.system.NativeStart.main(Native Method

وقتی متغیر max رو در همین اکتیویتی مقدار دهیش میکنم بدون ارور بالا میاد اما وقتی می خوام از اکتیویتی قبلی بگیرمش ارور میده. max رو به استرینگ تبدیل کردم و در یک تکس ویو نمایش دادم به درستی گرفته میشه از اکتیویتی قبلی اما نمیدونم چرا ارور میده
شما میدونید؟
 
پاسخ

ساخت یک عدد تصادفی بدون تکرار (در رنامه نویسی اندروید)

#4
کد


ArrayList<Integer> integerList  = getRandomSubset(20);
پاسخ


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان

آخرین کلیدهای غیررایگان

شما هم می توانید کلیدهای غیررایگان منتشر کنید (بیشتر بدانید)