Отличные случайные числа

Итак, проблема в следующем Мне удалось сделать небольшую программу, в которой появлялись случайные изображения и 3 вопроса с несколькими вариантами ответов в группе Radio. изображение выбирается случайным образом из пула из 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]);



        }



        });
    }




    }

//// ниже приведен снимок экрана с графическим интерфейсом

Отличные случайные числаОтличные случайные числа

я устал от этого, но я продолжаю получать эти ошибки

    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)"
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
67
1

Ответы 1

Вы всегда устанавливаете 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));



        }



    });    
}
}

Я попытался добавить комментарий и случайно заменил то, что вы написали, своим редактированием, извините, я все еще новичок :)

TheLegandOf9gag 02.10.2018 11:36

ох, я забыл импортировать arraylist. вы его импортировали? и измените List <int> на List <Integer> ... Моя проблема. Попробуй сейчас я отредактировал пост.

Amadej Kastelic 02.10.2018 12:05

Другие вопросы по теме