Tablice [ArrayIndexOutOfBoundsException]

0
public class Main{
	public static void main(String args[]){
		int c=6;
		int j=0;
		int i=0;
		int[][] k= new int[c][c];

		for(;i<k.length;i++){
			k[i][j]= c*i;


			for(j=0; j<k[i].length; j++){
			k[i][j]=c*j;
			System.out.println("[" +i+ "]"+"[" +j+ "]=" +k[i][j]);
			}
			}




	}

}

Czy może ktoś napisać mi co jest złego w tym kodzie, że wywala mi :
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 6

Niby pamięć, chyba powinna być zarezerwowana dla macierzy 6x6 a program działa tylko dla 6x5 .(działa, gdy w drugiej pętli zmienię na "k[i].length-1").

0

Przyłóż się bardziej do formatowania kodu, żaden pro-gramista nie robi tego tak na odwal. Rób porządne wcięcia, bo tak jak jest teraz znacznie gorzej się czyta! Tu więcej info o wcięciach.

A poza zakres wychodzisz w pierwszej linii zewnętrznej pętli for. Zauważ proszę, że pierwszym wyjściu z pętli wewnętrznej j wynosi 6. Następnie wykonywany jest kolejny (drugi) raz pętla zewnętrzna. I wykonuje się linijka:

k[i][j]= c*i;

Gdy tablica ma rozmiar 6x6, czyli indeksy mogą mieć wartości z przedziału [0..5], tymczasem i = 1 (OK) i j =6 (poza zakresem).

Aha, możesz włączyć forumowe kolorowanie składni otwierając tag code w ten sposób:

```java

Zamiast "java" możesz też wpisać "php", "c", "cpp" i parę innych nazw języków. Niestety jest to słabo udokumentowane na forum, więc wielu nowicjuszy po prostu nie zna tej opcji (bo nie ma jak).

Na przyszłość polecam też dać tematowi lepszą nazwę niż "Początkujący". Zapewniam Cię, że to forum odwiedza codziennie wielu początkujących! Gdyby wszyscy dawali takie tematy, nikt by się w nich nie połapał. Warto też rozpocząć temat od tagu z nazwą języka, np. "[Java]". Masz sporą szansę, że ten temat znajdzie się w dziale Newbie i tam bez tagu nie będzie na pierwszy rzut oka wiadomo, o jaki język programowania chodzi.

Zauważ proszę, że bodaj wszystkie te zasady są wspomniane w przyklejonym (tj. widocznym zawsze u góry) temacie Ogłoszenie dla forumowiczów i FAQ oraz w temacie Zasady pisania tematów w dziale Java. Stosowanie się do tych wskazówek pomoże właściwym ludziom znaleźć Twój problem, a Tobie uzyskać szybszą pomoc (że nie wspomnę o tym, że tematy naruszające te powszechnie dostępne zasady mogą od razu trafić do kosza).

0
  1. zmień temat na jakiś sensowny.
  2. w momencie gdy przechodzisz do pętli dla i = 1 to j jest równe 6, a powinno być równe 0. Zerowanie j następuje przy starcie pętli, a powinno być realizowane wcześniej. Dodatkowo nie wiem dlaczego dwa razy wykonujesz przypisanie do k[i][j], skoro tylko to drugie będzie wypisywane.
    Błąd polega na sposobie w jaki deklarujesz zmienne i i j. Są one widoczne poza pętlą, co powoduje, że musisz ręcznie zarządzać ich wartościami po opuszczeniu pętli.
public class App {

	public static void main(String args[]) {
		int c = 6;
		int[][] k = new int[c][c];

		for (int i = 0; i < k.length; i++) {
			for (int j = 0; j < k[i].length; j++) {
				k[i][j] = c * j;
				System.out.println("[" + i + "]" + "[" + j + "]=" + k[i][j]);
			}
		}

	}

}
0

Dziękuję za rady :)

Poprawię się.

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