我想通过多次使用Math.random对数组进行加扰,但是我不知道如何将随机int进行加扰并多次使用随机int。
public static void scramble(int[] array){
for(int i = 0 ; i < array.length - 1; i++){
int temp = array[i];
array[i] = array[random];
array[random] = temp;}}
public int random (){
return (int)(Math.random() *9) + 1;}
输出
100 101 102 103 104 105 106 107 108 109 //Default
101 104 102 105 103 106 108 109 100 107 //Scrambled
100 101 102 103 104 105 106 107 108 109//Then sorted
整个驱动程序
import java.lang.Math;
public class Driver03{
public static void main(String[] args){
int[] array = {100, 101, 102, 103, 104, 105, 106, 107, 108, 109};
print(array);
scramble(array);
print(array);
print(array);}
public static void print(int[] array){
for(int x = 0; x < array.length; x++){
System.out.print(" " + array[x]);}
System.out.println("");}
public static void scramble(int[] array){
int random = random();
for(int i = 0 ; i < array.length - 1; i++){
int temp = array[i];
array[i] = array[random];
array[random] = temp;}}
public int random (){
return (int)(Math.random() *9) + 1;}
}
首先,您必须像“ random()”那样调用随机函数,而不仅仅是随机
尝试此代码:
public static void scramble(int[] array){
int random = random();
for(int i = 0 ; i < array.length - 1; i++){
int temp = array[i];
array[i] = array[random];
array[random] = temp;}}
public int random (){
return (int)(Math.random() *9) + 1;}
这里是使用Fisher-Yates shuffling algorithm的实现。
public static void main( String[] args )
{
int[] values = new int[] { 100, 101, 102, 103, 104, 105, 106, 107, 108, 109 };
System.out.println( "Start: " + Arrays.toString( values ) );
scramble( values );
System.out.println( "Scrambled: " + Arrays.toString( values ) );
Arrays.sort( values );
System.out.println( "Sorted: " + Arrays.toString( values ) );
}
public static void scramble( int[] array )
{
// Scramble using the Fisher-Yates shuffle.
Random rnd = new Random();
for ( int i = 0; i < array.length - 1; i++ )
{
int random = i + rnd.nextInt( array.length - 1 - i );
int temp = array[ random ];
array[ random ] = array[ i ];
array[ i ] = temp;
}
}
它不使用Math.random()
,而是使用Random
的实例。