[java] Wyrównanie liczb wyświetlonych jako tablica dwuwymiarowa.

0

Witam, mam wyświetlić liczby z tablicy dwuwymiarowej. Obecnie wygląda to np. tak:

3 -4 2 5 1 -1 -4 
1 2 0 3 -5 2 5 
3 2 1 -1 3 1 -5 
3 2 3 3 -4 5 -3 
0 1 4 -1 -2 3 -2 
-2 -3 -1 2 -4 3 -2 
2 -2 1 -2 3 5 1 

A chciałbym uzyskać wyrównanie:

 
 3 -4  2  5  1 -1 -4 
 1  2  0  3 -5  2  5 
 3  2  1 -1  3  1 -5 
 3  2  3  3 -4  5 -3 
 0  1  4 -1 -2  3 -2 
-2 -3 -1 2  -4  3 -2 
 2 -2  1 -2  3  5  1 

Jeśli dobrze pamiętam to w pascalu można to zrobić np. tak:
write(tab[i,j]:0:4);
Czy istnieje taka możliwość w javie?

0

poczytaj o printf() w Javie.

0
   0    0    0    1    2    2    5 
  -5    3   -2    2    1   -1   -1 
   2    3    0    2   -1   -5    4 
   3    3   -4    3   -4    0    4 
  -2   -4   -5    1   -3   -1    3 
  -2   -5    4   -3    3    3    4 
  -5   -3    1    4    4    1    1 

uzyskane przy pomocy

String.format("%4d", liczba);
0

Jeszcze może być Arrays.toString() bądź Arrays.asList() . W zależności co chcesz przechować :)

0

Pozwolę sobie odkopać temat, ale mam problem z wyrównaniem zmiennych typu double:

public void drukujMacierz()
{
    for(int i=0; i<tab.length; i++)
    {
        for(int j=0; j<tab[i].length; j++)
        {
            System.out.printf("%-4.3f", tab[i][j]);
        }
        System.out.println();
    }
}

Już prawie na pamięć znam wszystkie flagi i atrybuty printf'a a mimo tego liczby nie chcą się wyrównać.

Generowanie macierzy:

public void generujMacierz()
{
   Random los = new Random();
   tab = new double [los.nextInt(4)+2][los.nextInt(4)+2];
   for(int i=0; i<tab.length; i++)
   {
       for(int j=0; j<tab[i].length; j++) 
       {
           double k = los.nextInt(99)*los.nextDouble(); //dobrze by było mieć dokładnosc 0.001
           tab[i][j]=k;
       }
   }
   drukujMacierz();
}

Nie wiem dlaczego dla double nie działa formatowanie.

0

Powinno być minimum "%-7.3f" - width określa długość całej liczby, łącznie z separatorem i częścią dziesiętną (2 + 1 + 3 znaki i jedna spacja). Swoją drogą, mogłoby być los.nextInt(100), żeby czasem też generowało liczby >= 99.

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