Przekątna w tablicy dwuwymiarowej.

0

Hej
Mam napisać program który wygeneruje mi macierz 10x10 i w przekątnej tej macierzy mają być liczby od 0 do 9 a wszystko poza tym ma być zerami.

 {{0,0,0,0,0,0,0,0,0,0
    0,1,0,0,0,0,0,0,0,0
    0,0,2,0,0,0,0,0,0,0
    0,0,0,3,0,0,0,0,0,0
    0,0,0,0,4,0,0,0,0,0
    0,0,0,0,0,5,0,0,0,0
    0,0,0,0,0,0,6,0,0,0
    0,0,0,0,0,0,0,7,0,0
    0,0,0,0,0,0,0,0,8,0
    0,0,0,0,0,0,0,0,0,9}}

Próbowałam napisać dwie pętle jedną dla wierszy a drugą dla kolumn ale to nie zadziałało. Utknęłam na tym zadaniu i nie potrafię go zrobić bardzo proszę o pomoc.

1

Zauważ zależność indeksu co do wartości w tablicy:

Indeks\Indeks | 0 | 1 | 2 | 3
---------------- | ------------------- | ---------------- | ------------------- |
0 | 0 | 0 | 0 | 0
1 | 0 | 1 | 0 | 0
2 | 0 | 0 | 2 | 0
3 | 0 | 0 | 0 | 3

Widać że kiedy indeks kolumny jest równy indeksowi rzędu wtedy wartość odpowiedniej komórki jest równa wartości kolumny (lub rzędu), w przeciwnym razie jest 0.

1

W Javie tablica liczbowa jest domyślnie wypełniona zerami - nie ma potrzeby wpisywania zer. Wystarczy jedna pętla.

int size = 10;
int[][] tab = new int[size][size];
for(int i = 0;i < size; i++)
{
    tab[i][i] = i;
}
0

Czyli jeżeli i = j wtedy drukujemy "i" i wtedy powinniśmy dostać nasza tablice?

public class Macierz {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int[][] array = new int[10][10];
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; i++) {
                if (i == j) System.out.println(i);
            }
        }
    }
}

Napisałam to tak ale dostaje błąd "java.lang.ArrayIndexOutOfBoundsException: 10"

1

W drugiej pętli zamień i++ na j++.

0

Rzeczywiście głupi błąd zrobiłam. Zmieniłam i drukuje mi liczby od 0 do 9 co mam zrobić żeby wydrukowało mi zera nad i pod przekątną?
Dopisałam teraz ostatnią linie:

public class Macierz {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int[][] array = new int[10][10];
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                if (i == j) System.out.println(i);
               ** System.out.println(array [i] [j]);**
           

i drukuje mi liczby od 0 do 9 i pomiędzy nimi drukuje 11 zer ale drukuje mi to wszystko w pionie.

2

Ty masz wygenerować tablicę, oznacza to zapewne, że tablica ma istnieć w pamięci komputera, a nie tylko na ekranie monitora.

public class Macierz {

    public static void main(String[] args) {
        int[][] array = new int[10][10];
        for (int i = 0; i < array.length; i++){     
            array[i][i] = i;
        }
        for(int i=0; i < array.length; i++){
           for(int j=0; j< array[i].length; j++){
             System.out.print(array[i][j] + ", ");
           }
           System.out.println(); 
       }
   }
}
0

Działa! Dziękuje bardzo! A więc pierwsza pętla wypełnia tablice zerami a następne dwie wypełniają przekątną od 0 do 9? Dobrze to zrozumiałam?

1

Tablica domyślnie jest wypełniona zerami. Tu masz skomentowany kod

int[][] array = new int[10][10];
// Teraz w array są tylko 0

// Wypełnianie przekątnej
for (int i = 0; i < array.length; i++){     
	array[i][i] = i;
}

// Wyświetlanie tablicy
for(int i=0; i < array.length; i++){
	for(int j=0; j< array[i].length; j++){
		System.out.print(array[i][j] + ", ");
	}
	System.out.println(); // Nowa linia dla kolejnego rzędu
}
0

Wszystko rozumiem, dziękuję wam bardzo!!

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