/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
Placering af variabel
Fra : Filip Skjerning


Dato : 27-11-03 16:30

Hej.
Jeg er rimelig ny inden for programmering. Jeg har et problem med en
java-klasse, jeg er ved at redigere i.
Jeg er i gang med at tilføje variablen urls, så den kan bruges både fra
metoden exists og readHtmlList - dvs. der skal skrives til den fra
readHtmlList og dernæst skal resultatet kunne aflæses i exists.
Hvor/hvordan skal variablen urls placeres og tilgås for at løse dette?
Jeg sender mit midlertidige forsøg med herunder:

class Searcher {

static StringBuffer urls;

public static String exists(HTMLlist l, String word) {
while(l != null) {
if (l.str.equals(word))
return word + urls.toString();
l = l.next;
}
return "word NOT found";
}

public static HTMLlist readHtmlList(String filename) throws IOException
{
String name;
HTMLlist start,current,tmp;


BufferedReader infile = new BufferedReader(new
FileReader(filename)); // gør klar til at læse fra filen i filename

name=infile.readLine(); // Læs første linje fra filen
start=new HTMLlist(name,null);
current=start;
while(true) {
if (current.toString().length() > 5) {
if (current.toString().substring(0,6).equals("*PAGE:")) {
urls.append(current);
}
}
name = infile.readLine(); // Læs næste linje fra file
if(name==null) break; // Gå ud af løkken hvis der ikke er
flere
tmp=new HTMLlist(name,null);
current.next=tmp;
current=tmp;
}
infile.close(); // Angiv at vi ikke længere læser fra filen

return start;
};
}

--
Venlig hilsen

Filip


 
 
Peter Lind (27-11-2003)
Kommentar
Fra : Peter Lind


Dato : 27-11-03 18:22

Filip Skjerning wrote:
> Hej.
> Jeg er rimelig ny inden for programmering. Jeg har et problem med en
> java-klasse, jeg er ved at redigere i.
> Jeg er i gang med at tilføje variablen urls, så den kan bruges både
> fra metoden exists og readHtmlList [ ... ]

Jeg har snippet din kode væk - men godt at du sendte den med!
Problemet er at du bruger static metoder. Det er noget halv-avanceret kode
du er i gang med, så jeg er ikke helt klar over om du kender til static
eller ej - immervæk, her kommer en forklaring:
En static metode eller variabel kan kaldes direkte via klassen, uden at man
har en instans af den (et objekt) og metoden/variablen er fælles for alle
objekter af den pågældende klasse.
Normalt vil man oprette et objekt, f.eks i denne stil:

....
Searcher mySearcher = new Searcher();
HTMLlist list = mySearcher.readHtmlList( filename );
if( mySearcher.exists( list, "word" ) )
{
// gør et eller andet...
}
....

Men når man har static variable, kan man tilgå dem direkte (uden at oprette
et objekt), således:

....
HTMLlist list = Searcher.readHtmlList( filename );
if( Searcher.exists( list, "word" ) )
{
// gør et eller andet
}
...

Normalt har man kun ultra-generelle metoder og konstanter liggende i
static-metoder. F.eks en metode til at omregne integers til tekststrenge
eller sådan noget.

Jeg vil anbefale at du ikke bruger static i din klasse overhovedet, og at du
også gemmer din HTMLlist variabel i din Searcherklasse, så den klasse der
kalder searcheren ikke er nødt til at sende variablen med hver gang - det er
langt mere objektorienteret på den måde, at alle data ligger i den klasse
der har brug for dem.

Hvis du er i tvivl om hvad jeg mener, så skriv endelig igen.

--
Mvh
Peter Lind



Jesper Matthiesen (27-11-2003)
Kommentar
Fra : Jesper Matthiesen


Dato : 27-11-03 18:52


"Peter Lind" <peterlind@hotmail.com> wrote in message
news:bq5bvp$2q1j$1@news.cybercity.dk...
> Filip Skjerning wrote:
> > Hej.
> > Jeg er rimelig ny inden for programmering. Jeg har et problem med en
> > java-klasse, jeg er ved at redigere i.
> > Jeg er i gang med at tilføje variablen urls, så den kan bruges både
> > fra metoden exists og readHtmlList [ ... ]
>
> Jeg har snippet din kode væk - men godt at du sendte den med!
> Problemet er at du bruger static metoder.

Enig. Static-metoder skal være uafhængige af objektets tilstand, men hvis
der bruges en klassevariabel så er returværdien afhængig af hvad der ligger
i variablen på det givne tidspunkt.
Upassende static-metoder ses ofte hos begyndere der ikke har fået med at
hvis man ikke laver en instans og kalder sin non-static metode på instansen
så brokker compileren sig. Det næste der så sker er at man sætter alle
metoder til at være static så det 'virker'.
Mvh Jesper



Kristian Thy (27-11-2003)
Kommentar
Fra : Kristian Thy


Dato : 27-11-03 21:48

Jesper Matthiesen uttered:
>> Jeg har snippet din kode væk - men godt at du sendte den med!
>> Problemet er at du bruger static metoder.
>
> Enig. Static-metoder skal være uafhængige af objektets tilstand, men hvis
> der bruges en klassevariabel så er returværdien afhængig af hvad der ligger
> i variablen på det givne tidspunkt.

Filips problem er så at den del af koden så vidt jeg husker er en given
del af opgaven og kan ikke modificeres :)

\\kristian
--
Unix is user friendly...It's just selective about who its friends are.

Filip Skjerning (27-11-2003)
Kommentar
Fra : Filip Skjerning


Dato : 27-11-03 22:37

Kristian Thy wrote:
> Jesper Matthiesen uttered:
>>> Jeg har snippet din kode væk - men godt at du sendte den med!
>>> Problemet er at du bruger static metoder.
>>
>> Enig. Static-metoder skal være uafhængige af objektets tilstand, men
>> hvis der bruges en klassevariabel så er returværdien afhængig af
>> hvad der ligger i variablen på det givne tidspunkt.
>
> Filips problem er så at den del af koden så vidt jeg husker er en
> given del af opgaven og kan ikke modificeres :)

Nemlig
Jeg kan vist ikke tillade mig at lave så meget om i det. Men tak for de
meget pædagogiske forklaringer. Jeg forstår stadig mere og mere af,
hvordan det hele fungerer...

- Filip


Filip Skjerning (27-11-2003)
Kommentar
Fra : Filip Skjerning


Dato : 27-11-03 22:37

Jesper Matthiesen wrote:
>
> Enig. Static-metoder skal være uafhængige af objektets tilstand, men
> hvis der bruges en klassevariabel så er returværdien afhængig af hvad
> der ligger i variablen på det givne tidspunkt.
> Upassende static-metoder ses ofte hos begyndere der ikke har fået med
> at hvis man ikke laver en instans og kalder sin non-static metode på
> instansen så brokker compileren sig. Det næste der så sker er at man
> sætter alle metoder til at være static så det 'virker'.

Ja, det kan jeg godt følge...
I mit tilfælde VAR alle metoderne i forvejen sat til static. Men jeg var
nødt til at gøre variablen (urls) static for at kunne benytte den.

Det, jeg er interesseret i er, at min readHtmlList-metode skal lægge de
URL's, den læser i Stringbufferen urls og at jeg så til sidst skal kunne
læse de fundne URL's i min exists-metode. Er det jeg har forsøgt mig med
et skridt ad den rigtige eller forkerte vej? Det kompilerer fint men
giver en NullPointerException når exists finder et match.

Her kommer koden lige igen for en ordens skyld:


class Searcher {

static StringBuffer urls;

public static String exists(HTMLlist l, String word) {
while(l != null) {
if (l.str.equals(word))
return word + urls.toString();
l = l.next;
}
return "word NOT found";
}

public static HTMLlist readHtmlList(String filename) throws IOException
{
String name;
HTMLlist start,current,tmp;


BufferedReader infile = new BufferedReader(new
FileReader(filename)); // gør klar til at læse fra filen i filename

name=infile.readLine(); // Læs første linje fra filen
start=new HTMLlist(name,null);
current=start;
while(true) {
if (current.toString().length() > 5) {
if (current.toString().substring(0,6).equals("*PAGE:")) {
urls.append(current);
}
}
name = infile.readLine(); // Læs næste linje fra file
if(name==null) break; // Gå ud af løkken hvis der ikke er
flere
tmp=new HTMLlist(name,null);
current.next=tmp;
current=tmp;
}
infile.close(); // Angiv at vi ikke længere læser fra filen

return start;
};
}


Vh. Filip


Jesper Matthiesen (28-11-2003)
Kommentar
Fra : Jesper Matthiesen


Dato : 28-11-03 09:05


"> Det, jeg er interesseret i er, at min readHtmlList-metode skal lægge de
> URL's, den læser i Stringbufferen urls og at jeg så til sidst skal kunne
> læse de fundne URL's i min exists-metode. Er det jeg har forsøgt mig med
> et skridt ad den rigtige eller forkerte vej? Det kompilerer fint men
> giver en NullPointerException når exists finder et match.

Tænk på hvad static betyder. Uanset antallet af instanser, findes der netop
én som er fælles for alle. Hvis f.eks. du skulle tælle det globale antal af
instanser af et givent objekt kune du lave en static tællervariabel,
instanceCount, og i din constructor kunne du tælle den én op hver gang men
stringbufferen skal jo være afhængig af hvad der læses ind fra filen. Jeg
tror jeg ville lægge den i klassen HTMLlist og så
sige

l.urls.toString();

i exists-metoden.

Mvh Jesper



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408918
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste