Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[java] incompatible types ???

Pagina: 1
Acties:

  • rohaantje
  • Registratie: April 2010
  • Laatst online: 18-09 22:12
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
import java.util.ArrayList;

/**
 * Een klasse om een willekeurig aantal memo's te beheren.
 * Memo's worden door de menselijke gebruiker zelf genummerd.
 * In deze versie begint de nummering van de memo's bij 0.
 * @author David J. Barnes and Michael Kölling.
 * @version 2001.06.08
 */
public class Notebook
{
    // Opslagruimte voor een willekeurig aantal memo's.
    private ArrayList notes;

    /**
     * Initialiseer alles wat nodig is voor de 
     * organizer.
     */
    public Notebook()
    {
        notes = new ArrayList();
    }

    /**
     * Sla een nieuw memo op in de organizer.
     * 
     * @param note         Het memo dat moet worden opgeslagen.
     */
    public void storeNote(String note)
    {
        notes.add(note);
    }
    
    /**
     * Verwijder een memo.
     * 
     * @param note het memo dat moet worden verwijdert.
     */
    public void deleteNote(int note)
    {
        if(note < 0) {
            // Dit is geen geldig memonummer en dus gebeurt er niets.
            System.out.println("Dit is geen geldig memonummer");
        }
        else if(note < numberOfNotes()) {
            // Dit is een geldig memonummer, dus kan het memo worden weergegeven.
            notes.remove(note);
        }
        else {
            // Dit is geen geldig memonummer en dus gebeurt er niets.
            System.out.println("Dit is geen geldig memonummer");
        }
    }
        
    /**
     * Het huidige aantal memo's
     * 
     * @return   Het huidige opgeslagen aantal memo's in de organizer.
     */
    public int numberOfNotes()
    {
        return notes.size();
    }

    /**
     * Toon alle memo's in de organizer.
     */
    public void listNotes()
    {
        int index = 0;
        while(index < notes.size()) {
            System.out.println(index + " : " + notes.get(index));
            index++;
        }
    }
    
    /**
     * Toon een memo.
     * 
     * @param noteNumber   Het nummer van het weer te geven memo.
     */
    public void showNote(int noteNumber)
    {
        if(noteNumber < 0) {
            // Dit is geen geldig memonummer en dus gebeurt er niets.
            System.out.println("Dit is geen geldig memonummer");
        }
        else if(noteNumber < numberOfNotes()) {
            // Dit is een geldig memonummer, dus kan het memo worden weergegeven.
            System.out.println(notes.get(noteNumber));
        }
        else {
            // Dit is geen geldig memonummer en dus gebeurt er niets.
            System.out.println("Dit is geen geldig memonummer");
        }
    }
    
    /**
     * zoek door de memo's naar de opgegeven String
     * found --> true als string is gevonden
     * laat note zien.
     */
    public void searchNote(String searchString){
        int index = 0;
        boolean found = false;
        String note;
        while(index < notes.size() && !found){
            note = notes.get(index);
            if(note.contains(searchString)){
                found = true;
            }else{
                index++;
            }
        }
        if(found == true){
            System.out.println(notes.get(index));
        }else{
            System.out.println("Note niet gevonden");
        }
    }
}


Hallo,

Ik ben bezig met het leren van java, dus het zou een beginnersfout kunnen zijn.
Maar als ik dit stuk code compileer krijg een een foutmelding over de volgende regel:
note = notes.get(index);
En dan op het gedeelte 'index'
Volgens bleuJ wordt er een String ingevoerd, terwijl er een int wordt verwacht.
Nou als ik terug kijk dan voer ik toch echt een integer in.
Ook als ik index vervang met een willekeurig getal (bv: 1) dan krijg ik dezelfde melding.

Het rare is dat in andere stukken code dit wel gewoon wordt geaccepteerd.
Ik heb er samen met mijn leraar naar gekeken maar hij kon er niet achter komen.( --punten voor mijn school)

zien jullie wat ik fout doe??

groeten Ruben

[ Voor 34% gewijzigd door rohaantje op 06-12-2012 12:23 ]

Gebruik je software voor de volle 100%!!! Daar is het voor bedoeld!


  • Foeijonghaai
  • Registratie: Juli 2001
  • Laatst online: 18-11 09:04
note heeft een type. Welke?
index heeft een type. Welke?
notes.get() heeft twee types. Een voor input en een voor het resultaat. Welke types?

[ Voor 9% gewijzigd door Foeijonghaai op 06-12-2012 12:18 ]


  • Merethil
  • Registratie: December 2008
  • Laatst online: 05:37
Hallo Ruben,

Zet eerst even je code tussen [.code][./code] (zonder puntjes) of liever nog tussen [.code=java][./code] (zonder puntjes).
Dat maakt het een stuk makkelijker om de code te lezen en te kijken wat er mis is.
Foeijonghaai schreef op donderdag 06 december 2012 @ 12:16:
[...]

note heeft een type. Welke?
index heeft een type. Welke?
notes.get() heeft een type. Welke?
Hij initialiseert ze al: String note, int index en ArrayList notes

Edit: Hij initialiseert inderdaad echter geen type voor de ArrayList.... Woeps, ik keek er overheen :P

[ Voor 10% gewijzigd door Merethil op 06-12-2012 12:25 ]


  • EddoH
  • Registratie: Maart 2009
  • Niet online

EddoH

Backpfeifengesicht

ff snel terzijde: Je ArrayList maak je zonder een type te definieren. Volgens mij wordt dat automatisch dan een ArrayList<Object>
Ik neem aan dat je daar een ArrayList van Strings wilt hebben, en niet van Objects.

[ Voor 17% gewijzigd door EddoH op 06-12-2012 12:21 ]


  • Foeijonghaai
  • Registratie: Juli 2001
  • Laatst online: 18-11 09:04
Merethil schreef op donderdag 06 december 2012 @ 12:19:
Hij initialiseert ze al: String note, int index en ArrayList notes
Klopt. Maar ik wil het hem zelf laten uitvogelen.

En het belangrijkste, het type van note.get() staat ergens anders gedefineerd.

[ Voor 25% gewijzigd door Foeijonghaai op 06-12-2012 12:21 ]


  • rohaantje
  • Registratie: April 2010
  • Laatst online: 18-09 22:12
ik wil met mijn notes.get(index) een string uit mijn arraylist halen.
dus index = 0 --> waarde nul uit mijn arraylist --> "hallo"

zo staat het ook voorgekauwd in mijn boek.
note is inderdaad van het type string omdat ik een string terug verwacht uit mijn arraylist
index heeft type int omdat ik aan de hand van een int de string opzoek
notes.get heet als input int en als uitput string

Gebruik je software voor de volle 100%!!! Daar is het voor bedoeld!


  • Standeman
  • Registratie: November 2000
  • Laatst online: 23:44

Standeman

Prutser 1e klasse

notes.get heet als input int en als uitput string
Hier ga je de fout in. Uit note.get(index) komt geen String, daar komt een Object uit, dus dat gaat nooit werken. Je kan het wel casten naar een String door:

code:
1
note = (String) notes.get(index);


Echter is downcasting altijd een beetje tricky, omdat je niet zeker weet of er inderdaad strings in zitten. Dan kan je beter naar generics gaan kijken en je notes arraylist een type mee geven.

code:
1
private ArrayList<String> notes;


Het staat allemaal in de documentatie:

[ Voor 19% gewijzigd door Standeman op 06-12-2012 12:33 ]

The ships hung in the sky in much the same way that bricks don’t.


  • Big Womly
  • Registratie: Oktober 2007
  • Laatst online: 01-09 13:39

Big Womly

Live forever, or die trying

Standeman schreef op donderdag 06 december 2012 @ 12:30:
Uit note.get(index) komt geen String, daar komt een Object uit, dus dat gaat nooit werken. Je kan het wel casten naar een String door

code:
1
note = (String) notes.get(index);


Echter is downcasting altijd een beetje tricky, omdat je niet zeker weet of er inderdaad strings in zitten. Dan kan je beter naar generics gaan kijken en je notes arraylist een type mee geven.
Vermits er toch enkel Strings in notes worden geplaatst, kan hij beter zijn ArrayList aanpassen.
Java:
1
ArrayList<String> nodes = new ArrayList<String>()


Sowieso is het aangeraden om steeds het type te specifieren, zelfs als het Object is

edit:

@Standeman: vlug nog wat bijtypen hé... :P

[ Voor 3% gewijzigd door Big Womly op 06-12-2012 12:34 ]

When you talk to God it's called prayer, but when God talks to you it's called schizophrenia


  • rohaantje
  • Registratie: April 2010
  • Laatst online: 18-09 22:12
@Big Womly Dat was het..
Dank je wel.

De anderen die hebben gereageerd ook bedankt!

Gebruik je software voor de volle 100%!!! Daar is het voor bedoeld!


  • Standeman
  • Registratie: November 2000
  • Laatst online: 23:44

Standeman

Prutser 1e klasse

Wel slecht dat een docent hier niet uitkomt :? :X

The ships hung in the sky in much the same way that bricks don’t.


  • EddoH
  • Registratie: Maart 2009
  • Niet online

EddoH

Backpfeifengesicht

Snap je nu wat er fout was dan?

Daarnaast, die leraar mogen ze van mij direct ontslaan. Als je als docent zulke basic onderwerpen niet beheerst, moet je een andere baan zoeken. Ik vind het bijna schokkend...

  • Merethil
  • Registratie: December 2008
  • Laatst online: 05:37
rohaantje schreef op donderdag 06 december 2012 @ 12:36:
@Big Womly Dat was het..
Dank je wel.

De anderen die hebben gereageerd ook bedankt!
Oftewel wat EddoH zei ;)
Staat dit dan niet in je boek? Bij mij op school werd erop gehamerd dat ArrayList op die manier aangemaakt moest worden omdat ze anders "onvoorspelbaar" worden (en dat heb ik al meermaals gemerkt, zelf).

  • rohaantje
  • Registratie: April 2010
  • Laatst online: 18-09 22:12
Het leuke is dat ik het grootste gedeelte code krijg van de leermethode.
Daarin staat mijn arraylist zo aangegeven.
Zelf moet ik dan kleine losse methodes toevoegen aan de code.
Dus ik betreur zowel het methode boek als de leraar....

[ Voor 10% gewijzigd door rohaantje op 06-12-2012 12:42 ]

Gebruik je software voor de volle 100%!!! Daar is het voor bedoeld!


  • EddoH
  • Registratie: Maart 2009
  • Niet online

EddoH

Backpfeifengesicht

In principe is die type toevoeging alleen maar het aanzetten van een 'compile time check' en is de list intern niet echt een type van Strings, maar het voorkomt wel dit souurt fout, en is natuurlijk ook gewoon zoals je het zou moeten doen.

Die BlueJ foutmelding snap ik echter niet (vandaar in mijn originele post het woordje ' terzijde'). Zal wel een bug in BlueJ zijn dan.

  • EddoH
  • Registratie: Maart 2009
  • Niet online

EddoH

Backpfeifengesicht

rohaantje schreef op donderdag 06 december 2012 @ 12:42:
Het leuke is dat ik het grootste gedeelte code krijg van de leermethode.
Daarin staat mijn arraylist zo aangegeven.
Zelf moet ik dan kleine losse methodes toevoegen aan de code.
Dus ik betreur zowel het methode boek als de leraar....
Merk op dat de code ook zou werken als je het object uit de ArrayList zou casten naar een String.
Dus:

Java:
1
note = (String) notes.get(index);


Wat Standeman zei dus.
Strict gezien is je boek dus niet fout.

  • Hydra
  • Registratie: September 2000
  • Laatst online: 06-10 13:59
Het boek is waarschijnlijk gebaseerd op Java 1.4 en daar bestonden generics nog niet. Maar het is dan gewoon slecht dat ze een boek gebaseerd op een dergelijke oude versie gebruiken.

En daarnaast zou ik overwegen een andere opleiding te volgen als de docenten zo slecht zijn.

https://niels.nu


  • Ozzie
  • Registratie: Februari 2004
  • Laatst online: 20:54
Big Womly schreef op donderdag 06 december 2012 @ 12:33:
[...]


Vermits er toch enkel Strings in notes worden geplaatst, kan hij beter zijn ArrayList aanpassen.
Java:
1
ArrayList<String> nodes = new ArrayList<String>()


Sowieso is het aangeraden om steeds het type te specifieren, zelfs als het Object is

edit:

@Standeman: vlug nog wat bijtypen hé... :P
In Java 7 kan je een ArrayList trouwens als volgt initialiseren:

Java:
1
ArrayList<String> stringList = new ArrayList<>();


We moeten wel een beetje met de tijd mee gaan :)

"Write code as if the next maintainer is a vicious psychopath who knows where you live."

Pagina: 1