Avatar billede nph12 Nybegynder
16. marts 2006 - 17:21 Der er 27 kommentarer og
2 løsninger

Hjælp til at forstå java strukturen

Hej
Jeg har programmeret en del i java, men det har været under BlueJ.

Nu har jeg skiftet BlueJ ud med et udviklingsværktøj. Jeg har lidt svært ved at forstå, hvor jeg laver et java program nu, når jeg ikke kører BlueJ.

Hvordan skal strukturen være i et java program, når man vil lave lidt mere end bare "Hej verden"?

1) Hvordan laver jeg main-metoden til at køre java-programmet?

2) Hvordan opretter jeg variabler?

3) Hvordan laver jeg et java-program med flere klasser?

4) Hvordan kører jeg med flere metoder?

5) Hvordan kan jeg indtaste oplysninger til programmet fra tastaturet?

Hvis der er en som kan lave et lille eksempel på, hvordan man kan lave et sådan java program, vil jeg blive meget glad:-)

Det er mest strukturen jeg ikke forstår, så et lille eksempel vil hjælpe mig meget i den rigtige retning.
Avatar billede schwarz84 Nybegynder
16. marts 2006 - 17:43 #1
1)
En main-metode ser sådan her ud:

public static void main(String[] args) {
}

String-array'et inderholder så de argumenter som er givet med til programmet (modsat i c starter argumenterne allerede ved position 0 i dette array).

2)
På samme måde som du gjorde i BlueJ. Skriv felvariable øverst, udenfor metoderne og lokale variable i metoderne.

3)
Opret 2 filer: Klasse1.java og Klasse2.java.
Klasse1.java indeholder så:
public class Klasse1 {
//kode til klassen
}
og Klasse2.java indeholder tilsvarende koden til Klasse2.

4)
Jeg forstår ikke spørgsmålet her? Metoder skrives bare under hinanden som du er vant til og kaldes på objektet. Husk at det er main-metoden der opretter disse objekter og sætter tingene i gang.

5)
Du kan du eksempelvis gøre i main-metoden ved at tage argumenterne der er givet med til programmet. Hvis du vil læse mens programmet kører, skal dette gøres fra System.in
Det er en inputStream som kan læses med en InputStreamReader. De fleste Java-programmer får dog input fra en grafisk brugerflade, men det skal du nok vente lidt med at starte på.
Avatar billede schwarz84 Nybegynder
16. marts 2006 - 17:47 #2
public class minKlasse {
  public static void main(String[] args) {
    minKlasse k = new minKlasse(); //Her laver jeg en variabel k
    System.out.println("Du skrev " + args[0]); //Her skriver jeg det argument ud som blev givet til programmet. Hvis der ikke gives noget argument vil programmet standse med en fejl...
    k.enMetode(); //Her kalder jeg en metode på objectet
  }

  public enMetode() {
    System.out.println("Du har kaldt enMetode");
  }
}
Avatar billede nph12 Nybegynder
16. marts 2006 - 17:59 #3
Jeg ved ikke helt, om jeg forstået dit svar.

Kan vi lave en lille program helt fra grunden? Hvad med at lave en bank eller et varehus?
Avatar billede schwarz84 Nybegynder
16. marts 2006 - 18:02 #4
>Kan vi lave en lille program helt fra grunden?
Ja, det kan vi da. Det jeg smed i min anden kommentar, kan puttes ind i en fil kaldet minKlasse.java, compiles og køres... Så kan du prøve at følge det og se hvad der sker.

>Jeg ved ikke helt, om jeg forstået dit svar.
Hvad er det nøjagtig, du ikke forstår. Så kan jeg uddybe lidt...
Avatar billede nph12 Nybegynder
16. marts 2006 - 18:38 #5
Det her forstår jeg godt:

public class HejVerden{
    public static void main(String[] arg){
        System.out.println("Hej verden");
    }
}

det er stort set her min forståelse stopper. Jeg synes ikke rigtigt at jeg forstår, hvordan jeg opretter variabler, lave metoder, når jeg har lavet main-metoden.

Jeg tror, at den bedste måde jeg lærer det på er, at vi laver et simpel java program. Jeg ved ikke, hvad der er bedst at lave. Har du nogle forslag?
Avatar billede schwarz84 Nybegynder
16. marts 2006 - 19:26 #6
Prøv at se det program jeg postede 17:47:12 (kommentarer fjernet):
public class minKlasse {
  public static void main(String[] args) {
    minKlasse k = new minKlasse();
    System.out.println("Du skrev " + args[0]);
    k.enMetode();
  }

  public enMetode() {
    System.out.println("Du har kaldt enMetode");
  }
}

Her er en ekstra metode, der laves en variabel k og der kaldes en metode på den. Kan du følge hvad der sker der?
Avatar billede schwarz84 Nybegynder
16. marts 2006 - 19:28 #7
Hvilken bog læser du i?
Avatar billede mikkelbm Nybegynder
16. marts 2006 - 21:53 #8
"Jeg har programmeret en del i java"

Harmonerer ikke rigtig med, at du går i stå ved en "Hello world" applikation.

:)
Avatar billede nph12 Nybegynder
17. marts 2006 - 09:31 #9
mikkelbm>> Helt ærligt, hvad skal jeg med din kommentar?
Avatar billede nph12 Nybegynder
17. marts 2006 - 09:33 #10
schwarz84>> Jeg har bøgerne Objects First with Java A Practical Introduction using BlueJ og Objektorienteret programmering i Java.
Avatar billede mikkelbm Nybegynder
17. marts 2006 - 09:33 #11
Det var blot et lille hint til, at det er vigtigt at formulere sine spørgsmål ordentligt - så dem der skal svare ved, hvad de går ind til.
Avatar billede nph12 Nybegynder
17. marts 2006 - 11:08 #12
mikkelbm>> OK:-)

Det jeg ikke forstår er kort og godt, hvordan jeg laver et java program fra bunden. Da strukturen er anderledes end den man bruger i BlueJ, kører jeg lidt rundt i det.

Nu prøver jeg at skrive, hvordan jeg vil mene at strukturen skal se ud, så må I rette mig, hvis det er forkert.

public class Klasse1
{
    //Main-metoden
    public static void main(String[] arg){
       
        //Her opretter jeg variabler
               
        //konstruktører
        public Klasse1(){
            ...   
        }
               
        //Metode
        public void metode(){
            ...
        }
    }
}

Jeg skal vel kalde Klasse1 k1 = new Klasse1(); og k1.metode(); eller hvad? Hvor skal jeg skrive det henne i koden?
Avatar billede mikkelbm Nybegynder
17. marts 2006 - 14:23 #13
Den fejl du begår i dit eksempel er, at du inde i den main-metode har dine andre metoder.

Prøv:

public class Klasse1
{
    //Main-metoden
    public static void main(String[] arg)
    {
      Klasse1 klasse = new Klasse1();
      klasse.metode();
    }

    //Her opretter jeg variabler
               
    //konstruktører
    public Klasse1(){
        ...   
    }
             
    //Metode
    public void metode(){
        ...
    }
}

Jeg forstår ikke helt hvad du mener med at strukturen er anderledes end i BlueJ. Nu kender jeg ikke BlueJ, men javaprogrammer bygges ens op uanset hvad du bruger til det. Du kan skrive dine applikationer i Notepad og compile via kommandoprompt, hvis det er det man vil.
Avatar billede nph12 Nybegynder
17. marts 2006 - 14:57 #14
Jeg kigger lige på det:-)

I BlueJ behøver man bl.a. ikke main-metoden, oprette objekter interaktivt, kalde metoder i dem og se resultatet.

Du kan læse om BlueJ her:
http://javabog.dk/OOP/kapitel1.jsp
http://www.bluej.org/index.html
Avatar billede nph12 Nybegynder
17. marts 2006 - 15:21 #15
Altså noget i denne stil:

public class Klasse1
{
    //Main-metoden
    public static void main(String[] arg)
    {
      Klasse1 klasse = new Klasse1();
      klasse.resultat();
      klasse.metode();
    }

    //Her opretter jeg variabler
    private int x;
    private int y;
    private int resultat;
               
    //konstruktører
    public Klasse1(){
        x = 5;
        y = 8; 
    }
   
    public int resultat(){
        return resultat = x + y;
    }
             
    //Metode
    public void metode(){
        System.out.println(resultat);
    }
}

Skal man kalde alle metoderne i main-metoden?
Avatar billede mikkelbm Nybegynder
17. marts 2006 - 15:25 #16
Nej, ikke nødvendigvis.

Du kan oprette instanser af dine klasser i alle metoder/contructors. Og derigennem kalde metoder på de instanser.

Din main-metode er indgangsvinklen til dit system. Hvad du derefter gør, og hvordan du kalder metoder/opretter instanser osv. - er fuldstændig op til dig. Og der er mange måder at gøre det på, afhængig af hvilket formål det har.
Avatar billede mikkelbm Nybegynder
17. marts 2006 - 15:29 #17
Åndsvagt lille eksempel der gør brug af flere klasser - som bruger hinanden.

public class MainClass
{
  public static void main (String[] args)
  {
      A a = new A();
      int result = a.getSomething ();
      System.out.println (result);
  }
}

public class A
{
  private B b;

  public A ()
  {
    b = new B();
  }

  public int getSomething ()
  {
      return b.giveMeSomething ();
  }
}

public class B
{
  private int something;

  public B ()
  {
      something = 10;
  }

  public int giveMeSomething ()
  {
      return something * 2;
  }
}
Avatar billede nph12 Nybegynder
17. marts 2006 - 15:31 #18
Hvad hvis man selv skal indtaste x og y, hvad skal jeg så?

I BlueJ kan man gøre det samtidig med, at man opretter objektet. Når man har skrevet

public Klasse1(int x, int y){
        this.x = x;
        this.y = y; 
    }

Det er vel ikke nok her, da jeg også skal have inputtet fra tastaturet. Hvordan får jeg inputtet fra tastaturet?
Avatar billede mikkelbm Nybegynder
17. marts 2006 - 15:35 #19
Dette kunne være i din main-metode eller hvilken som helst anden metode:
...
Scanner sc = new Scanner(System.in);
int x = sc.nextInt();
int y = sc.nextInt();

Klasse1 klasse = new Klasse1 (x, y);
......


Bemærk at Scanner-klassen først er med fra Java 1.5 (5.0) - så det er en forudsætning at du har minimum har den version.
Avatar billede nph12 Nybegynder
17. marts 2006 - 15:38 #20
Hvad gør man, hvis man ikke kører Java 1.5? Hvordan læser man så fra tastaturet?
Avatar billede mikkelbm Nybegynder
17. marts 2006 - 15:40 #21
Avatar billede mikkelbm Nybegynder
17. marts 2006 - 15:42 #22
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int x = Integer.parse (br.readLine ());
...
Avatar billede nph12 Nybegynder
17. marts 2006 - 15:44 #23
Jeg kigger lige på det her i weekenden. Jeg synes at det giver mere mening nu, men vender lige tilbage, hvis jeg mangler at få noget på plads.

God weekend:-)
Avatar billede nph12 Nybegynder
23. marts 2006 - 18:18 #24
Jeg har siddet og leget lidt med det. Jeg tror, at jeg ved at få styr på det med input fra tasteturet. Er det sådan man skal lave det?

public class Klasse2
{
    //Main-metoden
    public static void main(String[] arg){
      Klasse2 klasse = new Klasse2();
      klasse.metode();
    }

    //Her opretter jeg variabler
    private int x;
    private IO io;

               
    //konstruktører
    public Klasse2(){
   
    }
   
             
    //Metode
    public void metode(){
        io = new IO();
        String key = io.keyboardInput();
        int x = Integer.parseInt(key);
        System.out.println("Det indtastede tal var: " +x);
    }
}

import java.io.*;


public class IO {


    public String keyboardInput()
    {
      BufferedReader keyboard = new BufferedReader(new InputStreamReader(System.in));

      String key = null;
      try {
            key = keyboard.readLine();
            } catch (IOException ioe) {
                System.out.println("fejl ved indtastning");
                System.exit(1);
            }
        return key;
    }
}
Avatar billede mikkelbm Nybegynder
23. marts 2006 - 18:25 #25
"Er det sådan man skal lave det?"

Ikke nødvendigvis :)

Men det er en af de mange muligheder der er. Og den ser ganske fornuftig ud.
Avatar billede nph12 Nybegynder
23. marts 2006 - 18:54 #26
OK. Man kan lave det mere simpel? Ellers vil jeg bare bruge min IO klasse til mine programmer.
Avatar billede mikkelbm Nybegynder
23. marts 2006 - 21:22 #27
Jeg synes faktisk din IO klasse er en ganske fornuftig løsning på at få uddelegeret ansvaret. Den kan jo udvides med alverdens metoder som kan hjælpe med Input/output. Så jeg synes det er den rigtige løsning!

Og mht. at lave det mere simpelt, så tror jeg det ikke. Det kommer meget an på hvad man skal bruge det til.
Avatar billede nph12 Nybegynder
24. marts 2006 - 20:43 #28
mikkelbm>> Jeg synes, at jeg har fået svar på mine spørgsmål nu. Mange tak for hjælpen:-) Opret et svar, hvis du vil have point.
Avatar billede mikkelbm Nybegynder
24. marts 2006 - 21:08 #29
Kommer her...
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