Dynamicke pole – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Dynamicke pole – Java – Fórum – Programujte.comDynamicke pole – Java – Fórum – Programujte.com

 

24. 11. 2010   #1
-
0
-

ahoj,
potreboval bych pomoct, mam vytvorit dvourozmerne pole s tim, ze predem zadam pocet radku a pak rucne z klavesnice zadavam jednotlive hodnoty a kazdy radek ukoncim zadanim nuly.
PR:
Zadam:
1
2
4
0
80
0
5
10
0
Ma vzniknout pole:
1 2 4
80
5 10


Nevim tedy predem jak dlouhe radky budou nemluve o tom ze bude kazdy jinak dlouhy. Jsem zacatecnik a umim vytvorit jen pole s predem danym poctem radku i sloupcu a s timhle jsem se jeste nesetkal tak beru kazdou radu :-)

Nahlásit jako SPAM
IP: 147.32.31.–
tass0
~ Anonymní uživatel
10 příspěvků
24. 11. 2010   #2
-
0
-

Najskor si mozes deklarovat pole: int [][] pole; Potom nacitas tie vstupy, zistis si najdlhsi riadok a ulozis do premennej napr: int x; Potom mozes vytvorit 2D pole : pole = new int [x][3];

Nahlásit jako SPAM
IP: 158.193.98.–
25. 11. 2010   #3
-
0
-

jo to by snad slo akorat ze v tom pripade by mi asi vzniklo ctvercovy pole doplneny nulama co? jakoze radky ktery nezadam stejne dlouhy jako ten nejdelsi budou do velikosti toho nejdelsiho doplneny o nuly. ale jestli to jinak nejde tak to tak udelam kazdopadne dik ;-)

Nahlásit jako SPAM
IP: 147.32.31.–
tass0
~ Anonymní uživatel
10 příspěvků
25. 11. 2010   #4
-
0
-

ano presne, vznikne stvorcove pole doplnene o nuly. neviem o tom ze by sa dalo deklarovat pole s roznou dlzkou stlpcov, myslim si ze sa to ani neda.

Nahlásit jako SPAM
IP: 158.193.98.–
kverulant
~ Anonymní uživatel
5 příspěvků
25. 11. 2010   #5
-
0
-

V javě (ale i třeba v C/C++) se to právě udělat dá.



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

Nahlásit jako SPAM
IP: 86.61.140.–
tass0
~ Anonymní uživatel
10 příspěvků
25. 11. 2010   #6
-
0
-

Tak vidim ze mam este velke rezervy... gj kverulant :smile1:

Nahlásit jako SPAM
IP: 158.193.98.–
25. 11. 2010   #7
-
0
-

prima dik, tohle jsem potreboval :-)

Nahlásit jako SPAM
IP: 147.32.31.–
Valky
~ Anonymní uživatel
7 příspěvků
27. 11. 2010   #8
-
0
-

Ahoj můžu se zeptat jak se ti povedlo udělat rozšiřující pole tak, aby se ti při a[i] = new int[i + 1]; nevymazaly předešlé hodnoty? Napadlo mě je ukládat do dalšího pole a prvek přidávat do něj, ale vznikl stejný problém, to pole musím rozšiřovat a vymaže se mi.

Došel jsem zatím k tomuto:

Scanner sc = new Scanner(System.in);

int radky = sc.nextInt();
int[][] a = new int[radky][];

for (int i = 0; i < radky; i++) {
int cislo = -1;
int d = 0;
System.out.println("zadej prvky");
while (cislo != 0) {
a[i] = new int[d + 1];
cislo = sc.nextInt();
a[i][d] = cislo;
System.out.println(a[i][d]);
d++;
}
}

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

Nahlásit jako SPAM
IP: 213.235.145.–
kverulant
~ Anonymní uživatel
5 příspěvků
28. 11. 2010   #9
-
0
-

Použij http://download.oracle.com/javase/1.4.2/docs/api/java/lang/System.html#arraycopy(java.lang.Object, int, java.lang.Object, int, int). Kvůli zrychlení je lepší zvětšovat pole třeba na dvojnásobek nebo použít ArrayList nebo LinkedList.

Nahlásit jako SPAM
IP: 86.61.140.–
28. 11. 2010   #10
-
0
-

no ja sem to udelal tak ze jsem si dilci radek napred nacetl do jednoducheho pole a pak jsem kdyz tam byl cely jsem si zjistil jeho delku a az po tom jsem vytvoril novy radek v tom dvourozmernym poli a nakopiroval ho tam postupne cely najednou. takze v tom tvym programu bych v tom prvnim cyklu nacital hodnoty do jednorozmerneho pole a az kdyz by ten cyklus skoncil tak bych vytvoril novy radek o delce d ktere se ti celou dobu pricita a pak cyklem hodnoty z jednoducheho pole napr. b[ ] nakopiroval do daneho radku pole a[ ][ ]

Nahlásit jako SPAM
IP: 92.62.224.–
Valky
~ Anonymní uživatel
7 příspěvků
29. 11. 2010   #11
-
0
-

Dík za pomoc, nakonec teda hodnoty zaznamenávám do Stringu oddělené mezerou a ty po rozsekání převádím na inty. To s kopírováním do dalšího pole jsem nerozchodil.

Nahlásit jako SPAM
IP: 89.190.90.–
KIIV
~ Moderátor
+43
God of flame
29. 11. 2010   #12
-
0
-

to uz sis mohl udelat klidne objekt s polem a pak pole objektu

ale pokud to nepotrebujes mit nejak rychle tak je to jedno

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
2. 12. 2010   #13
-
0
-

no objekty jsme jeste nedelali takze jediny co o nich zatim vim je ze neco takovyho existuje :-) spis by me zajimalo jak se da rozdelit ten string na jednotlivy hodnoty int?

Nahlásit jako SPAM
IP: 147.32.31.–
D-Fox0
Stálý člen
2. 12. 2010   #14
-
0
-

Urcite by bylo nejjednoduzsi pouzit kolekce, ale kdyz jsi moc jeste objekty nedelal, tak tady mas nejakej zaklad, moc sem to nekontroloval, takze tam mozna bude chtit osetrit nejaky vstupy (null hodnoty/pole s nulovou delkou atd..), ale tak pro inspiraci ti to snad postaci:

import java.util.InputMismatchException;

import java.util.Scanner;

public class Example {
public static final String SCAN_REPEAT = "Spatny format, opakuj zadani:";
public static final int EOL = 0;
public static final Scanner scanner;

static {
scanner = new Scanner(System.in);
}

public static void main(String[] args) {
int radky = 0;
int[][] pole;

radky = nactiInt("Zadej pocet radku: ");
pole = new int [radky][];

int numero = 0;
int position = 0;
for (int i = 0; i < pole.length; i++) {
System.out.println("Radek:" +i);
pole[i] = new int[4];
position = 0;
do {
numero = nactiInt("Zadejte cislo: ");
pole[i][position++] = numero;
if (numero != EOL && (position+1) > pole[i].length)
pole[i] = realokuj(pole[i]);
} while (numero != EOL);
}
if (radky != 0) {
int[] bezNul = shring(pole[0]); //pokud by by si chtel odstranit nuly na konci...
}
}

public static int[] realokuj(int[] pole) {
System.out.println("INFO: zvetsuji velikost pole z " +pole.length +" na " +(pole.length*2));
int[] temp = pole;
pole = new int[pole.length * 2];
System.arraycopy(temp, 0, pole, 0, temp.length);
return pole;
}

public static int[] shring(int[] pole) {
int index = indexOf(pole, EOL);
if (index == -1)
return pole;
int[] temp = pole;
pole = new int[index];
System.arraycopy(temp, 0, pole, 0, index);
return pole;
}


public static int indexOf(int[] array, int value) {
for (int i = 0; i < array.length; i++) {
if (array[i] == value)
return i;
}
return -1;
}

public static int nactiInt(String text) {
System.out.println(text);
while (true) {
try {
return scanner.nextInt();
} catch (InputMismatchException e) {
System.out.println(SCAN_REPEAT);
scanner.nextLine();
}
}
}
}


Jinak na rozdeleni stringu muzes pouzit StringTokenizer.

Nahlásit jako SPAM
IP: 89.176.8.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 28 hostů

Podobná vlákna

Dynamicke pole — založil Earl Cash

Ne/dynamicke pole — založil cecilconrad

Dynamické pole reťazcov — založil gaben

Dynamicke 2rozmerne pole — založil light_c_programator

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý