Avatar billede thecannmann Praktikant
31. oktober 2012 - 15:25 Der er 9 kommentarer og
1 løsning

Brug for hjælp til simpel programmering

Hej Eksperter!

Jeg har et rigtig dejligt spørgsmål til jer, som I nok har hørt før: Hvad er der forkert i denne kode?

Heldigvis er jeg HELT ny i java-sproget, så det er ikke en særlig svær kode ;)

Det er noget vi har fået for i Datalogi, og jeg kan simpelthen ikke finde ud af det.

Koden:
public class Algoritme4{
    public static void main(String[] args){
        algoritme1(2);

        int resultat = int a;

public static int algorite1(int a) {
            return 2*a;

            System.out.println(resultat);
        }
}
}
Avatar billede tjp Mester
31. oktober 2012 - 15:36 #1
Du har vist en slåfejl i:
public static int algorite1(int a)

Skulle nok ha stået:
public static int algoritme1(int a)
Avatar billede amews_aj Nybegynder
31. oktober 2012 - 15:40 #2
Rigtigt som tjp skriver, men der er en del andre ting.
I stedet for at skrive en løsning, så lad mig forklare nogle basale ting, og se om du selv kan klare den derfra.

int x; bruges til at fortælle at x kan holde en værdi af typen integer (heltal).

int x = 2; Giver x værdien 2, og kan også skrives:
int x;
x = 2;

Altså angiver man kun typen (int) første gang.

En metode kan returnere en værdi. I dit tilfælde har du skrevet
.... int algorite1(...), og derved fortalt at denne metode returnerer et værdi af typen heltal.
Efter return ..; bliver der ikke kørt flere linjer i metoden - den stopper og vender tilbage til hvor metoden blev kaldt fra.
Hvor du kalder din metode får du altså et heltal tilbage.

En klasse består bl.a. af en samling metoder. Metoder kan ikke skrives inde i andre metoder.
Så derfor er strukturen:
class MinKlasse {
  ..Metode_1() { }
  ..Metode_2() { }
}

Prøv at se om du kan skrive koden om vha. denne viden. Forsøg noget, og skriv hvad du kommer frem til. Så kan vi tage den derfra :)
Avatar billede thecannmann Praktikant
31. oktober 2012 - 15:40 #3
Den har jeg lige fået rettet. Så den herinde, da jeg havde oprettet mit spørgsmål. Det hjælper at se det fra en anden vinkel, hva ;)

Så manglede jeg også en Tuborg-klamme længere oppe. Det er rettet nu.

Den melder stadig fejl ved:
int resultat = int a;

Min koder ser nu sådan ud:
public class Algoritme4{
    public static void main(String[] args){
        algoritme1(2);

        int resultat = int a;

    }

    public static int algorimte1(int a) {
            return 2*a;

            System.out.println(resultat);
    }
}
Avatar billede Haven Nybegynder
31. oktober 2012 - 15:43 #4
Der ud til, at være flere fejl i dit script.
Jeg ville umiddelbart mene, at det skulle sættes sådan op:

    public static void main(String[] args){
        int resultat = algoritme1(2);
        System.out.println(resultat);
    }
   
    public static int algoritme1(int a) {
            return 2*a;
    }


Sådan at de to methods ikke overlapper hinanden, og variablen resultat, får tildelt værdien returneret fra algoritme1

/Chup
Avatar billede thecannmann Praktikant
31. oktober 2012 - 15:50 #5
Tak for til jer alle.

Jeg har rykket "System.out.println(a);{" ud af metoden(hvis jeg har forstået korrekt, arnews_aj).

Jeg kan godt følge logikken i det du skriver, Haven, men jeg synes bare ikke det var sådan vi lærte det.

Vi har læst pseudokode først og skal implatere de koder i Java nu her.


Min kode ser lige nu sådan her ud:
public class Algoritme4{
    public static void main(String[] args){
        algoritme1(2);
   
    int resultat = int a;

    }

    public static int algoritme1(int a) {
            return 2*a;
    }

System.out.println(resultat);{
}

}

Og jeg er simpelthen bare så sikker på, at "int resultat = int a;" stod deroppe, hvor jeg har skrevet det. Måske er jeg helt forkert på den?
Avatar billede Haven Nybegynder
31. oktober 2012 - 16:10 #6
Kender ikke rigtigt noget til java decideret, men mere til PHP og C#. Jeg vil umiddelbart mene, at dette giver logisk mening :-)
--

Variablen "a", eksisterer kun inden i algoritme1, hvor den er lig med værdien, 2 fra "algoritme1(2);"

Når du derfor gør følgende:
int resultat = a

Sætter du resultat, til at være lig med "a" som ikke eksisterer i denne sammenhæng, og resultat vil derfor ikke have en værdi.

Men hvis du derimod gør følgende:
int resultat = algoritme1(2);

Sættes resultat til den returnerende værdi fra funktionen.


System.out.println(resultat);{
}

Outputtet, skal foregå igennem en funktion/method, den kan ikke køres direkte i en klasse.
Avatar billede amews_aj Nybegynder
31. oktober 2012 - 16:14 #7
Haven har faktisk foræret dig løsningen.
Ser vi på din i #5, så siger du
algoritme1(2);
hvilket blot udfører metoden algoritme1, og ikke bruger resultatet til noget.

int resultat = int a;
giver ikke rigtig mening. (int x) er til at fortælle hvilken type x har, og int x = 2; fortæller på en gang hvilken type x har, og hvilken værdi den skal holde.
Hvad skulle int resultat = int a; betyde? "resultat har typen heltal, og skal sættes til værdien af 'a skal være et heltal'". Det giver ikke rigtig mening.

Det du ønsker er som Haven skriver, at gemme resultatet af metodekaldet i "resultat".

System.out.println(resultat); er et metodekald ligesom algoritme1(2);. Der skal altså ikke være {} bagefter. Derudover så står det uden for din main metode, og derfor kan programmet ikke rigtig køres. Hvornår skulle System.out.println(resultat); blive kørt ? ;)

Håber det giver mening
Avatar billede thecannmann Praktikant
01. november 2012 - 12:27 #8
Jeg er desværre ikke sikker på, at jeg helt forstår. Det er nok fordi at jeg mangler noget kendskab til det endnu eller lidt mere øvelse.

Der er dele jeg forstår, og dele jeg ikke forstår.

Men jeg takker mange gange for jeres svar og tid. I må gerne lægge et svar :)

Den ser nu sådan ud, og virker:
public class Algoritme4{
    public static void main(String[] args){
    int resultat = algoritme1(2);
        System.out.println(resultat);
    }

    public static int algoritme1(int a) {
            return 2*a;
    }

}


Jeg vælger at lade den ligge her og tage nogle af de opgaver, som ikke er så komplicerede :P Der kommer nok alligevel et spørgsmål eller 2 mere fra mig af ;)
Avatar billede amews_aj Nybegynder
01. november 2012 - 17:19 #9
int algoritme1(int a) er en metode som du kan give et heltal (int a) og få et heltal (int) tilbage.
Det tal du får som input kalder du a.
Metoden returnerer tallet 2 gange a.

algoritme1(2) betyder at a sættes til 2, og derfor får du "return 2*2". Det gemmer du i 'resultat' af typen heltal.
Til sidst kalder du en metode (println) som her tager et tal som input (resultat) og skriver det på skærmen.
Avatar billede thecannmann Praktikant
05. december 2012 - 10:29 #10
Jeg prøvede at lukke dette spørgsmål sidste uge, men den ville sgu ikke. Det er nu lukket! :)
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