Java - 随机的nextInt方法返回相同的整数

问题描述 投票:2回答:2

我有一些我正在研究的代码。我被困在其中一部分涉及Random nextInt()方法。我遇到的这个问题是我的代码从我的数组的索引返回相同的完全随机整数。我打算做的是迭代for循环,对于我的16次迭代中的每次迭代,我想让Random nextInt()方法通过索引从数组中选择一个字符串并将其打印到屏幕上。目前,我能够从每个索引生成1个随机字符串。对于接下来的15次迭代,我的代码打印相同的随机选择,而不是随机选择一个新的。

import java.awt.Color;
import java.util.*;
import java.util.Random;

class Main {
    private int numStrings = 6; 
    private double guitarLength = 28.2;
    private String guitarManufacturer = "Gibson";
    private Color guitarColor = Color.RED; 
    private int musicLength = 16;
    private static int i = 1;
    private static Random rand = new Random();

public Main (){
    this.numStrings = numStrings; 
    this.guitarLength = guitarLength;
    this.guitarManufacturer = guitarManufacturer;
    this.guitarColor = guitarColor;
}

public Main (int strings, double length, String manufacturer, Color color){
     numStrings = strings;
     guitarLength = length;
     guitarManufacturer = manufacturer;
     guitarColor = color;
     System.out.printf("%d, %f, %s, %s", numStrings, guitarLength, guitarManufacturer, guitarColor + "\n");
}

public int getNumStrings() {
  return this.numStrings;
}

public double getGuitarLength() {
  return this.guitarLength;
}

public String getGuitarManufacturer() {
  return this.guitarManufacturer;
}

public Color getGuitarColor(){
  return this.guitarColor;
}

public static void playGuitar(){
    String[] musicNotes = {"A", "B", "C", "D", "E", "F", "G"};
    String[] musicDuration = {"(0.25)","(0.5)","(1)", "(2)","(4)"};
    int index1 = rand.nextInt(musicNotes.length);
    int index2 =  rand.nextInt(musicDuration.length);
     for (i = 1; i < 17; i++){
        System.out.print(musicNotes[index1]);
        System.out.print(musicDuration[index2] + ",");
        }
     }

public static void main (String args[] ){
    Main newGuitar = new Main(6, 24.75, "Les Paul", Color.white);
    playGuitar();
 }
}
java random
2个回答
4
投票

您只生成两个随机数(index1index2),然后在循环中多次使用它们。

您应该为循环的每次迭代生成新的随机数:

for (i = 1; i < 17; i++) {
    int index1 = rand.nextInt(musicNotes.length);
    int index2 =  rand.nextInt(musicDuration.length);
    System.out.print(musicNotes[index1]);
    System.out.print(musicDuration[index2] + ",");
}

0
投票

你在循环开始之前调用你的rand.nextInts,所以它们的值在整个循环中是相同的。你需要在循环中移动这两行。

© www.soinside.com 2019 - 2024. All rights reserved.