• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

tablica z nieokreśloną liczbą elemntów

Object Storage Arubacloud
0 głosów
225 wizyt
pytanie zadane 5 marca 2023 w Java przez Davidxx Nowicjusz (190 p.)

witam dopiero zaczyniam przygodę z programowaniem  , chciałem utworzyć tablice z liczb całkowitych podanych przez użytkownika. Wielkość tablicy zależała by od ilości liczb podanych przez użytkownika np. jeśli podał by 4, 5, 2 to chciałbym, żeby utworzyła się tablica składająca się z 3 elementów. A po wpisaniu cyfry 0 program by zakończył przyjmowanie danych, 0 nie wlicza się jako element tablicy. Oczywiście na końcu wszystko by się wyświetliło. Próbowałem nadpisywać liczbę elementów tablicy po przez pętle, ale już wiem nie mozna zmieniac w trakcie porogramu liczby elementow tablicy, poprzednie elementty po prostu się kasują i pokazuje mi tylko ostatni elemnt. W jaki inny sposób można to zrobić ? jak zliczyć liczbę elektów podanych przez użytkownika ?

package potegi;
import java.util.Scanner;
public class zdaniepiate {

	public static void main(String[] args) {
	int a;
	int [] tablica; 
	int k = 0; // licznik indeksu
	int z = 1; // liczba elementow tablicy

		Scanner scan = new Scanner(System.in);
		 tablica = new int [z];
	
			System.out.println ( "podaj cyfry do tablicy , 0 = koniec") ;
	 do {
		
	a = scan.nextInt() ;
		if (a!=0) {
			 tablica = new int [z];
				
			tablica [k] = a;
			k++;
			z++;
		
		}
	}
  while ( a!=0);
for(int i = 0; i < tablica.length; i++ ) {
		int num  = tablica [i];


	System.out.println ( "liczby to " + num) ;
	}
	}
	}

 

2 odpowiedzi

+2 głosów
odpowiedź 5 marca 2023 przez tangarr Mędrzec (154,780 p.)

Użyj jakiejś listy (np ArrayList) zamiast tablicy

0 głosów
odpowiedź 6 marca 2023 przez VBService Ekspert (253,100 p.)

Ten zapis

do {
    a = scan.nextInt() ;
    if (a!=0) {
        tablica = new int [z];
        tablica [k] = a;
        k++;
        z++;
    }
}
while (a!=0);

powoduje, że przy każdej iteracji pętli do...while do zmiennej tablica jest przypisywana nowa tablica o wielkość z i w tej tablicy na k-tej pozycji (indeks) jest zapisywana wartość z a

"na siłę" można posłużyć się np. System.arraycopy

[ on-line ]

        do {
            a = scan.nextInt() ;
            if (a!=0) {
                // Tworzymy nową tablicę o rozmiarze większym o jeden
                int[] nowaTablica = new int[tablica.length + 1];
                // Kopiujemy zawartość starej tablicy do nowej tablicy
                System.arraycopy(tablica, 0, nowaTablica, 0, tablica.length);
                // Podmieniamy referencję do starej tablicy na referencję do nowej tablicy
                tablica = nowaTablica;
                tablica[k] = a;
                k++;
                z++;
            }
        }

 

ale odradzam taki zapis (podałem w ramach ciekawostki), polecam też, tak jak już napisał @tangarr; użycie ArrayList lub LinkedList

[ on-line ]

        System.out.println("Podaj liczbę, 0 = koniec:");
        do {
            liczba = scan.nextInt();
            if (liczba != 0) lista.add(liczba);
        } while (liczba != 0);

 

2
komentarz 6 marca 2023 przez Davidxx Nowicjusz (190 p.)
dzieki, użyłem listy ArrayList , było to łatwe proste i przyjemne :)
1
komentarz 6 marca 2023 przez Wiciorny Ekspert (269,710 p.)
edycja 6 marca 2023 przez Wiciorny

i na przyszłość nigdy w życiu, nie korzystaj z rozwiązania w którym kopiowanie map/tablic itd jest umieszczone w iteracjach, pętlach itp.
TO jest Java, to jest memory usage za bardzo.(też zwrócił na to uwagę  VBService)
Głębokie kopiowanie natomiast tylko dla obiektów i atomowych operacji.

Podobne pytania

0 głosów
2 odpowiedzi 111 wizyt
pytanie zadane 5 maja 2020 w Java przez danielo665 Obywatel (1,040 p.)
0 głosów
4 odpowiedzi 6,134 wizyt
pytanie zadane 23 października 2017 w Java przez Akiro Bywalec (2,910 p.)
0 głosów
2 odpowiedzi 1,813 wizyt
pytanie zadane 27 października 2016 w Java przez Lukasz95 Bywalec (2,160 p.)

92,555 zapytań

141,403 odpowiedzi

319,557 komentarzy

61,940 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...