OyvindN Skrevet 22. mars 2004 Del Skrevet 22. mars 2004 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
Coq Rouge Skrevet 22. mars 2004 Del Skrevet 22. mars 2004 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
OyvindN Skrevet 22. mars 2004 Forfatter Del Skrevet 22. mars 2004 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
Hårek Skrevet 22. mars 2004 Del Skrevet 22. mars 2004 Skjønner ikke helt denne: Class.lengsteOrd(tekst.getText()) Det "normale" er vel å bruke tekst.getText() Lenke til kommentar
threiran Skrevet 22. mars 2004 Del Skrevet 22. mars 2004 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
OyvindN Skrevet 23. mars 2004 Forfatter Del Skrevet 23. mars 2004 Det funket ja, takker Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå