Gå til innhold

Anbefalte innlegg

import java.awt.*;
import java.awt.event.*;
import java.applet.Applet;
import java.util.*;

public class a extends Applet implements ActionListener {

 private Button lengsteOrd;
 private Button antallBokstaver;
 private TextArea tekst;
 private TextField melding;
 private Class C;

 public void init() {
   // Lager GUI-komponenter
   Panel topp = new Panel();
   lengsteOrd = new Button("Lengste ord");
   antallBokstaver = new Button("Antall bokstaver");
   tekst = new TextArea(40, 60);
   melding = new TextField(60);
   C = new Class();

   // Tilordner layout-håndterere
   setLayout(new BorderLayout());
   topp.setLayout(new FlowLayout());

   // Legger komponenter inn i paneler
   topp.add(lengsteOrd);
   topp.add(antallBokstaver);
   add("North", topp);
   add("Center", tekst);
   add("South", melding);

   // Lytter på komponentene
   lengsteOrd.addActionListener(this);
   antallBokstaver.addActionListener(this);

   // Meldingsfelt skal ikke kunne redigeres
   melding.setEditable(false);
 }

 // Håndter hendelser (her knappetrykk)
 public void actionPerformed(ActionEvent e) {
   if (e.getSource() == lengsteOrd)
     melding.setText("Lengste ord: " +
       Class.lengsteOrd(tekst.getText()));             // FEIL
   else if (e.getSource() == antallBokstaver)
     melding.setText("Antall bokstaver: " +
       Class.antallBokstaver(tekst.getText()));           // FEIL
 }
}

class Class
{
 private int antallBokstaver(String t) {
 int antall = 0;
 // Gjennomløper teksten tegn for tegn
 for (int pos=0; pos<t.length(); pos++) {
   // Teller opp hvis tegn i posisjon pos er en bokstav
   if (Character.isLetter(t.charAt(pos)))
     antall++;
 }
 return antall;
 }

 private int lengsteOrd(String t) {
 int maksLengde = -1;
 // Bruker blank, punktum og linjeskift som skilletegn.
 StringTokenizer orddeler =
   new StringTokenizer(t, " .\n");
 String ord;
 while (orddeler.hasMoreTokens()) {
   ord = orddeler.nextToken();
   // Er dette ordet lengre enn lengst så langt?
   if (ord.length() > maksLengde)
     maksLengde = ord.length();
 }
 return maksLengde;
 }
}

 

Feilmeldinger:

Error(46,15): method lengsteOrd(java.lang.String) has private access in class Class.

Error(49,15): method antallBokstaver(java.lang.String) has private access in class Class

 

Jeg er forholdsvis nybegynner i java, så jeg skjønner ikke hva jeg gjør galt her nå.

Lenke til kommentar
Videoannonse
Annonse

For at noen skal få bruke en funksjon som er definert utenfor klassen må den være definert som public eller protected. Om den er protected kan alle som arver fra funksjonen eller er i samme pakke få utført funksjonen.

 

Så det du må gjøre er å endre

private int antallBokstaver(String t) og

private int lengsteOrd(String t)

 

til

 

public int antallBokstaver(String t) og

public int lengsteOrd(String t)

 

så skal det fungere

 

Coq Rouge

Lenke til kommentar

Ok, skrev public istedetfor private, men fikk to nye feilmeldinger:

 

Error(46,15): non-static method lengsteOrd(java.lang.String) cannot be referenced from a static context

 

Error(49,15): non-static method antallBokstaver(java.lang.String) cannot be referenced from a static context

 

Hva nå?

Lenke til kommentar

Error(46,15): non-static method lengsteOrd(java.lang.String) cannot be referenced from a static context

 

Error(49,15): non-static method antallBokstaver(java.lang.String) cannot be referenced from a static context

 

Når du skriver Class.lengsteOrd(...) forsøker du å benytte en generell metode: En metode som ikke er spesiell for en instans av klassen din, men 'felles' for alle instanser. Du har to mulige løsninger foran deg.

 

A: Gjøre om metodene til 'felles' metoder ved å putte 'static' i metodedeklarasjonen. F.eks.:

private static int lengsteOrd(String t) ....

 

B: Lage en instans av klassen Class, og kalle metoden til denne instansen. Siden du allerede har lagd en instans ('C') kan du skrive:

C.lengsteOrd(java.lang.String);

 

Jeg ville benyttet B frem til jeg kunne java så godt at jeg kunne forsvare å benytte metode A.

 

lykke til

CPL

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...