Zadanie🔗
Utwórz tablicę typu int przechowującą n elementów - gdzie n jest parametrem pobieranym od użytkownika. Następnie wypełnij ją liczbami od 1 do n i wyświetl zawartość na ekranie przy pomocy pętli while.
Rozwiązanie🔗
Tutaj zadanie było nieco bardziej skomplikowane. Należało pobrać od użytkownika liczbę elementów i na tej podstawie utworzyć tablicę. Można oczywiście zapisać to w krótszej formie, ale chciałem, aby wszystko było dobrze widoczne. Przy wyświetlaniu danych na ekran należało pamiętać, aby zwiększać indeks licznika, ponieważ w innym wypadku zapętlilibyśmy się.
import java.util.Scanner;
public class Tablice{
public static void main(String[] args){
int[] tablica;
Scanner odczyt = new Scanner(System.in);
System.out.println("Podaj ilość elementów: ");
int liczbaElementow = odczyt.nextInt();
tablica = new int[liczbaElementow];
for(int i=0; i<tablica.length; i++)
tablica[i] = i+1;
int licznik=0;
while(licznik<tablica.length){
System.out.print(tablica[licznik]+" ")
licznik++;
}
}
}
Komentarze do artykułu
Wyłączyliśmy możliwość dodawania komentarzy. Poniżej znajdziesz archiwalne wpisy z czasów gdy strona była jeszcze hobbystycznym blogiem. Zapraszamy natomiast do zadawnia pytań i dyskusji na naszej grupe na facebooku.
witam. co do tego rozwiązania to mam zastrzeżenie. W poleceniu jest napisane aby wyświetlić zawartość za pomocą pętli while... tu zaś jest for...
niestety ucięło przykład, w pętli for wypełniamy tablicę, wyświetlamy ją w pętli while. Już poprawione. Dzięki za zwrócenie uwagi.
while(licznik<tablica.length){ System.out.print(tablica[i]+" ") licznik++; } tutaj chyba błąd jest, klasa nie skompiluje się bo zmienna [i] jest deklarowana w for-ach i tylko tam istnieje
Oczywiście masz rację. W razie jakichś błędów piszcie śmiało, bo przykłady w większości piszę z palca bez sprawdzania i widać co z tego wychodzi ;)
System.out.print(tablica[i]+" ") nie jest zakończone średnikiem
Dzięki za szybką odpowiedź i poprawkę ;) Rozumiem, że w razie czego można zawracać dupę jak się coś nie chce kompilować, albo się czegoś nie ogarnia ? :P
jasne ;) najlepiej w komentarzach, bo powiadomki o komentarzach dostaję na swojego maila, a tego kontaktowego sprawdzam tylko od czasu do czasu.
ten program sie nie wyswietla od 1 tylko od 0. według mnie powinno być tak: import java.util.Scanner; public class Tablice{ public static void main(String[] args){ int[] tablica; Scanner odczyt = new Scanner(System.in); System.out.print("Podaj ilosc elementow: "); int liczbaElementow = odczyt.nextInt(); tablica = new int[liczbaElementow]; int a=1; for(int i=0; i<tablica.length; i++) tablica[i] = a++; int licznik=0; while(licznik<tablica.length){ System.out.print(tablica[licznik]+" "); licznik++; } } }
faktycznie rozwiązanie jakby nie od tego zadania mi tu wyskoczyło ;) W swoim rozwiązaniu możesz zrezygnować ze zmiennej a i zapisać w pierwszej pętli: tablica[i] = i+1;
faktycznie. dopiero zaczynam z java
A ja zrozumiałem, że mam wypełnić tablicę i wyświetlić elementy przy użyciu pętli while i zrobiłem tak: import java.util.Scanner; public class Zadanie13{ public static void main(String[] args){ Scanner odczyt = new Scanner(System.in); System.out.println("\nZ ilu elementow ma sie skladac tablica?"); int n = odczyt.nextInt(); int[] tablica = new int[n]; int i=0; while(i<n){ tablica[i] = i+1; System.out.println("\nElement tablicy z indexem "+i+" ma wartosc: "+tablica[i]); i++;} } } Działa, ale czy taki zapis jest poprawny?
Programowanie ma to do siebie, ze dany problem mozna rozwiazac na kilka sposobow. Praktycznie tyle ile jest ludzi tyle moze byc rozwiazan (grunt zeby dzialalo).
Witam:) moze glupia prośba ale mogłby ktoś przyblizyc dokladnie działanie .lenght??:) chyba ze pojawiło sie wczesniej ale nie znalazlem:(
http://javastart.pl/podstawy-jezyka/tablice-wielowymiarowe/
W skrócie mówiąc .length zwraca długość np. dla zmiennej: String zmienna = "To jest zmienna tekstowa" wyrażenie zmienna.length() zwróci Ci wartość 24 bo tyle jest znaków łącznie ze spacjami. dla zmiennej tablicowej: int[] tablica = new int[n] wyrażenie tablica.lenght zwróci Ci wartość "n", czyli długość tablicy, tyle ile jest w niej elementów. Mam nadzieję, że trochę Ci się wyjaśniło :)
Zrobilem troche inaczej ale wg mnie lepiej wyglada i uzywa tylko 1 petli. import java.util.Scanner; public class Tablice{ public static void main(String[] args){ int i = 0; int n = 0; Scanner od = new Scanner(System.in); System.out.print("Podaj rozmiar tab: "); i = od.nextInt(); int[] tab = new int[i]; while(i>0){ i--; tab[i] = ++n; System.out.print(tab[i]+" "); } } }
System.out.print(tablica[licznik]+" ") Brakuje ; System.out.print(tablica[licznik]+" ");
Moja rada, jeśli ktoś ma windowsa 7 to lepiej nie dawać znaków takich jak Monika dała bo cmd nie odczyta i wywali błąd bo będzie myślał że jest to litera L taka dziwna ;f System.out.print(tablica[licznik]+" "); Lepiej dawać nie ukośne cudzysłowy lecz takie jakie widzicie u mnie.
Moja rada, jeśli ktoś ma windowsa 7 to lepiej niech sobie zamieni ręcznie te cudzysłowy jak ktoś będzie kopiować zawartości z komentarzy, bo w win 7 w cmd nie odczyta znaków cudzysłowa jak w przykładzie Moniki jest.
System.out.print(tablica[licznik]+" ");
a czemu użyto ".length" jeżeli jest to omówione w następnej lekcji?
żeby przedstawić czytelnikowi dodatkową wersję rozwiązania, sprawić, że zatrzyma się przy kodzie przynajmniej na chwilę i zapamięta dobry nawyk od samego początku. Pozdrawiam :)
Użyłem tylko jednej pętli (while) i wszystko działa jak należy, chciałbym tylko wiedzieć czy określanie tabeli za pomocą for jeżeli można użyć while jest niezbędne ?
Mem problem z ostatnim fragmentem rozwiązania, mianowicie: int licznik=0; while(licznik<tablica.length){ System.out.print(tablica[licznik]+" ") licznik++; } Rozumiem to w następujący sposób: Zmienna licznik ma wartość 0, jeżeli licznik jest mniejszy od długości tablicy to wyświetl "tablica[licznik]" (nie rozumiem, dlaczego ta zmienna jest w kwadratowym nawiasie, w ogóle tego fragmentu nie kapuję) + spacja (" "), na końcu inkrementuj aż do końca długości tablicy.
Kwadratowy nawias pozwala odwołać się do wartości z tablicy o indeksie=licznik Spacja na końcu jest dodana dla czytelności (wywoływana jest metoda print, nie println) Inkrementacja jest potrzebna, żeby wyświetlać kolejne elekenty tablicy.
Mam małe pytanie, napisałem taki oto kawałek kodu: import java.util.*; public class Tablice2 { public static void main(String[] args){ System.out.println("Podaj liczbe imion: "); Scanner readNumber = new Scanner(System.in); int number = readNumber.nextInt(); // readNumber.close(); <<<<<<<<<<<<<============== !!! String [] tab = new String[number]; Scanner readName = new Scanner(System.in); for(int i=0; i<tab.length; i++){ System.out.println("Podaj "+(i+1)+" imię: "); tab[i] = readName.nextLine(); } readName.close(); int a=0; while (a<tab.length){ System.out.println("Imie: "+tab[a]); a++; } } } Dlaczego jeżeli w tym miejscu (tutaj gdzie jest zakomentowane) uzyje metody readNumber.close() to w pętli ten kod się wysypuje? Skoro tam korzystam z całkiem innego inputa? Z tego wynika, że wszystkie dane, które odbiera się od użytkownika zawsze trzeba domykac na samym końcu gdy już nie będziemy odbierać żadnych innych? Bo w przypadku gdy readNumber.close() umieszcze już po za pętlą for to wszystko jest ok.
Ma być nie po za pętlą for tylko pod pętlą for :P
Scanner input = new Scanner(System.in); System.out.println("do ilu policzyć? :"); int liczba = input.nextInt(); int[] liczby = new int[liczba+1]; int i=1; while(i<=liczba){ liczby[i] = i; System.out.println(liczby[i]); i++; i mam to samo tylko o 2 linijki mniej :)
import java.util.Scanner;public class proje{public static void main(String[]args){ int n=0;int x=0;System.out.println("Podaj liczbę");Scanner o=new Scanner(System.in); n=o.nextInt();int[]tab=new int[n];while(x<n){tab[x]=x+1;x++;}x=0;while(x<n){System .out.println(tab[x]);x++;}}} to można z while w 3,5 linijki upchać, to nic że trochę nieprzejrzyście :D
No trochę nieprzejrzyjście, ale co tam, każdy dobry programista od razu zauważy o co chodzi w programie ;P
Iteracje też można zagnieżdżać jakby ktoś chciał oszczędzić linijek :) int n,i = 0; Scanner czytaj=new Scanner(System.in); System.out.println("Podaj wymiar tablicy: "); n=czytaj.nextInt(); int[] tab=new int[n]; while (n-->0) tab[n]=n+1; while (i<tab.length) System.out.print(tab[i++]+" ");
Dobrze wiedzieć, a czy w takim przypadku iteracja nie nastąpi przed pierwszym wykonaniem pętli?
Iteracja przed pierwszym wykonaniem wyglądałaby tak: ++i M.in tym różni się od zapisu i++
Dobra sam sobie odpowiem, może innym się przyda :) while(++licznik<tablica.lenght){...} - inkrementacja nastąpi przed sprawdzeniem zmiennej licznik while(licznik++<tablica.lenght){...} - inkrementacja nastąpi po sprawdzeniu zmiennej licznik. Niby nic, ale może komuś rozjaśnić :)
No ja zrobiłem to tak. Czy używanie, zamiast metody tablica.LENGTH, jakiejś utworzonej do tego celu zmiennej (u mnie to "n"), która jednoznacznie wskazuję ile elementów ma dana tablica jest czymś złym lub niewłaściwym? import java.util.Scanner; public class Tablica { public static void main(String[] args) { Scanner wpisz = new Scanner(System.in); System.out.println("Ile elementowa tablicę utworzyć ?"); int n = wpisz.nextInt(); int tablica[] = new int[n]; System.out.println("Twoja tablica zostanie wypełniona liczbami od 1 do "+n); for(int i=0; i<n; i++) { tablica[i]=i+1; } int x=0; while(x<n) { System.out.println(tablica[x]+". element tablicy to: "+tablica[x]); x++; } } }
ja zrobiłem bardzo podobnie, wydaje mi się jadnek ze użycie tablica.length jest bardziej "pro" podejściem Oto mój przykład: int n; Scanner odczyt = new Scanner(System.in); System.out.println("Podaj liczbę: "); n = odczyt.nextInt(); int[] tablica = new int[n]; int i = 0; while(i != n){ tablica[i] = i+1; i++; } int j = 0; while(j<n){ System.out.println("Elemnt: " + tablica[j]); j++; } } }
czy taki zapis tego zadanie jest poprawny : import java.util.Scanner; public class powtorka_tablic { public static void main(String []args){ Scanner n = new Scanner(System.in); System.out.println("podaj liczbe"); int [] b = new int[n.nextInt()]; int c=0; for (int i=0 ; i<b.length ;i++) while (c<b.length){ System.out.println("liczenie :"+b[i]+c++); } } } // tu tez pytanko - co za roznica czy w "System.out.println("liczenie :"+b[i]+c++); " b[] wpisze "i" czy "c" zwraca to samo? skoro nie ma roznicy to mozna by to zapisac tak Scanner n = new Scanner(System.in); System.out.println("podaj liczbe"); int [] b = new int[n.nextInt()]; for (int i=0 ; i<b.length ;i++) while (i<b.length){ System.out.println("liczenie :"+b[i]+i++); i jest ok ale pojawia sie problem jak chce zrobic Scanner n = new Scanner(System.in); System.out.println("podaj liczbe"); int [] b = new int[n.nextInt()]; for (int i=0 ; i<=b.length ;i++) while (i<=b.length){ System.out.println("liczenie :"+b[i]+i++); i tu juz tego nie rozumiem
Ależ się nagłowiłem. Najważniejsza rzecz której się przy okazji nauczyłem to (i++)!=(i+1) :D
Moje rozwiązanie zadania 1.13 na forum, niżej link http://forum.javastart.pl/Thread-Tablice-jednowymiarowe?pid=990#pid990
A poniżej rozwiązanie zadania 1.12, link do forum poniżej http://forum.javastart.pl/Thread-Tablice-jednowymiarowe?pid=990#pid990