不同的随机数

时间:2018-10-02 06:03:21

标签: java android random

所以问题如下 我设法制作了一个小程序,其中出现了随机图像,并且作为一个广播小组正在处理3个多项选择题。 图片是从6张图片中随机设置的,而3个答案是从包含图片所有名称的字符串数组中获取的。 现在,第一个单选按钮是始终具有正确答案的按钮,因为它的值与设置图片的int相同,而另外两个则是从我指定的字符串值集中随机产生的。

两个问题是

一个

有时候我会在两个或三个单选按钮中得到相同的答案,这是一个问题。所以我想要它,以使答案无法重复。

两个

第一个答案始终是正确答案这一事实是有问题的,因此我该如何随机选择它的位置并让复选按钮始终能够知道什么是正确答案。

//下面是整个Java代码

package com.example.hamdanali.imageview;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;

import java.util.LinkedHashSet;

public class imagegame extends AppCompatActivity {

ImageView pic ;
Button    btn1;
Button    btn2;
Button    btn3;
Button    check;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_imagegame);

    pic =   findViewById(R.id.Pic) ;
    btn1=   findViewById(R.id.Btn1);
    btn2=   findViewById(R.id.Btn2);
    btn3=   findViewById(R.id.Btn3);
    check=  findViewById(R.id.Check);

    final int array[]={
            R.drawable.one  ,
            R.drawable.two  ,
            R.drawable.three,
            R.drawable.four ,
            R.drawable.five ,
            R.drawable.six  , };

    final String picname[]={

            "One"  ,
            "Two"  ,
            "Three",
            "Four" ,
            "Five" ,
            "Six"  };

    check.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

        //to randomly select the buttons and the images

            int i=(int)(Math.floor(array.length*Math.random()));
            int j=(int)(Math.floor(array.length*Math.random()));
            int k=(int)(Math.floor(array.length*Math.random()));

            pic.setImageResource(array[i]);
            btn1.setText(picname[i]);
            btn2.setText(picname[j]);
            btn3.setText(picname[k]);



        }



        });
    }




    }

/////下面是GUI的屏幕截图

this is it working This is it working properly (what I want it to do "the answer is not repeated"

我对此感到厌倦,但我不断收到这些错误

    check.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {


            List<int> randomNums = new ArrayList<>();
            //type argument can not be of primitive type

            for (int i=0; i<3; i++) {
                int randomNum = (int)(Math.floor(array.length*Math.random()));
                while (randomNums.contains(randomNum))
                    //Cannot resolve method "contains(int)"
                    randomNum = (int)(Math.floor(array.length*Math.random()));
                randomNums.add(randomNum);
                //Cannot resolve method "add(int)"
            }

            pic.setImageResource(randomNums.get(0));
            Collections.shuffle(randomNums);
            //shuffle(java.util.List<?>)in Collections cannot be applied to    (List<int>)
            //
            btn1.setText(randomNums.get(0));
            btn2.setText(randomNums.get(1));
            btn3.setText(randomNums.get(2));
            //Cannot resolve method "get(int)"

1 个答案:

答案 0 :(得分:0)

您始终将array [i]设置为第一个答案...并且您的随机函数可以将相同的结果返回两次或三次。我想这样:

package com.example.hamdanali.imageview;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;

import java.util.List;
import java.util.ArrayList;
import java.util.LinkedHashSet;

public class imagegame extends AppCompatActivity {

ImageView pic ;
Button    btn1;
Button    btn2;
Button    btn3;
Button    check;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_imagegame);

    pic =   findViewById(R.id.Pic) ;
    btn1=   findViewById(R.id.Btn1);
    btn2=   findViewById(R.id.Btn2);
    btn3=   findViewById(R.id.Btn3);
    check=  findViewById(R.id.Check);

    final int array[]={
            R.drawable.one  ,
            R.drawable.two  ,
            R.drawable.three,
            R.drawable.four ,
            R.drawable.five ,
            R.drawable.six  , };

    final String picname[]={

            "One"  ,
            "Two"  ,
            "Three",
            "Four" ,
            "Five" ,
            "Six"  };

    check.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

        //to randomly select the buttons and the images
        //this should fix your repeated answers
            List<Integer> randomNums = new ArrayList();

            for (int i=0; i<3; i++) {
                int randomNum = (int)(Math.floor(array.length*Math.random()));
                while (randomNums.contains(randomNum))
                    randomNum = (int)(Math.floor(array.length*Math.random()));
                randomNums.add(randomNum);
            }

            pic.setImageResource(randomNums.get(0));
            Collections.shuffle(randomNums);
            btn1.setText(randomNums.get(0));
            btn2.setText(randomNums.get(1));
            btn3.setText(randomNums.get(2));



        }



    });    
}
}