我不得不试图改组数组的值并返回它们。如果用户回答" y"我必须询问用户是否要使用循环进行随机播放。然后如果答案是" n"则显示随机播放值。然后离开循环。我将不胜感激任何帮助。
这是我到目前为止所拥有的。
主要课程
package lab4b;
import java.util.Scanner;
public class Lab4B
{
public static void main(String[] args)
{
final int size = 15;
char q = 'y';
boolean flag = false;
Shuffler myShuffler = new Shuffler(size);
myShuffler.display();
System.out.println();
Scanner input = new Scanner(System.in);
System.out.printf("Do you wish to shuffle this numbers? ");
String input2 = input.next();
myShuffler.shuffle();
myShuffler.display();
System.out.printf("Do you wish to shuffle this numbers? ");
input.close();
}
}
Shuffler class
package lab4b;
import java.util.Random;
public class Shuffler
{
private int[] data;
public Shuffler(int size)
{
data = new int[size];
for (int i = 0; i < size; i++)
{
data[i] = i + 1;
}
}
public void shuffle()
{
for (int i = 0; i < data.length; i++)
{
Random r = new Random(15);
int second = r.nextInt(15) + 1;
int temp = data[i];
data[i] = data[second];
data[second] = temp;
}
}
public void display()
{
String values = "";
for (int i = 0; i < data.length; i++)
{
if (i < 15)
{
values += (i + 1);
if (i < 14)
{
values += ", ";
}
}
}
System.out.printf("Array Contents: %s \n", values);
}
}
答案 0 :(得分:2)
我不知道你为什么要自己编写Shuffle逻辑代码。 Java Collections有一个内置的Shuffle:http://docs.oracle.com/javase/7/docs/api/java/util/Collections.html#shuffle(java.util.List)。还有一个也需要随机:http://docs.oracle.com/javase/7/docs/api/java/util/Collections.html#shuffle(java.util.List,java.util.Random)
将数组转换为List,让Collections随机播放,将列表转回数组。
答案 1 :(得分:0)
这是可能失败的部分:
for (int i = 0; i < data.length; i++)
{
Random r = new Random(15);
int second = r.nextInt(15) + 1;
int temp = data[i];
data[i] = data[second];
data[second] = temp;
}
您正在[1,15]范围内创建第二个索引,但如果data
数组更小或更大,该怎么办?如果规模越小,如果更大,您将获得IndexOutOfBoundsException
,您总是将当前元素与索引1到15的那些元素交换。
在该部分中,您将列出索引而不是值,最多只列出15个:
if (i < 15) //what if data was bigger than 15 elements?
{
values += (i + 1); //you might want to use data[i] instead of (1 + 1) here.
if (i < 14)
{
values += ", ";
}
}