Losowanie kart i uporządkowanie ich w kolejności.

0

Witam.

Tworze sobie ArrayListe<Karty> później klasa random losuje te karty ale muszę je od razu uporządkować w kolejności wartość później kolor. mecze się już z tym 4 godziny help plis. Kod:

public class Karty {

	int kolor;
	int wartosc;
	
	public Karty(){
		kolor=0;
		wartosc=1;
	}
	
	public Karty(int kolor, int wartosc){
		this.kolor=kolor;
		this.wartosc=wartosc;
	}	
	public String toString(){
		return String.format("Wartość: %-5dKolor: %-5d",wartosc, kolor);
	}
}
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Random;
import java.util.Scanner;


public class Main {
		
	public static void main(String[] args) {
		Scanner wprowadzenieDanych = new Scanner(System.in);		
		int znak;
		ArrayList<Karty> karty = new ArrayList<Karty>();
		
		do{		
			System.out.println("\n1. Utworzenie listy" +
				"\n2. Wyświetlanie listy" +
				"\n3. Wyświetlanie liczby elementów listy" +
				"\n4. Wyświetlanie kart o podanej wartości" +
				"\n5. Wyświetlanie kart o podanym kolorze"+
				"\n6. Wyjście");
			System.out.print("\nWybierz operację (1-6): ");
			znak =wprowadzenieDanych.nextInt();
			
			switch(znak){
			 case 1:				 
				Random losowanieKart = new Random();
				int wartosc=1;					
				for(int i=0;wartosc!=0;i++){
					wartosc = losowanieKart.nextInt(14);
					int kolor = losowanieKart.nextInt(4);
					karty.add(i, new Karty(kolor, wartosc));  // tutaj od razu trzeba ustawiac w kolejnosci
					
				}
					
				
				
				break;
			 case 2:
				 Iterator<Karty> it = karty.iterator();
				 while(it.hasNext()){
					 Karty k = it.next();
					 System.out.println(k);
				 }
				break;
			 case 3:
				 System.out.println("\nLiczba elementów listy: "+karty.size());
				break;
			 case 4:
				 System.out.print("Podaj wartość karty: ");
				 int wartoscSprawdzana= wprowadzenieDanych.nextInt();
				 for(int i=0;i<karty.size();i++){
					if(karty.get(i).wartosc==wartoscSprawdzana){
						System.out.println(karty.get(i));
					}
				}
				break;
			 case 5:
				 System.out.print("Podaj kolor karty: ");
				 int kolorSprawdzany= wprowadzenieDanych.nextInt();
				 for(int i=0;i<karty.size();i++){
					if(karty.get(i).kolor==kolorSprawdzany){
						System.out.println(karty.get(i));
					}
				 }
				break;
			}
		}
		while(znak!=6 && znak<6);
		wprowadzenieDanych.close();
	}

}
0

Mozna to zrobic na wiele sposobow, np. przeszukiwac liste kart pod katem kolorow i kazdy kolor wrzucic do osobnej listy lub po prostu tablicy a tam posortowac wedlug wartosci kart. A potem znow utworzyc z tym czterek tablic stworzyc juz posortowana nowa liste.

0

Karty[,] sort=new Karty[4,13];
Wylosowane wpisujesz w odpowiednie komórki tej tablicy.
Wypisywanie w dwóch pętlach, pomijasz null'e.

0
int pos=0,val=wartosc*4+kolor;
while((pos<karty.size())&&(karty.get(pos).wartosc*4+karty.get(pos).kolor<val)) ++pos;
if(pos<karty.size()) karty.add(pos,karta);
else karty.add(karta);

1 użytkowników online, w tym zalogowanych: 0, gości: 1