Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  12 836
Hei,

Jeg driver å lærer meg Java-programmering, og holder i denne anledning på med en oppgave fra læreboken.

Oppgaven går ut på at man skal oppgi studentnummer og poengsum på eksamen, så skal programmet bestemme karakter og skrive ut en kort beskjed.

Her er kildekoden så langt
import java.util.Scanner;
public class Oppg2_11 {
public static void main(String[] args){
double poengSum;
int studNr;
Scanner tastatur = new Scanner (System.in);
System.out.print("Oppgi ditt studentnummer: ");
studNr = tastatur.nextInt();
tastatur.nextLine();
System.out.print("Oppgi din poengsum: ");
poengSum = tastatur.nextDouble();
tastatur.nextLine();
if (poengSum < 15);{
System.out.printf("Karakter for student nr. %d er F. Ikke bestått.%n", studNr);}
if (poengSum >=15 && poengSum <31);
System.out.printf("Karakter for student nr. %d er E. Bestått.%n", studNr);
if (poengSum >=31 && poengSum < 61);
System.out.printf("Karakter for student nr. %d er D. Bestått.%n", studNr);
if (poengSum >= 61 && poengSum < 81);
System.out.printf("Karakter for student nr. %d er C. Bestått.%n", studNr);
if (poengSum >=81 && poengSum < 91);
System.out.printf("Karakter for student nr. %d er B. Bestått.%n", studNr);
if (poengSum >=91 && poengSum <=100);
System.out.printf("Karakter for student nr. %d er A. Bestått.%n", studNr);
Vis hele sitatet...
Problemet er at under kjøring av programmet skrives alle beskjedene ut, uansett hvilken poengsum jeg oppgir, og jeg skjønner ikke hvorfor

Kjøring av programmet:
Oppgi ditt studentnummer: 43
Oppgi din poengsum: 56,4
Karakter for student nr. 43 er F. Ikke bestått.
Karakter for student nr. 43 er E. Bestått.
Karakter for student nr. 43 er D. Bestått.
Karakter for student nr. 43 er C. Bestått.
Karakter for student nr. 43 er B. Bestått.
Karakter for student nr. 43 er A. Bestått.
Vis hele sitatet...
Setter stor pris på om noen forteller meg hva som er galt her, evt. alternativ til enklere løsning.

Kan legge til at jeg er temmelig fersk innen programmering.

På forhånd takk.
Sist endret av tobbi94; 29. juli 2011 kl. 17:20.
Etter første if-statement. Bytt ut alle if-ene med elseif
Lite kontroversiell
ticks's Avatar
Syntaksen din på if-setningene er gal. Den første var -nesten- rett.

Sitat av Chopin Vis innlegg
Etter første if-statement. Bytt ut alle if-ene med elseif
Vis hele sitatet...
Dette har ingenting med saken å gjøre.
Sist endret av ticks; 29. juli 2011 kl. 17:24.
Trådstarter
45 1
Sitat av Chopin Vis innlegg
Etter første if-statement. Bytt ut alle if-ene med elseif
Vis hele sitatet...
Dette har jeg prøvd, det ga bare en feilmelding:

Exception in thread "main" java.lang.Error: Unresolved compilation problems:
Syntax error on token "else", delete this token
Syntax error on token "else", delete this token
Syntax error on token "else", delete this token
Syntax error on token "else", delete this token
Syntax error on token "else", delete this token

at Oppg2_11.main(Oppg2_11.java:15)
Vis hele sitatet...
Sitat av ticks Vis innlegg
Syntaksen din på if-setningene er gal.


Dette har ingenting med saken å gjøre.
Vis hele sitatet...
Problemet er at under kjøring av programmet skrives alle beskjedene ut, uansett hvilken poengsum jeg oppgir, og jeg skjønner ikke hvorfor
Vis hele sitatet...
Han påstår nå at programmet compiler og kjører så...

Kan du poste hele koden din? Ser ut til ting mangler...
Sist endret av Chopin; 29. juli 2011 kl. 17:25.
Lite kontroversiell
ticks's Avatar
Sitat av Chopin Vis innlegg
Han påstår nå at programmet compiler og kjører så...

Kan du poste hele koden din? Ser ut til ting mangler...
Vis hele sitatet...
Den kompilerer, men gjør ikke det han vil, nettopp fordi han bruker if-setningene galt. Hvis han ser på eksempler i boka på hvordan man faktisk skriver if-setninger, så vil han se det umiddelbart.

Kode

import java.util.Scanner;
public class Oppg2_11 
{
    public static void main(String[] args)
    {
        double poengSum;
        int studNr;
        
        Scanner tastatur = new Scanner (System.in);
        System.out.print("Oppgi ditt studentnummer: ");
        
        studNr = tastatur.nextInt();
        tastatur.nextLine();
        
        System.out.print("Oppgi din poengsum: ");
        poengSum = tastatur.nextDouble();

        tastatur.nextLine();
        
        if (poengSum < 15)
        {
            System.out.printf("Karakter for student nr. %d er F. Ikke bestått.%n", studNr);
        }
        else if (poengSum >=15 && poengSum <31) {
            System.out.printf("Karakter for student nr. %d er E. Bestått.%n", studNr);
        }
        else if (poengSum >=31 && poengSum < 61)
        {
            System.out.printf("Karakter for student nr. %d er D. Bestått.%n", studNr);
        }
        else if (poengSum >= 61 && poengSum < 81)
        {
            System.out.printf("Karakter for student nr. %d er C. Bestått.%n", studNr);
        }
        else if (poengSum >=81 && poengSum < 91)
        {
            System.out.printf("Karakter for student nr. %d er B. Bestått.%n", studNr);
        }
        else if (poengSum >=91 && poengSum <=100) 
        {
            System.out.printf("Karakter for student nr. %d er A. Bestått.%n", studNr);
        }
    }
}
Prøv dette
Sist endret av Chopin; 29. juli 2011 kl. 17:29.
Trådstarter
45 1
Sitat av Chopin Vis innlegg
Han påstår nå at programmet compiler og kjører så...

Kan du poste hele koden din? Ser ut til ting mangler...
Vis hele sitatet...
Programmet kompilerer og kjører (når jeg ikke bruker else-if).
Hele koden var med i første post, utenom to slike "}".

Her er hele kildekoden:

import java.util.Scanner;
public class Oppg2_11 {
public static void main(String[] args){
double poengSum;
int studNr;
Scanner tastatur = new Scanner (System.in);
System.out.print("Oppgi ditt studentnummer: ");
studNr = tastatur.nextInt();
tastatur.nextLine();
System.out.print("Oppgi din poengsum: ");
poengSum = tastatur.nextDouble();
tastatur.nextLine();
if (poengSum < 15);{
System.out.printf("Karakter for student nr. %d er F. Ikke bestått.%n", studNr);}
if (poengSum >=15 && poengSum <31);
System.out.printf("Karakter for student nr. %d er E. Bestått.%n", studNr);
if (poengSum >=31 && poengSum < 61);
System.out.printf("Karakter for student nr. %d er D. Bestått.%n", studNr);
if (poengSum >= 61 && poengSum < 81);
System.out.printf("Karakter for student nr. %d er C. Bestått.%n", studNr);
if (poengSum >=81 && poengSum < 91);
System.out.printf("Karakter for student nr. %d er B. Bestått.%n", studNr);
if (poengSum >=91 && poengSum <=100);
System.out.printf("Karakter for student nr. %d er A. Bestått.%n", studNr);

}
}
Vis hele sitatet...
Når du har semikolon rett etter if setningen vil ikke if setningen gjøre noe, så bytt om f.eks:
if (poengSum >=15 && poengSum <31); til if (poengSum >=15 && poengSum <31)
Trådstarter
45 1
Sitat av ticks Vis innlegg
Den kompilerer, men gjør ikke det han vil, nettopp fordi han bruker if-setningene galt. Hvis han ser på eksempler i boka på hvordan man faktisk skriver if-setninger, så vil han se det umiddelbart.
Vis hele sitatet...
Jeg har brukt if-setningen tilsynelatende nøyaktig slik den er vist i boken.
Hva er det med syntaksen som er galt?

Sitat av drepnir Vis innlegg
Når du har semikolon rett etter if setningen vil ikke if setningen gjøre noe, så bytt om f.eks:
if (poengSum >=15 && poengSum <31); til if (poengSum >=15 && poengSum <31)
Vis hele sitatet...
Der fungerte det!

Tusen takk!
Lite kontroversiell
ticks's Avatar
Sitat av tobbi94 Vis innlegg
Jeg har brukt if-setningen tilsynelatende nøyaktig slik den er vist i boken.
Hva er det med syntaksen som er galt?
Vis hele sitatet...
Semikolonet. Og på den første if-setningen har du laget en kodeblokk, med { og }, men ikke på resten.

Denne setningen er ikke gyldig:

Kode

if (poengSum < 15);
   System.out.printf("Karakter for student nr. %d er F. Ikke bestått.%n", studNr);
Alle disse tre setningene er gyldige:

Kode

if (poengSum < 15) 
   System.out.printf("Karakter for student nr. %d er F. Ikke bestått.%n", studNr);

Kode

if (poengSum < 15) System.out.printf("Karakter for student nr. %d er F. Ikke bestått.%n", studNr);

Kode

if (poengSum < 15) {
   System.out.printf("Karakter for student nr. %d er F. Ikke bestått.%n", studNr);
}
Om du ikke bruker kodeblokker { og }, vil if-setningen utføre all kode frem til neste semikolon. Om du vil utføre flere instrukser innenfor samme if-blokk, må du altså gjøre det slik som det er gjort i den tredje setningen. Det er allikevel alltid lurt å bruke slike blokker, for det gjør koden langt lettere å forstå både for deg selv og andre som leser den.

Kode

if (poengSum < 15) {
   System.out.printf("Karakter for student nr. %d er F. Ikke bestått.%n", studNr);
   System.out.printf("Instruks #2");
   poengSum += 10; /* Instruks #3 */
}
Sist endret av ticks; 29. juli 2011 kl. 17:44.
Trådstarter
45 1
Sitat av ticks Vis innlegg
Semikolonet. Og på den første if-setningen har du laget en kodeblokk, med { og }, men ikke på resten.

Denne setningen er ikke gyldig:

Kode

if (poengSum < 15);
   System.out.printf("Karakter for student nr. %d er F. Ikke bestått.%n", studNr);
Alle disse tre setningene er gyldige:

Kode

if (poengSum < 15) 
   System.out.printf("Karakter for student nr. %d er F. Ikke bestått.%n", studNr);

Kode

if (poengSum < 15) System.out.printf("Karakter for student nr. %d er F. Ikke bestått.%n", studNr);

Kode

if (poengSum < 15) {
   System.out.printf("Karakter for student nr. %d er F. Ikke bestått.%n", studNr);
}
Om du ikke bruker kodeblokker { og }, vil if-setningen utføre all kode frem til neste semikolon. Om du vil utføre flere instrukser innenfor samme if-blokk, må du altså gjøre det slik som det er gjort i den tredje setningen. Det er allikevel alltid lurt å bruke slike blokker, for det gjør koden langt lettere å forstå både for deg selv og andre som leser den.

Kode

if (poengSum < 15) {
   System.out.printf("Karakter for student nr. %d er F. Ikke bestått.%n", studNr);
   System.out.printf("Instruks #2");
   poengSum += 10; /* Instruks #3 */
}
Vis hele sitatet...
Da forstår jeg!
Takk for godt forklarende svar =)
Slik som du har satt opp programmet nå vil den gå igjennom alle if setningene og sjekke uansett om den går inn i noen tidligere if tester. Dette gjør at programmet bruker lengre tid enn nødvendig på å kjøre.

La oss si du har en int a som er enten 1,2 eller 3 og i dette tilfellet er a = 1.
Dårlig kode:
if (a == 1){ //vi går inn i kodeblokken og utfører koden
//...
}
if(a == 2){ //sjekker her også, noe vi ikke vil, vi har jo utført koden i den første if sjekken
//...
}
if(a == 3){ //samme her

}

bra kode som går raskere:
if(a==1){

}else if(a == 2){ //blir ikke sjekket

}else{ //blir heller ikke sjekket

}