Avatar billede sandra26 Nybegynder
02. januar 2001 - 03:26 Der er 4 kommentarer og
1 løsning

fejl i metoden

hvorfor får jeg denne fejl \"Can\'t make a static reference to nonstatic variable antal in class TaelBogstaver.    return antal;\" når jeg kompilerer følgende kode?
public class Opgave25
{
    public static void main(String[] args)
    {
        ConsoleReader console = new ConsoleReader(System.in);
       
        System.out.println(\"Indtast tekst: \");
        String tekst = console.readLine();
        System.out.println(\"Indtast bogstav: \");
        String bogstav = console.readLine();
       
        TaelBogstaver eksempel = new TaelBogstaver();
        eksempel.tael(tekst, bogstav);
        System.out.println(\"Antallet af bogstavet \" + bogstav + \" er: \" + eksempel.getResult());
    }
}

class TaelBogstaver
{
    public TaelBogstaver()
    {
        antal = 0;
    }
   
    public static void tael(String ord, String tegn)
    {
        int antal = 0;
        for (int i = 0; i < ord.length(); i++)
            for (int j = 0; j < tegn.length(); j++)
                {
                    char ch1 = ord.charAt(i);
                    char ch2 = tegn.charAt(j);
               
                    if (ch1 == ch2)
                    antal++;
                }
    }
   
    public static int getResult()
    {
        return antal;
    }
    private int antal;
}

Avatar billede pstric Nybegynder
02. januar 2001 - 04:33 #1
Metoderne tael og getResult er static, men prøver at referere antal, der ikke er erklæret static. Undlad at erklære de to metoder som static, og du vil slippe for den fejl.

Dit program vil nu alligevel ikke virke efter hensigten. Uanset hvilken tekst du indtaster, og hvilket bogstav du leder efter, vil du få at vide at det forekommer 0 gange.
Det skyldes, at du erklærer en lokal variabel, antal, i metoden tael\'s første linie.
Fjern den linie, og så vil linien med antal++ referere til den private variabel.
Avatar billede pstric Nybegynder
02. januar 2001 - 04:39 #2
Linien int antal = 0; er i øvrigt også årsagen til at du kun får den fejl du nævnte i metoden getResult. Metoden tael prøver jo ikke at referere TaelBogstaver\'s private int antal.
Avatar billede kama Nybegynder
02. januar 2001 - 08:33 #3
I din programstruktur er det fornuftigt, at benytte statiske metoder, samt en statisk variabel som tæller. Hvis du skal bruge tælleren i anden sammenhæng i samme program-kørsel, skal du bare huske at nulstille variablen!

public class Opgave25
{
    public static void main(String[] args)
    {
        ConsoleReader console = new ConsoleReader(System.in);
       
        System.out.println(\"Indtast tekst: \");
        String tekst = console.readLine();
        System.out.println(\"Indtast bogstav: \");
        String bogstav = console.readLine();
       
        TaelBogstaver.tael(tekst, bogstav);
        System.out.println(\"Antallet af bogstavet \" + bogstav + \" er: \" + TaelBogstaver.getResult());
    }
}

class TaelBogstaver
{
    private static int antal;
   
    public static void tael(String ord, String tegn)
    {
        for (int i = 0; i < ord.length(); i++)
            for (int j = 0; j < tegn.length(); j++)
                {
                    char ch1 = ord.charAt(i);
                    char ch2 = tegn.charAt(j);
               
                    if (ch1 == ch2)
                    antal++;
                }
    }
   
    public static int getResult()
    {
        return antal;
    }
}
Avatar billede sandra26 Nybegynder
03. januar 2001 - 00:54 #4
det var pstric\'s løsning jeg skulle bruge..da det er nogle opgaver vi har fået fra læreren..og den skulle laves med instans metoden....*s*. Det er vel rimeligt at pstric får point?
Avatar billede kama Nybegynder
03. januar 2001 - 01:00 #5
fair nok :-)
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