JAVA Krótkie zadanko - prośba

A A A
Początkujący
Avatar benzaa
reputacja: 0
posty: 9
offline
15.10.10 11:26 | #2264952 | (link) | zgłoś naruszenie
Cześć!
Mógłby ktoś napisać dla mnie program w javie, który wylosuje trzy różne od siebie liczby całkowite z przedziału [1;49].
Muszę go wykonać na zajęcia ale nie wiem jak się do tego zabrać :(
Początkujący
Avatar mapa
reputacja: 202
posty: 13
offline
16.10.10 19:27 | #2266718 | (link) | zgłoś naruszenie
Kod:

Tylko dla zarejestrowanych. Chcesz mieć pełny dostęp do Ajo.pl?
Zarejestruj się i dołącz do naszego grona wirtualnych przyjaciół!

Jako ciekawostkę(no i żeby się trochę pochwalić) dodam tylko, że jeśli rozmiar tablicy wyniku ustalisz, np. na 10, to program wylosuje 10 różnych liczb, przy czym:
1. Dla liczb większych od 49, program się zapętli. Uzasadnienie dlaczego pozostawiam tobie...;)
2. Im większy rozmiar tablicy, tym zastosowana metoda losowania staje się coraz bardziej nieoptymalna(znów uzasadnienie pozostawiam Tobie). Oczywiście różnicy w czasie wykonywania pomiędzy rozmiarem 1 a 49 nie zauważysz, ale to tylko zasługa mocy współczesnych procków;). Dla małych liczb jest to jednak rozwiązanie wystarczające, pewnie nawet najlepsze...
Ps1. To, że formatowanie kodu się posypało to nie moja zasługa, w widoku edycji jest ok.
Ps2. Oczywiście liczę na rep+;).
Ostatnio edytował (5): mapa dnia 16.10.10 19:31
Początkujący
Avatar krzysiek.ste
reputacja: 0
posty: 5
offline
17.12.10 19:07 | #2345445 | (link) | zgłoś naruszenie
Program penie dziala poprawnie, ale ogolnie to nie jest poprawde pod wzgledem tzw dobrego programowania:
1.wylosujmy liczbe z przedzialu [1-49]
tab[i] = rand.nextInt(49) + 1;
ta linijka kodu zwroci liczbe z przedzialu (1,50).
raczej pownno byc tak:
tab[i] = rand.nextInt(48) + 1;
2.NIe stosuje sie petni do while. Kod przez to staje sie bardzo nie czytelny. Polecam tylko while.
3.Najbardziej razi ze losujesz 3 liczby i dopiero sprawdzasz czy sie powtarzaja. Jak tak to znowu 3 liczby i tak w kolku.
Zeby choc troszke zoptymalizowac kod lepiej losowac 1 liczbe i sprawdzac czy jest juz w tablicy. jak tak to znowu jedna, jak nie to dodac do tablicy.
4. A najpoprawniej nigdy, jak to jest możliwie, nie wykonuj zadnych operacji w main(). Do tego sa metody. Main tylko powiniec byc do wywolywnaia metod.
Pozdrawiam.(Mam nadzieje ze ktos skozysta z tych, naprawde z dobrego serca, rad),
Początkujący
Avatar mapa
reputacja: 202
posty: 13
offline
18.12.10 13:12 | #2346363 | (link) | zgłoś naruszenie
Kolego jak już bierzesz się za poprawianie kogoś, to może byś najpierw przeanalizował jego kod?
Ad. 1 Cytat z
Kod:

Tylko dla zarejestrowanych. Chcesz mieć pełny dostęp do Ajo.pl?
Zarejestruj się i dołącz do naszego grona wirtualnych przyjaciół!
dokumentacji Javy:
Cytat:
public int nextInt(int n)
(...)
Returns:
a pseudorandom, uniformly distributed int value between 0 (inclusive) and n (exclusive).

Czyli "rand.nextInt(49) + 1;" zwróci dokładnie to o co chodziło(liczbę z przedziału [1, 49], a Twój kod liczbę z przedziału [1, 48]. No chyba, że znasz jakąś inną definicję słowa "exclusive".

Ad. 2 Nie wiem co jest nieczytelnego w "do while" instrukcja jak każda inna....

Ad. 3
Cytat:
Najbardziej razi ze losujesz 3 liczby i dopiero sprawdzasz czy sie powtarzaja. Jak tak to znowu 3 liczby i tak w kolku.
Gdzieś Ty to do cholery wyczytał w tym kodzie? Otóż mój kod działa dokładnie tak jak to opisałeś później, tzn. losuje liczbę, sprawdza czy już jest w tablicy, jeśli tak(wylosowano liczbę którą już mamy), nie wychodzi z pętli do while i losuje liczbę na tą samą pozycje. W przeciwnym wypadku(wylosowana liczba jest różna od już wylosowanych), losuje następną liczbę. Warto patrzeć gdzie w kodzie kończą się nawiasy...

Ad. 4
Cytat:
A najpoprawniej nigdy, jak to jest możliwie, nie wykonuj zadnych operacji w main(). Do tego sa metody.
Po pierwsze, main to też metoda tylko statyczna. Po drugie, pokaż mi kod który nie wykonuje żadnych operacji w maine;). Po trzecie: Programowanie obiektowe nie ułatwia życia komputerowi(jest wręcz przeciwnie) tylko człowiekowi(łatwiej zrozumieć skomplikowany kod, podzielić zagadnienie na moduły, itd.). Zatem zadania tego typu nawet korzystniej jest rozwiązywać w modelu strukturalnym.

Cytat:
ale ogolnie to nie jest poprawde pod wzgledem tzw dobrego programowania:
Mógłbym tu zacytować pewne przysłowie o ojcu i robieniu dzieci, ale nie będę się już nad tobą pastwił. Radzę tylko udzielać rad "od serca" w temacie na którym się znasz, bo w programowaniu to chyba za dużego doświadczenia nie masz...
Mimo wszystko pozdrawiam.

koduj linki
Użytkownik: mapa otrzymał ostrzeżenie za tą wiadomość:Brak CODE
Wartość ostrzeżenia:1
Ostatnio edytował (3): ramiko dnia 21.12.10 17:18
Początkujący
Avatar kommentator
reputacja: 0
posty: 5
offline
21.07.16 12:16 | #3138700 | (link) | zgłoś naruszenie
O dzięki za rozwiązanie :) Sam z podobnym problemem się męczyłem.
Lampa kłamstwa nie daje światła.
Początkujący
Avatar sabakers22
reputacja: 0
posty: 3
online
17.10.17 13:16 | #3162145 | (link) | zgłoś naruszenie
Dzieki za zadanie i odp :)
AJO.pl | INDATA Software Limited Korzystanie z serwisu oznacza akceptację regulaminu . Polityka prywatności Regulamin FAQ Reklama Współpraca Kontakt
login
hasło
|
Nie masz profilu? - zarejestruj się i zacznij w pełni korzystać z sieci!