Element aus Array entfernen

hallo,

ich will ein Programm schreiben, das 3 Elemente
aus einem Array ausgibt und diese sich dabei nicht wieder-
holen.

Das ist mein Programmcode

Java:
public class Turnier {
public static void main (String []args){
	String mannschaften[]={"Abi2010","Abi2009","Abi2000","Abi2001","Abi2002","Abi2003","Abi2004","Abi2005","Abi2006","Abi2007","Abi2008"}; 
	Halle1(mannschaften);
	Halle2(mannschaften);
}
public static void Halle1(String []mannschaften){
	System.out.println("In Halle 1 spielen:");
	for (int k=0;k<=2;k++){
	int wahl1=(int)(Math.random()*mannschaften.length);
    //mannschaften=mannschaften- mannschaften[wahl1];
	System.out.println(mannschaften[wahl1]);
		
	}
}
public static void Halle2(String []mannschaften){
	System.out.println("In Halle 2 spielen:");
	for (int k=0;k<=2;k++){
	int wahl1=(int)(Math.random()*mannschaften.length);
    //mannschaften=mannschaften- mannschaften[wahl1];
	System.out.println(mannschaften[wahl1]);
		
	}
}

Das Problem ist wie gesagt die Wiederholungen, wie kann man das
schreiben, dass der nicht jedesmal dasselbe Array nimmt,
sondern die schon mal benutzten wieder rausstreicht?

Ich habs shcon mit ner if-Schleife versucht, hat aber nicht
funktioniert, ist das ein richtiger Ansatz?
 
ein Array ist unveränderlich... den kannst du nicht vergrößern/verkleinern. Da müsstest du eine Collection nutzen (zb ArrayList)
 
if-schleife.de

du könntest dir z.b. ein boolean array mit length = mannschaften.length machen. wenn du eine mannschaft "ziehst" wird das boolean array an der gleichen stelle true gesetzt. beim ziehen prüfst du ab, ob der gezogene index nicht schon true ist.
 
Versuchs mit einer Liste.
Java:
import java.util.*;

public class ListDemo {
    private java.util.List<String> mannschaftList;
    
    public ListDemo() {
        mannschaftList = new ArrayList<String>();
        for(int i = 0; i < 10; i++) {
            mannschaftList.add("Abi"+String.valueOf(2000+i));
        }

        System.out.println("In Halle 1 spielen:");
        auslosen(mannschaftList);
        
        System.out.println("In Halle 2 spielen:");
        auslosen(mannschaftList);
    }
    
    public void auslosen(List<String> mannschaft){
        for (int k = 0; k < 3; k++) {
            System.out.println(mannschaft.remove(randomIndex()));
        }
    }
    
    private int randomIndex() {
        return (int)(Math.random() * mannschaftList.size());
    }

    public static void main (String []args){
        new ListDemo();
    }
}
 
erstmal vielen Dank L-ectron-X

ich versuche es jetzt mit einer Array-Liste, da ich die aber erst mal verstehen muss hab ich mit einer primitiven angefangen, nämlich hier:
Java:
import java.util.ArrayList;
public class Turnier {

		public static void main (String []args){
			ArrayList<String> liste = new ArrayList<String>();
		
			liste.add("Abi2008");
			liste.add("Abi2007");
			liste.add("Abi2006");
			liste.add("Abi2005");
			liste.add("Abi2004");
			liste.add("Abi2003");
			liste.add("Abi2002");
			liste.add("Abi2001");
			System.out.println("Mannschaft1:");
			System.out.println("");
			int wahl=(int)(Math.random()*liste.size());
			liste.remove(wahl);
			System.out.println(wahl);
}
}

Leider gibt er jetzt nur einzelne Zahlen ausm also ich schätze mal die Position auf der Liste, aber nicht den String, was mach ich damit er den String ausgibt also eben Abi200-irgendwas?
 
Leider gibt er jetzt nur einzelne Zahlen ausm also ich schätze mal die Position auf der Liste, aber nicht den String, was mach ich damit er den String ausgibt also eben Abi200-irgendwas?
Naja, du schreibst
Code:
System.out.println(wahl);
Dass er da nur die Zahl wahl ausgibt sollte doch einleuchten 😉
wenn du den i-ten Eintrag haben willst, dann mach folgendes:
Java:
System.out.println(liste.get(wahl));
 
ok, das funktioniert schon mal, aber wenn ich das jetzt um ne for-Schleife erweitere
Java:
			System.out.println("Mannschaft1:");
			System.out.println("");
			for (int k=0;k<=2;k++){
			int wahl=(int)(Math.random()*liste.size());
			liste.remove(wahl);
			System.out.println(liste.get(wahl));
			}

gibt er mir manchmal ne Fehlermeldung aus, manchmal funktionierts, das viel erstaunlichere jedoch ist dass er ab und zu eine doppelte wahl ausgibt, d.h. bsp. Abi2004 zweimal auftaucht, obwohl ichs doch rauslösch mit remove ? Müsste er sich das dann nicht merken?
 
du löscht den Wert beim Index
Code:
wahl
und danach gibst du den gleichen Index (der jetzt auf das nachfolgende Objekt, dass du eigentlich haben willst, referenziert) aus??

Index 0: Hallo
Index 1: Welt
Index 2: Schöner
Index 3: Tag
Index 4: Heute

list.remove(2);

>>

Index 0: Hallo
Index 1: Welt
Index 2: Tag
Index 3: Heute

list.get(2);

>> Tag


Aber eigentlich willst du ja "Schöner" 🙂


Machs doch einfach wie L-ectron-X dir es vorgekaut hat:
Java:
 for (int k = 0; k < 3; k++) {
            int wahl=(int)(Math.random()*liste.size())
            System.out.println(mannschaft.remove(wahl));
 }
 

Zurück
Oben