Avatar billede itckongen Nybegynder
22. november 2002 - 13:25 Der er 13 kommentarer og
1 løsning

Java ArrayList.

Hej Eksperter

Jeg har et lille problem.
Jeg har lavet en notebog, men ArrayList starter automatisk ved numrene 0 og opefter.
Nu vil jeg have den til at starte ved 1 og opefter.
Så når den printer noterne ud står der

1: bla
2: bla

istedet for

0: bla
1: bla

Jeg ved ik helt hvilken del er koden i skal bruge så i får sq det hele :)

import java.util.ArrayList;


public class Notebook
{
    // gemmer en arbitrary nummer af noter.
    private ArrayList notes;

   

    public Notebook()
    {
        notes = new ArrayList();
    }

   
// gemmer en ny note i notebogen
    public void storeNote(String note)
    {
        notes.add(note);
    }

 
// returnere nummerne af noterne i notebogen
    public int numberOfNotes()
    {
        return notes.size();
    }

// print efter ønske et nummer ud
        public void showNote(int noteNumber)
    {
        if(noteNumber < 1) {
            System.out.println("The number was less than zero and is not valid please try again");
        }
        else if(noteNumber < numberOfNotes()) {
            // Nummeret er gyldigt, så print det
            System.out.println(notes.get(noteNumber));
        }
        else {
            if(noteNumber > numberOfNotes()) {
            System.out.println("The number does not excist please try again");
            }
        }
    }
     
   
    public void listNotes()
    {
    int shownumber = 1;
    int index = 1;
    while(index < numberOfNotes()) {
    System.out.println("" + shownumber + ": " + notes.get(index));
    index++;
    shownumber++;
    }
  }
   
    public void removeNote(int noteNumber)
    {
    if(noteNumber < 1) {
        // gør ingenting da nummeret ikke er gyldigt
    }
    if(noteNumber < 1) {
    System.out.println("The number was less than zero and is not valid please try again");
    }
    else if(noteNumber > numberOfNotes()) {
    System.out.println("The number does not excist please try again");
    }
    else if(noteNumber < numberOfNotes())  {
    notes.remove(noteNumber); 
    System.out.println("Note " + noteNumber + " has been removed"); 
    }
    else  {
    // Gør ingenting
   
    }
  }
   
}


/Kongen
Avatar billede itckongen Nybegynder
22. november 2002 - 13:25 #1
Hov jeg skal lige sige at den printer noterne ud
1: bla
2: bla

men den sletter automatisk den første besked
Avatar billede arne_v Ekspert
22. november 2002 - 13:27 #2
Er det ikke bare at bruge notes.get(noteNumber-1) ?

Så kan du bruge 1..N og Java kan bruge 0..N-1 !
Avatar billede arne_v Ekspert
22. november 2002 - 13:28 #3
Og notes.remove(noteNumber-1)
Avatar billede itckongen Nybegynder
22. november 2002 - 13:37 #4
Jeg kan ik lige få det til at virke...
Avatar billede arne_v Ekspert
22. november 2002 - 14:00 #5
Du retter i din show og remove, så du trækker en fra.
Avatar billede itckongen Nybegynder
22. november 2002 - 16:34 #6
arne_v >> hvor vil du have jeg skal sætte minus 1 ind henne?
Jeg kan ikke sætte det ind inumber og remove uden at få en fejl

kan man ik sige.
public void removeNote(int noteNumber-1)

eller skal man deklarere den som en lokal variabel?
Det kan jeg dog heller ik få til at virke :)
Avatar billede arne_v Ekspert
22. november 2002 - 17:01 #7
public void removeNote(int noteNumber) {
if(noteNumber < 1) {
    System.out.println("The number was less than one and is not valid please try again");
    }
    else if(noteNumber > numberOfNotes()) {
    System.out.println("The number does not excist please try again");
    }
    else  {
    notes.remove(noteNumber - 1); 
    System.out.println("Note " + noteNumber + " has been removed"); 
    }
  }
Avatar billede arne_v Ekspert
22. november 2002 - 17:03 #8
Den vil tillade dig at removeNote'e 1..N i.s.f.
normalt 0..N-1.

PS: Jeg tror at det vil forvirre mange Java programmører,
    at du nummerer fra 1.
Avatar billede itckongen Nybegynder
22. november 2002 - 18:05 #9
Ja jeg ved godt at mange Java programmører synes det er mærkeligt :)
Men almindelige mennesker der ikke kender noget til Java vil synes det modsatte.
Og det er de almindelige mennesker der skal bruge notebogen :)
Jeg tjekker lige om jeg kan få det til at virke nu, så skal du nok få dine point ;)
Avatar billede arne_v Ekspert
22. november 2002 - 18:47 #10
Det er rigtigt nok.

Men jeg tror, at jeg ville flytte "-1" ud i bruger-grænsefladen
i.s.f. i data objektet.
Avatar billede itckongen Nybegynder
22. november 2002 - 20:29 #11
Den viser stadig ikke den første note.

hvis jeg gemmer noterne
1: Ting
2: Sager

viser den kun
1: Sager

hvorfor det?
Avatar billede arne_v Ekspert
23. november 2002 - 11:38 #12
Når du tæller 1..N skal du også rette list fra < til <= :

public void listNotes()
    {
    int shownumber = 1;
    int index = 1;
    while(index <= numberOfNotes()) {
    System.out.println("" + shownumber + ": " + notes.get(index));
    index++;
    shownumber++;
    }
  }

Kan du iøvrigt ikke spare enten index eller shownumber ?
Avatar billede arne_v Ekspert
23. november 2002 - 12:06 #13
Vrøvl - der skal naturligvis også trækkes 1 fra, altså:

public void listNotes()
    {
    int shownumber = 1;
    int index = 1;
    while(index <= numberOfNotes()) {
    System.out.println("" + shownumber + ": " + notes.get(index-1));
    index++;
    shownumber++;
    }
  }

Eller:

public void listNotes()
    {
    int shownumber = 1;
    int index = 0;
    while(index < numberOfNotes()) {
    System.out.println("" + shownumber + ": " + notes.get(index));
    index++;
    shownumber++;
    }
  }

Eller:

public void listNotes()
    {
    int index = 0;
    while(index < numberOfNotes()) {
    System.out.println((index+1) + ": " + notes.get(index));
    index++;
    }
  }
Avatar billede itckongen Nybegynder
23. november 2002 - 16:01 #14
Arh ok nu virker det.... Tak jeg har jo siddet og bøvlet med det et stykke tid :)
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