Formatowanie tekstu w konsoli

0

Mam problem z równym wyświetleniem tekstu w konsoli, niby zastosowałem tabulatory, w kodzie wygląda to prawidłowo, a za każdym uruchomieniem programu niektóre karty dostają jakby jeden tabulator za dużo i wygląda to tak jak na obrazku. Nie mam pomysłu gdzie może być błąd, albo jak go zlokalizować. Proszę o pomoc.

import java.util.Arrays;

public class Rozdanie
{
    String cyfry[] = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Walet", "Dama",
    "Krol", "As"};
    String kolory[] = {"Trefl", "Karo", "Kier", "Pik"};
    String[] KartyGracza = new String[5];
    String[] KartyGraczaDwa = new String[5];
    String[] KartyGraczaTrzy = new String[5];
    
    String AktualnieWylosowana;
    int cyfra;
    int kolor;
    
    Rozdanie()
    {
        Arrays.fill(KartyGracza, " ");
        Arrays.fill(KartyGraczaDwa, " ");
        Arrays.fill(KartyGraczaTrzy, " ");
        System.out.print("Gracz 1:");
        System.out.print("\t\tGracz 2:");
        System.out.println("\t\tGracz 3:");
        
        Rozdaj(KartyGracza);
        Rozdaj(KartyGraczaDwa);
        Rozdaj(KartyGraczaTrzy);
        wyswietl();
    }
    
    public void wyswietl()
    {
        for (int h = 0; h < KartyGracza.length; h++)
        {
            System.out.print("\t" + KartyGracza[h]);
            System.out.print("\t\t" + KartyGraczaDwa[h]);
            System.out.println("\t\t\t" + KartyGraczaTrzy[h]);
        }
    }
    
    public boolean ifRepeat()
    {
        boolean ifTrue = false;
        for (int j = 0; j < KartyGracza.length; j++)
        {
            if (KartyGracza[j].equals(AktualnieWylosowana)
                | KartyGraczaDwa[j].equals(AktualnieWylosowana)
            | KartyGraczaTrzy[j].equals(AktualnieWylosowana))
            {
                ifTrue = true;
                break;
            }
            else
            {
                ifTrue = false;
            }
        }
        return ifTrue;
    }
    
    public void Rozdaj(String[] Karty)
    {
        for (int i = 0; i < Karty.length; i++)
        {
            cyfra = (int) (Math.random() * 14);
            kolor = (int) (Math.random() * 4);
            AktualnieWylosowana = cyfry[cyfra] + " " + kolory[kolor];
            
            if (ifRepeat())
            {
                i--;
            }
            else
            {
                Karty[i] = cyfry[cyfra] + " " + kolory[kolor];
            }
        }
        
    }
    
}
1

Do wypisywania użyj metody printf. Chyba źle rozumiesz co robi klawisz tab, on nie przesuwa kurora o ustaloną ilość spacji (np. 4), ale przesuwa do najbliższego po prawej punktu tabulacji. Położenie tego punktu zależy od tego gdzie się skończył poprzedni tekst.

0

Zmieniłem print na printf, ale dalej jest to samo. To czego w takim razie użyć do wycentrowania tekstu ?

1

Prawidłowo użytej metody printf. Nie wiem jak Ty ją użyłeś. Może jakoś tak:

System.out.printf("%15s%15s%15s\n","Gracz 1:","Gracz 2:","Gracz3:");
...
System.out.printf("%15s%15s%15s\n",KartyGracza[h],KartyGraczaDwa[h],KartyGraczaTrzy[h]);
0
System.out.printf("\t" + KartyGracza[h]);
System.out.printf("\t\t" + KartyGraczaDwa[h]);	
System.out.println("\t\t\t" + KartyGraczaTrzy[h]);	

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