Utworzenie tablicy o podanych elementach

0

Witam!

Chciałbym utworzyć w javie tablicę która będzie miała tyle elementów ile użytkownik wcześniej poda. Jak to zrobić? Czy jest możliwość utworzenia tego z pętli for?
Chodzi o to, że użytkownik wprowadza DOWOLNĄ liczbę produktów, których nazwy mają być zapisane w tablicy.

1

Nie da się. Tablica musi mieć z góry określony rozmiar. Nie możesz użyć kolekcji?

0

Tak jak napisał @olek1, tablicy takiej nie zrobisz, chyba ze ręcznie będziesz ją powiększał, ale w efekcie wyjdzie ci po prostu ArrayList<> z którego mozesz skorzystać out-of-the-box :)

0

Możecie podać przykład? Z programowania jestem zielony i nie zabardzo wiem o co wam chodzi :P

0

Kolega ze studiów podsunął mi pomysł taki:

tworzysz odpowiednityp tablica[n-elementów], pytasz użytkownika o n, robisz pętle for(int i=0, i<n, i++){tablica[i]=wczytana dana od użytkownika}

Też tym sposobem można?

0

Przecież to n musi być z góry znane przy definiowaniu tablicy, inaczej poleci błąd. Ten sposób zadziała tylko wtedy, gdy przed stworzeniem tablicy podasz n.
Do kolekcji o nieznanej z góry liczbie elementów stosuje się...kolekcje - poczytaj o listach, ArrayList'ach, Set'ach itd.

1

Wystarczy zmienić kolejność: wpierw pytanie o n, a potem deklaracja tablicy typu int[n]. Kolekcje są wygodniejsze, ale w tym zadaniu nie są konieczne.

0

@bogdans Tak też zrobię, użytkownik ma wprowadzać dowolną liczbę przedmiotów, ale nie jest powiedziane że nie może wcześniej podać jej liczby :D

0

Nie działa :( Co jest nie tak?

Scanner b = new Scanner(System.in);
System.out.print("Wprowadź liczbe produktow:");
int b = input.nextLine();
String[b] product;
product = new String[b];

for(int i=0; i < b; i++)
{
Scanner c = new Scanner(System.in);
System.out.print("Wprowadź nazwę produktu:");
String c = input.nextLine();
product[i]= c;
}

Błędy jakie mi wyskakują:
-variable c is already defined in method main(java.lang.String[])
-cannot find symbol
symbol: variable
location: class Invoice

0
Scanner c = new Scanner(System.in);
System.out.print("Wprowadź nazwę produktu:");
String c = input.nextLine();

tworzysz dwa razy zmienna c.

Nazywaj zmienne po ludzku (to co maja robic) to nie bedziesz miec takich problemow jak powyzej.
Formatuj lepiej kod.
Czytaj komunikaty bledu (chyba angielski znasz?)
Skoro studiujesz to wez troche na wlasne barki swoja niewiedze i sam sie doucz bez niczyjej pomocy. Skoro masz tam programowanie, to uwierz mi ze w programowaniu znajdywanie rozwiazan jest czyms normalnym (a nie pytac kolegow ciagle o cos, tym bardziej ze mzona znalezc to w 5 min)

1

Tak bym to zaimplementował:

	
           Scanner input = new Scanner(System.in); //miales tutaj b
	System.out.print("Wprowadź liczbe produktow:");
	int b = input.nextInt(); // odczyt tylko zmiennej liczbowej, miales nextline, wiec to nie byl typ int
	String[] product; // tak w javie definiujemy tablice
	product = new String[b]; // tworzymy nowa tablice stringow

	for (int i = 0; i < b; i++) {
	    Scanner cIn = new Scanner(System.in); // znow podwijna nazwa byla
	    System.out.print("Wprowadź nazwę produktu:");
	    String c = cIn.nextLine(); 
	    product[i] = c;
	}
1

Dlaczego tworzysz tyle obiektów typu Scanner?

for (int i = 0; i < b; i++) {
     System.out.print("Wprowadź nazwę produktu: ");
     String c = input.next(); 
     product[i] = c;
}
0
System.out.print("Wprowadz liczbe produktow:");
        Scanner liczba = new Scanner(System.in);
        int n = liczba.nextInt();
        String[] products = new String[n];
       
        
        for(int i=0; i < n; i++)
        {
            Scanner nazwa = new Scanner(System.in);
            System.out.print("Wprowadz nazwe produktu:");
            String nazwaProd = nazwa.nextLine();
            products[i]= nazwaProd;

            Scanner ilosc = new Scanner(System.in);
            System.out.print("Wprowadz ilość:");
            int iloscProd = ilosc.nextInt();
            quantity[i] = iloscProd;
        }

Wprowadzanie nazwy produktu działa ale ilości już nie, bo się czepia "quantity" że "cannot find symbol. symbol: variable quantity". Jak to naprawić? Wcześniej przy tablicy products jest spoko, a tu nie chce działać..

@fasadin To że studiuję zanotowałeś. Bardzo dobrze. To jeszcze zanotuj że jest to mój 2 program w życiu pisany i jeszcze nie umiem wyłapywać błędów i myśleć jak programista. Poza tym czemu mam się nie pytać innych o pomoc? Jeśli należy samemu szukać rozwiązań to jaki sens ma istnienie tego forum?
@bogdans Tak mamy podane w treści zadania, żeby scannerami robić.

0

@bogdans Tak mamy podane w treści zadania, żeby scannerami robić.

A jak masz napisane że masz każdy przykład z matematyki rozwiązać ołówkiem to kupujesz nowy ołówek dla kazdego przykładu czy korzystasz z tego samego ołówka? ;)

0

@Shalom No pewnie że nie, ale jeśli nie będzie scannerem to będą nam odejmowane punkty

Po zadeklarowaniu tablicy znowu cannot find symbol... :(

http://imageshack.com/scaled/large/837/lby7.jpg

0

Ustaw sobie jakieś compile on save w tym netbeansie. W ogóle co to za pomysły zeby IDE pozwalało na odpalanie kodu który się nie kompiluje...

0

No właśnie w tym tkwił problem. Dziękuję!

0

Jak ustawić precyzje 2 przecinków wartości double w tablicy?
bo value.setPrecision(4); nie działa.

0

Nie możesz zmienić precyzji liczb przechowywanych w pamięci. Możesz zmienić sposób wyświetlania na ekranie, o to Ci chodzi?

1

@bogdans i @Shalom chceli powiedzieć, że tworzenie nowych obietów typu Scanner nie jest potrzebne i można to zrobić w taki poniższy sposób.

	System.out.print("Wprowadz liczbe produktow:");
        Scanner liczba = new Scanner(System.in);
        int n = liczba.nextInt();
        String[] products = new String[n];
	int[] quantity = new int[n];
	
        for(int i=0; i < n; i++)
        {
            //Scanner nazwa = new Scanner(System.in); << nie jest potrzebne generowanie n obiektow Scanner
	    liczba.nextLine(); // po kazdyw wczytaniu robimy nowa linie do odczytu, bez tego mozesz zobaczyc jaki efekt uzyskasz ;)
            System.out.print("Wprowadz nazwe produktu:");
            String nazwaProd = liczba.nextLine();
	   
            products[i]= nazwaProd;
 
            //Scanner ilosc = new Scanner(System.in); << nie jest potrzebne generowanie n obiektow Scanner
            System.out.print("Wprowadz ilość:");
            int iloscProd = liczba.nextInt();
	    
            quantity[i] = iloscProd;
        }
0

Ostatnie pytanko do was drodzy forumowicze!

Mam tabelę quantity z ilością produktów, która jest w pętli i uzupełnia ją użytkownik.

            Scanner ilosc = new Scanner(System.in);
            System.out.print("Wprowadz ilosc:");
            int iloscProd = ilosc.nextInt();
            quantity[i] = iloscProd;

Na końcu mam zrobić podsumowanie. Jak więc dodać do siebie wszystkie elementy tabeli, a potem wyświetlić?

0

Podobnie jak przy wpisywaniu, używasz pętli for, do ilości wprowadzanych i w drukujesz za pomoca

System.out.println("Produkt:" + products[i] + " Ilosc:" + quantity[i]);
0

Chodzi o to że jak np. użytkownik wprowadzi 4 produkty to żeby dodać do siebie" quantity[0], quantity[1], quantity[2], quantity[3]. Można by było normalnie wpisać ale za każdym razem ilość produktów jest inne

1

To zrób zmienna suma i pętle(lub bezposrednio wprowadzona liczbe dodaj do sumy), ktora bedzie dodawać do siebie quantity[i]. np

suma += quantity[i];

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