Wątek przeniesiony 2014-06-10 19:55 z Java przez bogdans.

Prosze o pomoc, przy uzyciu warunku if.

0

Witam wszystkich :) mam pewien problem...Mianowice mam za zadanie zrobić aby program który mnoży sprawdza czy dana liczba jest parzyste czy tez nie i wypisywal komunikat jaka jest ta liczba.Nie mogę uporać się z tym wyskakuje mi błąd patrzcie niżej.

public 
class Main 
{ 
public static void main(String args[]) 
{ 
int a,b; 
a=5; 
b=6; 
System.out.println(a+"*"+b +"=" +a*b ); 
if(+a*b/2);
{
System.out.println("wynik mnozenia jest parzysty");
}
} 
}

a o to bład z consoli

 D:\>javac Main.java
Main.java:10: error: incompatible types: int cannot be converted to boolean
if(+a*b/2);
       ^

PS: Za wszelka pomoc z góry dziekuje :)

0

Em, co to:
a*b/2 miałoby Twoim zdaniem robić? (pomijam już oczywiście błędnie umiejscowiony średnik po ) w tej samej linijce)
Lub w drugą stronę: co np.if (19) (bo taki może być wynik tej operacji) miałby oznaczać?

0

a*b/2 no chciałem aby wynik mi dzieliło przez 2.No jak wyjdzie dzielenie bez reszty to program poda informacje ze liczba jest parzysta. Jestem początkującym wiec proszę o was o pomoc w tym ;)

0

O modulo słyszał?

0

nie :p to mam zadanie z programowania. i mam do tego zadania wykorzystac warunek if.

0

Że nie słyszałeś, to wiem.
To była taka delikatna sugestia, abyś jednak poczytał o modulo...

0

a nie mógłbyś napisać tego jak to powinno być ? bylbym bardzo wdzieczny ;p

0

Panowie od was zależy się czy przejdę z tego przedmiotu w tym roku jestem ciemny w te kulki bardzo bym prosił o gotowe rozwiązanie ledwo to sam napisałem... xD

0
Raafi napisał(a):

Panowie od was zależy się czy przejdę z tego przedmiotu

No właśnie - a rzecz w tym, że nie powinno.

0
Raafi napisał(a):

Panowie od was zależy się czy przejdę z tego przedmiotu w tym roku jestem ciemny w te kulki bardzo bym prosił o gotowe rozwiązanie ledwo to sam napisałem... xD

iks de.

Kiedy masz egzamin/poprawkę/cokolwiek innego, do czego jest Ci to potrzebne?

1
Raafi napisał(a):

Panowie od was zależy się czy przejdę z tego przedmiotu ...

Dopóki walisz takie: if(+a*b/2); byki nie powinieneś przejść.

1

Gdybyś przysiadł nad tutorialem zamiast żebrać o gotowca to w 20 min miałbyś to zrobione. I wyobraź sobie że w następnym roku będą trudniejsze rzeczy.

0
public 
class Main 
{ 
public static void main(String args[]) 
{ 
int a,b;
a=5; 
b=6; 
System.out.println(a+"*"+b +"=" +a*b ); 
if( (a*b)%2 == 0);
{ System.out.println("wynik mnozenia jest parzysty");
else
{
System.out.println("wynik mnozenia jest nieparzysty");
}
}
}
}

a tutaj co zle xd ? bez else i ponizej dzialal a teraz odpowiada posluszeństwa. ;/

0

średnik jest zły

0

Sformatuj kod jak należy wcięcia itp to zobaczysz.

0

Wielkie dzięki za pomoc ;) Program działa jak nalezy Dziekuje i pozdrawiam ^^

0
Patryk27 napisał(a):

Że nie słyszałeś, to wiem.
To była taka delikatna sugestia, abyś jednak poczytał o modulo...

@Patryk27
A po co modulo skoro jest &?

0
wojciech.kudla napisał(a):

A po co modulo skoro jest &?

& działa tylko dla kolejnych potęg dwójki, modulo jest uniwersalne i bardziej intuicyjne

0
wojciech.kudla napisał(a):
Patryk27 napisał(a):

Że nie słyszałeś, to wiem.
To była taka delikatna sugestia, abyś jednak poczytał o modulo...

@Patryk27
A po co modulo skoro jest &?

Bo jest czytelniejsze? :|
Poza tym to ta sama forma sprawdzania tego samego (tyle że & nie zastosujesz dla liczb ujemnych).

0
fadsfa napisał(a):
wojciech.kudla napisał(a):

A po co modulo skoro jest &?

& działa tylko dla kolejnych potęg dwójki, modulo jest uniwersalne i bardziej intuicyjne

A możesz wyjaśnić dlaczego & wg ciebie nie zadziała dla dowolnej liczby naturalnej?
To prawda że modulo może wydawać się bardziej intuicyjne, ale nie zapominajmy ze jest również ok 1000 razy wolniejsze od &

0
wojciech.kudla napisał(a):
fadsfa napisał(a):
wojciech.kudla napisał(a):

A po co modulo skoro jest &?

& działa tylko dla kolejnych potęg dwójki, modulo jest uniwersalne i bardziej intuicyjne

A możesz wyjaśnić dlaczego & wg ciebie nie zadziała dla dowolnej liczby naturalnej?
To prawda że modulo może wydawać się bardziej intuicyjne, ale nie zapominajmy ze jest również ok 1000 razy wolniejsze od &

Dla x % 7 otrzymalibyśmy już (x+x/7) & 7 - w każdym razie na x86 tracimy jakikolwiek zysk wydajnościowy (div liczy zawsze wynik dzielenia i resztę jednocześnie).

0
Patryk27 napisał(a):

Dla x % 7 otrzymalibyśmy już (x+x/7) & 7 - w każdym razie na x86 tracimy jakikolwiek zysk wydajnościowy (div liczy zawsze wynik dzielenia i resztę jednocześnie).

Proponuje lepiej zapoznac sie z podstawami. Sposob reprezentacji liczb calkowitych stosowany przez komputery pozwala nam okreslic parzystosc liczby za pomoca prostego sprawdzenia LSB, np. x & 1 == 1 to liczba nieparzysta.

0
wojciech.kudla napisał(a):

To prawda że modulo może wydawać się bardziej intuicyjne, ale nie zapominajmy ze jest również ok 1000 razy wolniejsze od &

Większość kompilatorów ma optymalizatory, więc zastąpią % na &.
Ale wg mnie to i tak nie usprawiedliwia użycia % tam gdzie można użyć &.
Twierdzenie że % czytelniejszy od & uważam za przyznanie się do braku rozumienia systemu binarnego.

0
wojciech.kudla napisał(a):

Proponuje lepiej zapoznac sie z podstawami. Sposob reprezentacji liczb calkowitych stosowany przez komputery pozwala nam okreslic parzystosc liczby za pomoca prostego sprawdzenia LSB, np. x & 1 == 1 to liczba nieparzysta.

W cytacie, do którego się odnosiłem, mówiłeś o liczbach naturalnych, a nie samym sprawdzaniu parzystości.
Poza tym x & 1 == 1 to liczba nieparzysta nie jest prawdą, chyba że przyjmiesz założenie, że x > 0

0
_13th_Dragon napisał(a):

Twierdzenie że % czytelniejszy od & uważam za przyznanie się do braku rozumienia systemu binarnego.

Zgadza sie; gros programistow nie wie co to jest safepoint, gc root czy CAS. Tak samo nie znaja binarnych reprezentacji liczb calkowitych czy zmiennoprzecinkowych. Wydawalo mi sie ze to forum jest m.in. po to zeby takie tematy ludziom przyblizac.

0
Patryk27 napisał(a):

W cytacie, do którego się odnosiłem, mówiłeś o liczbach naturalnych, a nie samym sprawdzaniu parzystości.
Poza tym x & 1 == 1 to liczba nieparzysta nie jest prawdą, chyba że przyjmiesz założenie, że x > 0

Mowa jest caly czas o sprawdzaniu parzystosci. Ten sposob zadziala dla wszystkich liczb calkowitych (nie tylko naturalnych).
Ponownie sugeruje zapoznanie sie z binarna reprezentacja integerow, zwlaszcza 2s-complement.

0

O, faktycznie, mój błąd - zwracam honor.
Musiało mi się coś popiep... pomylić :P

1
Patryk27 napisał(a):

Musiało mi się coś popiep... pomylić :P
Ba nawet wiem skąd ta pomyłka. To właśnie % (do C++11) był niejednoznaczną (a dokładniej sprzętowo zależną) operacją i mógł dla liczby ujemnej zwrócić np -1 (czyli liczbę ujemną). Zaś & działa od zawsze jednoznacznie.

1

@_13th_Dragon i @wojciech.kudla, teoretycznie macie rację. Ale kod jest kierowany do osobnika, który pisze takie cuda:

if(+a*b/2);

(absurdalny operator i średnik po ifie).

0
bogdans napisał(a):

... Ale kod jest kierowany do osobnika, który pisze takie cuda:if(+a*b/2);

Jestem tego świadom, ba uważam że ten autor tematu jeszcze nie "dojrzał" aby zaliczyć przedmiot, to co piszę kieruję do kogoś kto znajdzie tą dyskusje poprzez np googla, tak robię nie tylko w tym poście lecz we wszystkich.

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