Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Zadání do pole a následný výpis

Cau, mam takovej problem dostal sem za ukol v Java psat cisla do dvourozmerneho pole a nasledne to pole vypsat nejdrive vstup pocet radku a potom zadavam jednotlivym radkum prvky dokud radek neukoncim nulou mam tohle ale pri vypsani pole mi to hodi vyjimku a ja nevim proc sem zacatecnik takze se v tom ete moc nevyznam

   public static void main(String[] args) {
        int j = 0;
        int i = 0;
        int b = 1;
        int p= 0;
        Scanner x;
        x = new Scanner (System.in);
        System.out.println("Zadejte počet řádků: ");
    
        int a = x.nextInt();
        int[][] pole = new int[a][j];

        // ZÁPIS DO POLE

        for (i = 0; i < a; i++) {
          b = 1;
            System.out.println("Obsah řádku(ukončete nulou): ");
              //  int b = x.nextInt();
             //   pole[i][j] = b;
               pole = new int[a][j+1];
            while (b!=0) {
               
                 b = x.nextInt();
                pole[i][j] = b;
                pole = new int[a][j+1];
                p = p +1;
            }
               

        }

     // VÝPIS POLE
        for ( i = 0; i < a; i++) {
            for ( j = 0; j < p; j++) {
                int c  = pole[i][j];
                System.out.print(c);
            }
            System.out.println("");
        }   

    }

}

prosim kdybyste byl nekdo ochoten poradit, dekuji.

Předmět Autor Datum
V p máš na konci celkový počet prvků a ne počet prvků na jednom řádku.
Wikan 27.11.2010 12:30
Wikan
A hlavně si to pole vždycky znovu alokuje, čímž si ho přemaže...
MaSo 27.11.2010 12:33
MaSo
Jo, to máš taky pravdu, teď jsem to chtěl napsat.
Wikan 27.11.2010 12:34
Wikan
aha, no a kdyz tam dam treba 2 tak by mi to melo vypsat z kazdyho radku prvni 2 cleny ne? // VÝPIS…
Syny09 27.11.2010 12:38
Syny09
Proč ten cyklus nejedeš do pole.lenght? Nějak takto: for ( i = 0; i < pole.length ; i++) { for ( j…
MaSo 27.11.2010 12:39
MaSo
Musí to být řešené polem? Dynamicky zvětšovat pole se v Javě dá jedině tak, že si ho znova alokuješ…
MaSo 27.11.2010 12:36
MaSo
no tyjo tak toe prusvih pac toe ukol prave na pole takze to musi byt reseny polem, tak jedine na tvr…
Syny09 27.11.2010 12:41
Syny09
Ked urobis rozmer natvrdo tak to bude obmedzene na ten natvrdo pocet prvkov v riadku (a mal by si ho…
MM.. 27.11.2010 13:20
MM..
Tady to máš, ale je to hnůj...:-) import java.util.Scanner; public class Test { public static void… poslední
MaSo 27.11.2010 14:52
MaSo

aha, no a kdyz tam dam treba 2 tak by mi to melo vypsat z kazdyho radku prvni 2 cleny ne?

     // VÝPIS POLE
        for ( i = 0; i < a; i++) {
            for ( j = 0; j < 2; j++) {
                int c  = pole[i][j];
                System.out.print(c);
            }
            System.out.println("");
        }   

jenze zase vyjimka

Ked urobis rozmer natvrdo tak to bude obmedzene na ten natvrdo pocet prvkov v riadku (a mal by si ho potom kontrolovat a pri dosiahnuti maxima vypisat uzivatelovi ze nech sa kroti trochu ze sa PC uz poti :D).
P.S. Druha moznost je pri dosiahnuti maxima pole realokovat na vacsie maximum (potom maximum nebude natvrdo ale budes ho zvacsovat podla potreby po nejakych skokoch ktore si definujes).
To vsetko je v praxi vec ktoru vyvojar musi rozhodnut na zaklade ocakavaneho mnozstva dat a aj ocakavanej variability v mnozstve dat...
P.S.2. v skutocnosti sa takato dynamicka vec robi bud tak ze sa opytas aj na pocet stlpcov (ked to ma byt pole, pole je predsa stvorcove resp. obdlznikove). Alebo ak je pocet dat dopredu neznamy tak sa to robi skor dynamickym spojkovym zoznamom apod.

Tady to máš, ale je to hnůj...:-)

import java.util.Scanner;

public class Test {

	public static void main(String[] args) {
		int j = 0;
		int i = 0;
		int b = 1;
		Scanner x;
		x = new Scanner(System.in);
		System.out.println("Zadejte počet řádků: ");

		int a = x.nextInt();
		int[][] pole = new int[a][j];

		// ZÁPIS DO POLE

		for (i = 0; i < pole.length; i++) {
			b = 1;
			System.out.println("Obsah řádku(ukončete nulou): ");
			while (b != 0) {
				b = x.nextInt();
				if (j >= pole[i].length) {
					pole = ensureRowCapacity(pole);
				}
				pole[i][j] = b;
				j++;
			}
		  j = 0;
		}

		// VÝPIS POLE
		for (i = 0; i < pole.length; i++) {
			for (j = 0; j < pole[i].length; j++) {
				int c = pole[i][j];
				System.out.print(c + " ");
			}
			System.out.println("");
		}

	}

	private static int[][] ensureRowCapacity(int[][] array) {
		int[][] ret = new int[array.length][array[0].length + 1];
		for (int i = 0; i < array.length; i++) {
			for (int j = 0; j < array[i].length; j++) {
				ret[i][j] = array[i][j];
			}
		}
		return ret;

	}

}

Zpět do poradny Odpovědět na původní otázku Nahoru