Avatar billede jaffafo Nybegynder
25. december 2005 - 04:13 Der er 19 kommentarer og
2 løsninger

Nybegynder i java

Jeg har ca 2-3 timers erfaring med Java så jeg kan ikke så meget endnu ;)

Jeg har siddet og lavet et lille program og det går udmærket hidtil. Men nu er der lige nogle ting jeg bliver nødt til at spørge om hjælp til.

Main.java:
package person;
import java.util.Random;
import java.util.ArrayList;
import java.util.List;

public class Main {
   
    public Main() {
    }

    public static void main(String[] args) {
        /*int i;
        for (i = 0;i == 10; i++) {
            talfinder();
            System.out.println("hej");
        }*/
        talfinder();
    }

    private static void talfinder() {
        // Talfinder (finder tal imellem 1 og 50)
        Random generator = new Random();
        int num1;
        String str = "";
        List lst = new ArrayList();

        // Finder 5 tal mellem 1 og 50 og fyld det på arraylisten
        for (int i = 0; i < 5; i++) {
            num1 = generator.nextInt(50) + 1;

            // tjekker om tallet er større end 25 og skriver det
            if (num1 > 25) {
                str = "Tallet " + num1 + " er større end 25";
            }
            else if (num1 == 25) {
                str = "Tallet er " + num1;
            }
            else if (num1 < 25) {
                str = "Tallet " + num1 + " er mindre end 25";
            }
            //skriver string "str" ud
            System.out.println(str);
            //smider det udtrukne tal "num1" i arraylisten
            lst.add(num1);
        }

        //skriver tal i arraylisten ud
        String indexnr = "";
        for (int i = 0; i < lst.size(); i++) {
            indexnr += String.valueOf(lst.get(i) + ", ");
        }
        System.out.println(indexnr);

        //skriver antal tal i arraylisten ud
        System.out.println("Arraylisten indeholder " + lst.size() + " udtrukne tal.");
    }
}

Problemer:

1. i (indexnr += String.valueOf(lst.get(i) + ", ");)
Jeg vil have det sidste komma og mellemrum (", ") i indexnr slettet da det ikke skal bruges. Jeg går udfra at der findes en function der kan lave det, men har svært ved at finde en.. :/

2. hvad er "package person;" ?
Jeg ved at mit projekt hedder person, men hvad er package?

3. Hvordan kan jeg lave en simpel GUI til mit program hvor jeg kan have en knap, et tekstboks og en "label" (jeg har erfaring i asp.net :p). Er det nemt at lave noget simpelt GUI og skabe forbindelse mellem GUI'et og koden eller jeg bør vente med indtil jeg har mere erfaring?

4. Nogen der kender til nogle gode tutorials hvor man skal løse nogle opgaver i Java? f.eks. små programmer som dette? jeg har set nogle tutorials på nettet men det er kun læsestof med meget få eksempler.

Tak for at du læste hele mit indlæg.. håber du kan smide et godt svar også.. så er du hvertfald sikker på points ;)

Det var vist det indtil videre :)
Avatar billede jaffafo Nybegynder
25. december 2005 - 06:28 #1
Jeg er startet på at lave noget Swing vindue:

        //Laver et Swing "vindue"
        try {
        UIManager.setLookAndFeel(
            UIManager.getCrossPlatformLookAndFeelClassName());
        } catch (Exception e) { }

        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                //Laver vinduet
                JFrame frame = new JFrame("Talfinder");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                //Laver og fylder labels.
                String streng = "Arraylisten indeholder " + lst.size() + " udtrukne tal.";
                JLabel antaltal = new JLabel(streng);
                String streng2 = "test";
                JLabel tal = new JLabel(streng2);
               
                //Tilføjer labels
                frame.getContentPane().add(antaltal);
                frame.getContentPane().add(tal);

                //Viser vinduet.
                frame.pack();
                frame.setVisible(true);
            }
        });


Jeg får nu vist noget tekst i vinduet, men kun en del. Der er 2 labels med tekst på, men kun den sidste bliver vist. Som om den første label bliver overskrevet af den næste. Hvordan kan man undgå det?

Og hvordan kan jeg sætte størrelsen på vinduet og bestemme placering af label/knap/tekstboks?

mvh :)
Avatar billede kalp Novice
25. december 2005 - 13:23 #2
Jeg ser på dine spørgsmål.. til nr. 1 løses det sådan her


String indexnr = "";
        for (int i = 0; i < lst.size(); i++) {
            indexnr += String.valueOf(lst.get(i));
            if(i + 1 < lst.size())
            indexnr += ", ";
        }
        System.out.println(indexnr);

  }
Avatar billede kalp Novice
25. december 2005 - 13:24 #3
til nr. 2 så læs lidt om hvad pakker er..
http://javabog.dk/OOP/kapitel6.jsp
Avatar billede kalp Novice
25. december 2005 - 13:26 #4
Jeg programmere GUI i JDeveloper.. kan hentes gratis fra www.oracle.com

Det er drag & drop GUI programmering
Avatar billede kalp Novice
25. december 2005 - 13:26 #5
Der ligger ligeledes opgaver til hvert kapitel på www.javabog.dk
Avatar billede arne_v Ekspert
25. december 2005 - 15:12 #6
String.valueOf er overflødig

        String indexnr = "";
        for (int i = 0; i < lst.size(); i++) {
            if(i > 0) indexnr += ",";
            indexnr += lst.get(i);
        }

evt. kunne man bruge StringBuffer/StringBuilder
Avatar billede arne_v Ekspert
25. december 2005 - 15:16 #7
jeg har skrevet lidt om hvordan man kommer igang med Java her:
  http://www.eksperten.dk/artikler/717
Avatar billede arne_v Ekspert
25. december 2005 - 15:17 #8
java package svarer til .NET/C#/VB.NET namespace

(og i modsætning til hvad javabog.dk siger så svarer det også til namespace i C++
og ikke til "klasse bibliotek")
Avatar billede jaffafo Nybegynder
25. december 2005 - 15:28 #9
arne_v: Den artikel har jeg allerede læst :)  udmærket læsestof må jeg sige.. gjorde det lidt lettere at komme igang.


Jeg har forstået hvad en package er, men det jeg er mere i tvivl om er hvad "package person;" er i dette tilfælde.
Avatar billede arne_v Ekspert
25. december 2005 - 15:30 #10
det er den package (namespace) som du har valgt at ligge din klasse Main i
Avatar billede arne_v Ekspert
25. december 2005 - 15:33 #11
package xxxx;

...

i Java svarer til:

namespace xxxx
{
  ...
}

i C# og

Namespace xxxx
    ...
End Namespace

i VB.NET

(ja - i Java kan der kun være kode i en package per fil)
Avatar billede arne_v Ekspert
25. december 2005 - 15:39 #12
en GUI'ficering:

package december;

import java.awt.BorderLayout;
import java.util.Random;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JFrame;
import javax.swing.JLabel;

public class Main extends JFrame {
 
    public Main() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        getContentPane().setLayout(new BorderLayout());
        List lst = talfinder();
        String streng = "Arraylisten indeholder " + lst.size() + " udtrukne tal.";
        JLabel antaltal = new JLabel(streng);
        String streng2 = talstreng(lst);
        JLabel tal = new JLabel(streng2);
        getContentPane().add(antaltal, BorderLayout.NORTH);
        getContentPane().add(tal, BorderLayout.SOUTH);
        pack();
    }

    public static void main(String[] args) {
        Main f = new Main();
        f.setVisible(true);
    }

    private static List talfinder() {
        // Talfinder (finder tal imellem 1 og 50)
        Random generator = new Random();
        List lst = new ArrayList();

        // Finder 5 tal mellem 1 og 50 og fyld det på arraylisten
        for (int i = 0; i < 5; i++) {
          int num1 = generator.nextInt(50) + 1;

          //smider det udtrukne tal "num1" i arraylisten
            lst.add(num1);
        }
        return lst;
    }
    private static String talstreng(List lst) {
        //skriver tal i arraylisten ud
        String indexnr = "";
        for (int i = 0; i < lst.size(); i++) {
            if(i > 0) indexnr += ",";
            indexnr += lst.get(i);
        }
        return indexnr;
    }
}
Avatar billede arne_v Ekspert
25. december 2005 - 15:42 #13
bemærk at Swing er lidt anderledes end en del andre GUI frameworks

vindues størrelse og koordinater for widgets/kontroller er fy ord

i stedetfor binder man widgets/kontroller til en logisk placering i vinduet

i mit eksempel binde jeg de 2 labels til henholdsvis at være klistret til
toppen og bunden af vinduet

ideen er bl.a. at applikationen se fornuftig ud når man trækker rundt i vinduet
(ændre størrelse og forhold mellem højde og bredde)

men man skal vende sig lidt til tanke gangen, fordi den er lidt anderledes
Avatar billede jaffafo Nybegynder
25. december 2005 - 16:11 #14
er der andre måder at lave GUI på som måske er lidt bedre?

Og kan man ikke sætte 2 betingelser i en IF sætning? f.eks.:
if (tal er større end 20, men mindre enn 35)
Avatar billede arne_v Ekspert
25. december 2005 - 16:12 #15
I Java kan du vælge mellem Swing, AWT og SWT - men jeg synes at du skal holde fast i
Swing - du skal bare lære at bruge de layout managere (der er andre end BorderLayout)
Avatar billede arne_v Ekspert
25. december 2005 - 16:13 #16
på det område ligner Java helt C#:

if(tal > 20 && tal < 35) {
Avatar billede jaffafo Nybegynder
25. december 2005 - 16:20 #17
Jeg takker mange gange :)

Arne_v og kalp smider i lige et svar? Så deler jeg bare pointsene.
Avatar billede arne_v Ekspert
25. december 2005 - 16:20 #18
.
Avatar billede jakoba Nybegynder
27. december 2005 - 10:31 #19
String indexnr = "";

  Boo, hiss. et nummer er en numerisk værdi (fx 42), en streng er en sekvens af bogstaver, cifre og tegn (fx "42"). Det er 2 helt forskellige ting, og en god måde at skyde sig selv i foden er at bruge navne som 'indexnr' om en streng eller 'indenxstreng' om et nummer.
Avatar billede arne_v Ekspert
27. december 2005 - 12:52 #20
tja - det har du jo helt ret i
Avatar billede jaffafo Nybegynder
27. december 2005 - 17:21 #21
jakoba:

Det er helt rigtigt. Det er fordi at indexnr oprindeligt var et int, som jeg så lavede om til en streng. Kom bare aldrig så langt som at ændre navnet også. :)
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