Strona 1 z 2
Pomoc w cwiczeniu z butelką.
Napisane: piątek, 4 sierpnia 2017, 14:22
przez must
Heja, jestem akutalnie na 38 video, w ktorym jest cwiczenie z butelka.
Zrobiłem takie cos, tak jak bylo mowione, zeby za stworzyć tą pętlę.
Code: Zaznacz cały
package butelka;
public class Butelka {
double ileLitrow;
Butelka() {
}
Butelka(double ileLitrow) {
this.ileLitrow = ileLitrow;
}
public static void main(String[] args) {
Butelka[] butelka = new Butelka[5];
for (int i = 0; i < butelka.length; i++) {
butelka[i] = new Butelka(i + 1);
}
}
}
Jednak to nie działa, tzn chodzi o ta ilosc litrow, bo petla jak najbardziej dziala.
Nie wiem jak iść dalej, za kazda pomoc, dziekuje.
Re: Pomoc w cwiczeniu z butelką.
Napisane: środa, 9 sierpnia 2017, 12:40
przez Morfidon
Hej,
Przepraszam, że dopiero odpisuję teraz - byłem na urlopie:
Twój kod jest naprawdę bardzo ładny i wszystko działa w porządku.
Po prostu nigdzie nie wypisałeś zawartości butelki na ekran. Ustawiłeś wartości dla butelek i nie wypisałeś ich:
Code: Zaznacz cały
public double getIleLitrow() {
return ileLitrow;
}
for (int i = 0; i < butelka.length; i++) {
butelka[i] = new Butelka(i + 1);
System.out.println(butelka[i].getIleLitrow());
}
Re: Pomoc w cwiczeniu z butelką.
Napisane: piątek, 11 sierpnia 2017, 17:06
przez must
Dzięki za odpowiedź.
Mam kolejne pytanie odnośnie przesyłania wartości referencyjnych czyli tego odcinka:
Code: Zaznacz cały
public void przelej(double ilosc, Butelka gdzie) {
if (this.ileWylac(ilosc)) {
gdzie.ileWlac(ilosc);
} else {
System.out.println("Za mało");
}
}
Już oglądałem chyba 3 razy ten filmik od Ciebie, szukalem po internecie jak to z tym jest ale nie czaje do końca.
Czy chodzi o to, ze przez to, ze dałeś "Butelka gdzie" - to operujesz na tej klasie, na tym samym obiekcie?
Co by bylo gdyby sie tego nie dało, gdyby sie nie odnioslo do klasy "Butelka"?
Re: Pomoc w cwiczeniu z butelką.
Napisane: piątek, 11 sierpnia 2017, 18:18
przez Morfidon
Normalnie w innych językach stworzyłbyś po przesłaniu obiektu do metody kopię takiego obiektu. Tzn. po zmianie wartości te zmiany nie byłyby widoczne na 'zewnątrz' tzn. jedynie gdzie byłyby widoczne to w miejscu istnienia kopii obiektu czyli pomiędzy klamrą otwierającą, a zamykająca metody.
W Javie sytuacja jest wyjątkowa. Obiekty przesyłane są przez referencje co oznacza, że zmieniasz tylko nazwę obiektu. Inaczej się do niego odwołujesz (po innej nazwie, może być co prawda ta sama), z ang. refer dlatego właśnie referencja. Przez co operujesz na tym samym obiekcie, ale o innej nazwie. Przez co gdy coś zmienisz w metodzie dot. tego obiektu to zmienisz również tak jakby w 'oryginale'.
Re: Pomoc w cwiczeniu z butelką.
Napisane: piątek, 11 sierpnia 2017, 21:37
przez must
Dalej mi to ciezko zrozumiec, nie wiem dlaczego
Czyli pisząc "Butelka gdzie" operuje na danym obiekcie, zmieniam coś w nim czy cos takiego, tak?
Re: Pomoc w cwiczeniu z butelką.
Napisane: sobota, 12 sierpnia 2017, 16:19
przez Morfidon
Tak operujesz na nim, w c++ byś na nim nie operował, tylko na jego totalnie NOWEJ kopii. Teoretycznie jedynie co musisz rozumieć to fakt, że po przekazaniu obiektu operujesz na tym samym obiekcie

Re: Pomoc w cwiczeniu z butelką.
Napisane: środa, 16 sierpnia 2017, 22:21
przez must
Mysle, ze na ten moment ogarnalem to.
Teraz mam inne pytanie (nie bede tworzyl osobnego tematu). Ogladam Twoj kurs po raz 2, zeby lepiej zrozumiec i poprzypominac sobie co nie co i zatrzymalem sie na lekcji odnosnie statycznych metod i zmiennych.
Wiem jak sie ich uzywa, wiem to, ze gdy damy slowo "static" to nie trzeba tworzyc obiektu, ale nie wiem po co sie to robi naprawde... Co za roznica czy juz stworze ten obiekt i dodam te 3 liniijki wiecej czy nie. Bo skoro to ma az tak ulatwic, to dlaczego wszedzie teog nie uzywamy?
Re: Pomoc w cwiczeniu z butelką.
Napisane: środa, 16 sierpnia 2017, 23:04
przez Morfidon
modyfikator static pozwala Ci np. stworzyć zmienną do której masz dostęp bez istnienia jakiegokolwiek obiektu klasy. Wartość ta jest wspólna dla wszystkich przyszłych obiektów.
Dzięki temu możesz mieć zmienną, która śledzi np. ilość obiektów. Bo wartość ta nie jest resetowana na domyślną jak w przypadku zwykłych zmiennych w obiekcie.
Re: Pomoc w cwiczeniu z butelką.
Napisane: czwartek, 17 sierpnia 2017, 15:55
przez must
Nie wiem czy tak moge tutja zadawac pytanie odnosnie innej stronki.
Zarejestrowałem sie na hacerranku, zeby cokolwiek pocwiczyc, bo niestety nie jestem az tak kreatywny i nie potrafie wymyslec miliona cwiczen.
I mam pytanie odnosnie tego cwiczenia:
https://www.hackerrank.com/challenges/java-stdin-stdout
Już wiem jak to zrobić, bo popatrzyłem na rozwiazanie, ale moj kod to był taki:
Code: Zaznacz cały
Scanner scan = new Scanner(System.in);
int i = scan.nextInt();
double d = scan.nextDouble();
String s = scan.nextLine();
System.out.println("String: " + s);
System.out.println("Double: " + d);
System.out.println("Int: " + i);
Gdy chcialem zatwierdzic, to sie ładowało i ładowało i nie mogło sie załadować. Czytałem tę notkę tam, ale jej nie rozumiem. Gdy spojrzałem na rozwiazanie, to trzeba było dołożyć linijkę "scan.nextLine();" przed "String s = scan.nextLine();" i nie rozumiem dlaczego tak....
Po skompilowaniu w netbeansie faktycznie cos jest nie tak, bo gdy wpisze liczbe calkowita, nastepnie zmiennoprzecinkową, to program sie konczy i dla Stringa nic nie pokazuje. Dafak.
Re: Pomoc w cwiczeniu z butelką.
Napisane: wtorek, 5 września 2017, 21:51
przez mario13021
Witam
Nie będę zakładał nowego tematu bo problem dotyczy właśnie ćwieczenia z butelką. Chodzi o to, że przelewanie wody z butelki do butelki nie działa poprawnie. Dolewa wody do butelki, natomiast nie wylewa z drugiej.
Code: Zaznacz cały
package butelka;
public class Butelka {
private double ileLitrow;
Butelka(double ileLitrow)
{
this.ileLitrow = ileLitrow;
}
double getIleLitrow()
{
return ileLitrow;
}
boolean wlej(double ilosc)
{
if (this.ileLitrow + ilosc <= 5)
this.ileLitrow += ilosc;
else
{
System.out.println("Za mała pojemnosc butelki");
return false;
}
return true;
}
boolean wylej (double ilosc)
{
if (ilosc <= this.ileLitrow)
this.ileLitrow -= ilosc;
else
{
System.out.println("Za mało wody");
return false;
}
return true;
}
boolean przelej (double ilosc, Butelka gdziePrzelac)
{
if (this.wylej(ilosc) && this.wlej(ilosc))
{
gdziePrzelac.wlej(ilosc);
}
else
return false;
return true;
}
public static void main(String[] args) {
Butelka[] butelka = new Butelka[50];
for (int i = 0; i < butelka.length; i++)
{
butelka [i] = new Butelka (1) ;
}
butelka[0].wlej(4);
// butelka[0].wylej(6);
butelka[0].przelej(5, butelka[1]);
//
// butelka[0].wylej(3);
//
System.out.println(butelka[0].getIleLitrow());
System.out.println(butelka[1].getIleLitrow());
System.out.println(butelka[2].getIleLitrow());
System.out.println(butelka[3].getIleLitrow());
}
}
ogolnie wydaje mi się że problem leży gdzieś w metodzie przelej, a konkretnie w warunku if.. dodałem tam dwa warunki bo tak podpowiadała mi intuicja ale chyba jednak mnie zawiodła :/