• 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

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
268 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 (155,140 p.)

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

0 głosów
odpowiedź 6 marca 2023 przez VBService Ekspert (256,320 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 (278,610 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 140 wizyt
pytanie zadane 5 maja 2020 w Java przez danielo665 Obywatel (1,040 p.)
0 głosów
4 odpowiedzi 6,477 wizyt
pytanie zadane 23 października 2017 w Java przez Akiro Bywalec (2,910 p.)
0 głosów
2 odpowiedzi 1,983 wizyt
pytanie zadane 27 października 2016 w Java przez Lukasz95 Bywalec (2,160 p.)

93,157 zapytań

142,170 odpowiedzi

321,878 komentarzy

62,486 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 224p. - Marcin Putra
  2. 224p. - nidomika
  3. 223p. - dia-Chann
  4. 221p. - ssynowiec
  5. 217p. - Mikbac
  6. 216p. - CC PL
  7. 215p. - Łukasz Piwowar
  8. 212p. - zmmz89
  9. 210p. - Adrian Wieprzkowicz
  10. 208p. - rafalszastok
  11. 206p. - Michal Drewniak
  12. 204p. - Łukasz Eckert
  13. 202p. - rucin93
  14. 200p. - robwarsz
  15. 198p. - TheLukaszNs
Szczegóły i pełne wyniki

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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...