2016-02-14 2 views
-2

Я пишу колоду с 52 карточками. Все идеально, но я не могу понять, как перетасовать его, не используя никакой библиотеки из java и используя метод сортировки, встроенный в java. Вот мой код. Я пытался что-то понять, и до сих пор я не могу.Как перемешать массив строк без использования библиотеки и метода сортировки?

String [] deck2=new String [52]; 
String[] deck=new String [52]; 
String suits[]={"Spades","Hearts","Diamonds","Clubs"}; 
String rank[]={"2","3","4","5","6","7","8","9","10","Jack","King","Queen","Ace"}; 

for(int i=0;i<deck.length;i++){ 
    deck[i]=rank[i%13]+" "+"of "+suits[i/13]; 
    deck2[i]=deck[i]; 
    System.out.println(deck[i]); 

}}} 
+1

Вы можете использовать math.random() –

+0

Я думаю, что этот ответ полезным для Вас http://stackoverflow.com/questions/16313567/shuffling-a-deck-of-cards -redundancy-after-swapping-two-values ​​/ 16313657 # 16313657 –

+0

Нет Я не могу использовать встроенную библиотеку, например, математику или сортировку. Это должно быть все само по себе. –

ответ

0
for (int i = 0; i < 500; i++) { 
    int from = (int) (Math.random() * array.length); //The place to get the first from 
    int to = (int) (Math.random() * array.length); // The place to get the second from 
    String perm = array[from]; // Store the "from" value 
    array[from] = array[to]; // Set the first value to the second 
    array[to] = perm; // Set the second value to the first 
} 

Я не знаю, почему вы не хотите использовать Java встроенный в библиотеке, они там по причине.

Чтобы создать случайное число без встроенных методов, сложно. Я нашел способ давно, с помощью поплавка, и делает его переполнение

float random = 1 << 32 + 1256224; //Have a random number here, it doesn't matter 

Я не проверял, это не может работать.

float random = 1 << 32 + 1256224; 
String [] deck2=new String [52]; 
String[] deck=new String [52]; 
String suits[]={"Spades","Hearts","Diamonds","Clubs"}; 
String rank[]={"2","3","4","5","6","7","8","9","10","Jack","King","Queen","Ace"}; 

for(int i=0;i<deck.length;i++){ 
    deck[i]=rank[i%13]+" "+"of "+suits[i/13]; 
    deck2[i]=deck[i]; 
    System.out.println(deck[i]); 

} 
for (int i = 0; i < 500; i++) { 
    int from = (int) (Math.random() * array.length); //The place to get the first from 
    int to = (int) (Math.random() * array.length); // The place to get the second from 
    String perm = array[from]; // Store the "from" value 
    array[from] = array[to]; // Set the first value to the second 
    array[to] = perm; // Set the second value to the first 
} 

}}

+0

Я тоже не могу использовать математический случай. Это встроенная библиотека. –

+0

Я изучаю Java самостоятельно, и кто-то сказал мне, что лучше всего научиться этому, чтобы увидеть, как работает список массивов. Я пытаюсь сделать это, используя любую библиотеку в java. Попытка сортировать все самостоятельно. –

+0

Это действительно очень приятно. Опять же, почему вы не можете их использовать? Я редактирую свой пост, и я включаю способ решить эту проблему. –

0

Конечно, это возможно. В конце концов, библиотека - это не что иное, как какой-то код, который вы могли бы написать сами. Вам придется написать свой собственный генератор случайных чисел. Это один простой пример:

private static long x = System.currentTimeMillis(); 

public static long rndNumber() { 
    x ^= (x << 21); 
    x ^= (x >>> 35); 
    x ^= (x << 4); 
    return x < 0 ? -x : x; 
} 

public static void shuffle(int a[]) { 
    for (int i = a.length - 1; i > 0; i--) { 
     int pos = (int) (rndNumber() % a.length); 
     int temp = a[i]; 
     a[i] = a[pos]; 
     a[pos] = temp; 
    } 
} 

public static void main(String[] args) { 
    int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9}; 
    System.out.println(Arrays.toString(a)); 
    shuffle(a); 
    System.out.println(Arrays.toString(a)); 
} 
+1

Для использования Shuffle Fisher-Yates, который является O (n) и столь же справедливым, как генератор случайных чисел, +1 –