Avatar billede gladmhensk Nybegynder
04. oktober 2003 - 18:41 Der er 19 kommentarer og
2 løsninger

Kan den gøres anti static ?

Lad mig lægger ud med koden:


public class Const {
    static int basicNumber;



    int increase(int Number)
            {
                Number = basicNumber;
                for(int i = 0; i < 10; i++)
                {
                    basicNumber++;
                }
                return basicNumber;

            }



    public static void main(String[] args) {



        Const basicNumber1 = new Const();


        basicNumber1.increase(basicNumber);


    System.out.println(basicNumber1.basicNumber);

        System.out.println(basicNumber);

    }
}


Jeg vil gerne have, at den sidste gang jeg udskriver basicNumber at den er nulstillet, men hvis jeg fjerner static fra variablen i starten kommer fejlen "non-static variable basicNumber cannot be....."

Det er blevet til noget slam-kode, men prøv lige at se hvad der kan gøres :)
Avatar billede jakoba Nybegynder
04. oktober 2003 - 18:54 #1
variable der benyttes af en statisk metode SKAL være statiske. for det er metoden main altid.

Hvis du vil pille ved en ikke statisk variabel skal det gøres (som du også gør det) ved at oprette en instans af klassen og adressere ind i den instans.
  System.out.println(basicNumber1.basicNumber);  // som du gør her.

Men dit spørgsmål er lidt underligt. hvorfo skulle basicNumber blive nul af at ikke være statisk? Prøv at forklare lidt mere hvad du vil.

mvh JakobA
Avatar billede stigc Nybegynder
04. oktober 2003 - 19:07 #2
Kald den

public int basicNumber;

og brug:

basicNumber1.increase(basicNumber1.basicNumber);
Avatar billede arne_v Ekspert
04. oktober 2003 - 19:29 #3
Der er noget galt med hele konstruktionen (du kalder bl.a. med
et argument som ikke bliver brugt til noget).

Hvad er det du vil ?
Avatar billede gladmhensk Nybegynder
04. oktober 2003 - 21:03 #4
Kan godt se, at det er blevet til noget skod kode :D

Hvad jeg vil have er, at variablen basicNumber er 10 hvis den kaldes fra basicNumber1 instansen, og 0 hvis den bare kaldes med
System.out.println(basicNumber);
Avatar billede arne_v Ekspert
04. oktober 2003 - 21:16 #5
Den samme variabel kan jo kun have en værdi.

Hvis du vil have to forskellige værdier skal du have 2 variable.
Avatar billede gladmhensk Nybegynder
04. oktober 2003 - 21:37 #6
hmm, troede ellers, at en instans fik en kopi af variablen eftersom det er en klasse-variabel...har jeg misforstået ?
Avatar billede arne_v Ekspert
04. oktober 2003 - 21:40 #7
Det er korrekt.

Men det betyder at 2 instanser har hver sin variabel og dermed 2 variable.
Avatar billede arne_v Ekspert
04. oktober 2003 - 21:41 #8
Altså uden static har hver instans sin egen.

Med static deler alle instanser en.
Avatar billede soreno Praktikant
04. oktober 2003 - 22:03 #9
Pas lidt på med at give klasser navne som, med små bogstaver, er reserverede ord.

const er et reserveret ord i Java.


En typisk måde at lave objekter på er at kalde variablen det samme som klassen, bare med lille start bogstav. Det giver problemer hvis det så er et reserveret ord..

F.eks.
Const const = new Const();
Avatar billede gladmhensk Nybegynder
04. oktober 2003 - 22:08 #10
Lidt utydelig soreno...vil du give et eksembel ? altså lave et objekt ud fra en variabel ?
Avatar billede soreno Praktikant
04. oktober 2003 - 22:16 #11
Det var bare et generelt tips. Det har, som sådan, ikke noget med din problemstilling at gøre. Bare en hjælp til at undgå fejl senere.

const er, ligesom if, switch, int, for osv., reserverede ord.
Avatar billede soreno Praktikant
04. oktober 2003 - 22:19 #12
Jeg har lidt svært ved at se hvad formålet med din kode er ?

Er det "bare" en tæller pakket ind i en klasse ?
Avatar billede gladmhensk Nybegynder
04. oktober 2003 - 22:25 #13
Startede med, at jeg lige ville prøve og finde ud af eclipse (der er en del ting der popper op hele tiden), og ville så skrive et simpelt program, som jeg ikke kan hitte ud af :D
Avatar billede gladmhensk Nybegynder
04. oktober 2003 - 22:31 #14
Angående koden har jeg fået det til at virke...lavede bare en void method...

public class Const {

    static int basicNumber = 0;

void increase(int Nummer)
{
    Nummer = basicNumber;
    for(int i = 0; i < 10; i++)
    {
        Nummer++;
    }
    System.out.println(Nummer);
}
    public static void main(String[] args) {

    Const NumberInstance = new Const();
    NumberInstance.increase(basicNumber);
   


   



    }
}



Ps. lige et enkelt spørgsmål til arne_v, som jeg har læst bruger eclipse...kan man compile i eclipse, som normalt, eller skal man debugge ?

ps. læg lige et svar begge...
Avatar billede soreno Praktikant
04. oktober 2003 - 22:32 #15
Hvad med at arbejde lidt videre med dette:

public class Counter
{
  private int count;

  public Counter()
  {
    count = 0;
  }

  public void increase(int x)
  {
    count += x;
  }

  public int getCount()
  {
    return count;
  }
}

class Main
{
  public static void main(String args[])
  {
    Counter c1 = new Count();
    Counter c2 = new Count();
    cl.increase(1234);
    c2.increase(4321);
    System.out.println(cl.getCount());
    System.out.println(c2.getCount());
  }
}

Du kunne f.eks. implementere en "decrease" og en "reset" metode.
Det kunne nok også være fint, afhængig af situationen, hvis man teste om det var positive tal der blev puttet ind i increase og negative tal i decrease.
Avatar billede arne_v Ekspert
04. oktober 2003 - 22:35 #16
Eclipse autocompiler. Når du gemmer en rettelse compiler Eclipse automatisk.

Du kan kopiere .class filerne hvis du vil.
Avatar billede arne_v Ekspert
04. oktober 2003 - 22:35 #17
svar
Avatar billede soreno Praktikant
04. oktober 2003 - 22:45 #18
Du skriver:
"ps. læg lige et svar begge..."

Men der er altså 4 der har deltaget. Så hvem mon det er du mener ?

Hvis ikke det er mig, så tøv ikke med at afvise.
       
Iøvrigt kan jeg ikke lade være med at tænke rengøring når jeg læser overskriften :-)
Avatar billede gladmhensk Nybegynder
04. oktober 2003 - 22:51 #19
Hmm, soreno

"Iøvrigt kan jeg ikke lade være med at tænke rengøring når jeg læser overskriften :-)"

Slap lige af med de der svampe..de er jo skadelige ;)

men ja jeg mente dig og arne, eftersom det var jer der "guidede" mig..

Danke !
Avatar billede soreno Praktikant
04. oktober 2003 - 22:54 #20
Giver du aldrig din skærm en gang Ajax anti static ?

Det gør jeg hver gang jeg ser en fedtet plet (kommer typisk når nogle pølsefingre peger på skræmen).
Avatar billede gladmhensk Nybegynder
04. oktober 2003 - 22:57 #21
bruger nu ikke ajax...deres reklamer minder om "tyske schlager hits", så en fugtig klud klarer skam skærene, piller også kun på andre folks skærme :P
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