如何在1到9之间生成9个随机数,不重复,一个接一个.它就像:假设生成的第一个随机数是4,那么下一个随机数必须在[1,9] - {4}中.我的第一种方法是将每个随机生成的数字添加到一个集合中,从而避免重复.但是在更糟糕的情况下,就像我们已经生成6并且我们必须再生成3个数字一样,这个过程有点慢.当范围从[1,9]变为[1,1000]时,这种方法听起来不正确.任何人都可以提出另一种方法.
我正在尝试使用一段代码,其中将生成随机数并将其保存在集合中,以便下次生成另一个随机数时,我可以检查这个新数字是否已经在列表中.
此方法的要点是生成1到118范围内的数字,不允许重复数字.
Random rand = new Random();
randomNum2 = rand.nextInt(118) + 1;
if (!generated.contains(randomNum2))
{
String strTemp = "whiteElements\\"+String.valueOf(randomNum2)+".JPG";
btnPuzzlePiece2.setIcon(new ImageIcon(strTemp));
generated.add(randomNum2);
btnPuzzlePiece2.repaint();
}
else
setPicForBtnGame1();
Run Code Online (Sandbox Code Playgroud)
但问题在于这段代码,因为程序继续生成数字,有可能有一个正确的随机数(在没有重复的范围内)想象在运行方法110次后...方法生成有效随机数的可能性减少到不到1%...这使程序有可能永远不会有1-118的数字列表,也浪费了太多的过程.
那怎么能正确写出来呢?ps我想到制作118个对象并将它们保存在一个集合中,然后生成一个随机对象,然后从列表中删除该对象,这样下一个元素就不会被复制.
请帮帮我...
我遵循了一个关于使用 java android studio 编写测验应用程序的 YouTube 教程,在教程中,您将问题放入数组列表中,然后从中随机得到问题,这可能会导致多次得到相同问题的问题。我该如何解决这个问题?我想过不使用随机,而是使用函数来获取列表中的下一个项目,但它对我不起作用。是的,这是我的代码
package com.example.quiz20;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.google.android.material.bottomsheet.BottomSheetDialog;
import java.util.ArrayList;
import java.util.Random;
public class MainActivity extends AppCompatActivity {
private TextView questionTV,questionNumberTV;
private Button option1Btn,option2Btn,option3Btn,option4Btn;
private ArrayList<QuizModel> quizModelArrayList;
Random random;
int currentScore = 0 , questionAttempted = 0, currentPos;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
questionTV= findViewById(R.id.idTVQuestion);
questionNumberTV=findViewById(R.id.idTVQuestionAttempted);
option1Btn=findViewById(R.id.idBtnOption1);
option2Btn=findViewById(R.id.idBtnOption2);
option3Btn=findViewById(R.id.idBtnOption3);
option4Btn=findViewById(R.id.idBtnOption4);
quizModelArrayList = new ArrayList<>();
random = new Random();
getQuizQuestion(quizModelArrayList);
currentPos …Run Code Online (Sandbox Code Playgroud) 我们正在尝试创建一个随机数生成器,以便为虚拟装配线上的产品创建序列号.我们得到了随机数生成,但由于它们是序列号,我们不希望它创建重复项.有没有办法可以返回并检查生成的数字是否已经生成,然后告诉它生成新数字是否重复,并重复此过程直到它具有"唯一" "号码.
我将实现独特的随机数生成器.但是在运行时,它有时会生成与之前相同的数字.在这种情况下如何确保生成的数字不重复?
以下是我的代码
int refno = 0;
SecureRandom r = new SecureRandom();
refno = r.nextInt(999999999);
Run Code Online (Sandbox Code Playgroud)