Avatar billede empty2 Nybegynder
18. december 2002 - 20:20 Der er 10 kommentarer og
3 løsninger

Operator ! cannot be applied to int? heelp

Et program som skal sige om det er et skudår eller ej når man taster et årstal ind....  Men som jeg skrev i titel siger den at da er prob med ! hvorfor? hvad skal jeg gøre?


import javax.swing.JOptionPane;

class aar {
    public static void main (String args[] ) {

    String brugerInput = JOptionPane.showInputDialog(null, "Indtast et årstal...");
   
int skud = Integer.parseInt(brugerInput);

    if(skud%4 == 0 && !skud%100 == 0 || skud%400 == 0)
     
    JOptionPane.showMessageDialog(null, "År " + skud + " er et Skudår");
   
    else
       
    JOptionPane.showMessageDialog(null, "År " + skud + " er ikke et Skudår");
   
    System.exit(0);
  }
}
Avatar billede soreno Praktikant
18. december 2002 - 20:25 #1
if(skud%4 == 0 && !skud%100 == 0 || skud%400 == 0)

skal være

if(skud%4 == 0 && skud%100 != 0 || skud%400 == 0)
Avatar billede erikjacobsen Ekspert
18. december 2002 - 20:25 #2
if(skud%4 == 0 && !(skud%100 == 0) || skud%400 == 0)

eller

  if(skud%4 == 0 && skud%100 != 0 || skud%400 == 0)
Avatar billede erikjacobsen Ekspert
18. december 2002 - 20:26 #3
eller mener du
if(skud%4 == 0 && !(skud%100 == 0 || skud%400 == 0))
??
Avatar billede arne_v Ekspert
18. december 2002 - 20:38 #4
if(((skud % 4) == 0) && (((skud % 100) != 0) || ((skud % 400) == 0)))

skulle gerne både:
  - compiler
  - være korrekt formel-mæssigt
  - være til at læse uden at kunne huske precedence reglerne
Avatar billede empty2 Nybegynder
18. december 2002 - 20:45 #5
Soreno!!! da du svarede rigtig og hurtigst vil jeg give dig pointene men det kan jeg ikke da du har lavet det i en kommentar det saakl jo være et svar.. med mindre du ikke vil have point...
Avatar billede soreno Praktikant
18. december 2002 - 21:14 #6
Jeg synes godt du kan dele ud til erik og arne også - så bliver vi alle sammen så glade :-)
Avatar billede erikjacobsen Ekspert
18. december 2002 - 21:18 #7
ikke for min skyld - jeg er glad i forvejen
Avatar billede empty2 Nybegynder
18. december 2002 - 21:28 #8
Og tak for hjælpen alle 3.....
Avatar billede erikjacobsen Ekspert
18. december 2002 - 21:38 #9
Nå, men så må du også få forklaringen.

!-operatoren er skruet sådan sammen, at den "binder
stærkt" - dvs. virker på det der står umiddelbart
til højre for det. Når du derfor skriver

  !skud%100==0

forøsger den at negere enten skud eller skud%0 afhængig
af om % binder svagere eller stærkere end !.

Det er som Arne antyder svært at huske hvad der binder
hvor meget. Derfor bør du, som Arne siger, sætte
tilstrøkkeligt mange paranteser, så du ikke er i
tvivl.

På min ønskeseddel til julemanden i år står der
at jeg gerne vil have en guldbroderet hovedpude
med teksten "When in doubt, parenthesize" på den
ene side, og "Er du i tvivl, så sæt paranteser" på
den anden.
Avatar billede arne_v Ekspert
18. december 2002 - 21:44 #10
Java Code Conventions har følgende lille afsnit:

It is generally a good idea to use parentheses liberally in expressions involving mixed operators
to avoid operator precedence problems. Even if the operator precedence seems clear to you, it
might not be to others?you shouldn?t assume that other programmers know precedence as
well as you do.
if (a == b && c == d) // AVOID!
if ((a == b) && (c == d)) // USE
Avatar billede erikjacobsen Ekspert
18. december 2002 - 21:51 #11
Det eksempel, Arne, er så netop et af de steder hvor jeg ikke
ville sætte paranteser, da "ingen" programmør vil være i tvivl.
De præcedens-regler der virker der, stammer helt tilbage fra den
første version af C. Men bliver kun forvirret hvis man fx er vant
til at arbejde med fx Pascal, hvor lige netop sammenligning og
konjunktion er byttet om i præcedens i forhold til C, C++, Java osv.
Niklaus Wirth må have haft en dårlig dag, da han skrev syntaksbeskrivelsen
for logiske udtryk i Pascal.

Men ellers er vi selvfølgelig 100% enige ;)
Avatar billede arne_v Ekspert
18. december 2002 - 22:27 #12
Java Code Conventions er lidt firkantede i deres
anvendelse af "reglerne".
Avatar billede empty2 Nybegynder
18. december 2002 - 23:53 #13
Takker :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester