Sortiertes Array mischen ohne Duplikat

Dennis07

Neues Mitglied
Java:
import java.util.*;

 class Dcoder
 {
 public static void main(String args[]){
  String[] game = createCardGame();
  game = shuffle();
       System.out.println(Arrays.toString(game));
 }

 private static String[] createCardGame(){
  String[] game = {"2", "3", "4", "5", "6", "B", "K", "Q"};
  return game;
 }
 private static String[] shuffle(){
  String[] game = createCardGame();
  String[] shuffled = new String[game.length];
 
  for(int i = 0; i < shuffled.length; i++){
 
   int random = (int)(Math.random() * 7);
 
   for(int j = 0; j < i; j++){
    if(game[random].equals(shuffled[j])){
     random = (int)(Math.random() * 7);
     j = 0;
    }
   }
 
   shuffled[i] = game[random];
  }
 
  return shuffled;
 }
    
 }


Folgendes Problem: Ich habe 8 verschiedene Karten aufsteigend nach ihrer Wertigkeit in einem Array gespeichert, das durch createCardGame () erzeugt wurde. Dessen Werte werden alle in einem Array shuffled [] durch den Aufruf shuffle () in zufälliger Reihenfolge abgelegt, ohne dass dabei ein Duplikat vorkommt (Das habe ich mit der inneren for Schleife sichergestellt). Nur kommt immer der erste von shuffled [] doppelt vor (kopiert den Code und probiert es selber aus) und ich weiß nicht warum. Kann mir bitte jemand helfen?
 
Zuletzt bearbeitet von einem Moderator:
(kopiert den Code und probiert es selber aus)

Das geht leider nicht..

/tmp/java_rK4Jhh/Dcoder.java:32: error: incompatible types: String cannot be converted to String[]
shuffled = game[random];
^
1 error

Korriegeren kann ich den Fehler auch nicht, da mir nicht wirklich klar ist, was du vorhast.
Wenn du einfach nur mischen willst, dann misch doch einfach. Z.B. frei nach Fisher-Yates...
 
Das ist echt schwer zu lesen. 😀
Du setzt j auf 0.
Du läufst auch nur bis i.
Der Übeltäter könnte aber überall versteckt sein. xD
 
Ich bin noch ein Anfänger, daher nicht zu ernst nehmen... müsstest du bei shuffled = game[random]; nicht sagen, an welche Stelle? daher: shuffeld = game[random]; ?

dann lässt es sich zumindest ausführen (auch wenn der Fehler immer noch da ist)
 
Java:
/**
* @author Jan Müller
*/

package test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;

public class Blub {
   
    public static void main(String[] args) {
   
    String [] game = {"2", "3", "4", "5", "6", "B", "K", "Q"};
    ArrayList<String> shuffled = new ArrayList<String>(Arrays.asList(game));
    Collections.shuffle(shuffled);
    System.out.println(shuffled);  //-->    [3, B, 4, K, Q, 5, 6, 2]
   
    }
}
So kannste shufflen falls nötig kannste auch von ArrayList wieder String[] musst dir mal toArray() anschauen
 

Zurück
Oben