Avatar billede sito Nybegynder
25. september 2003 - 11:02 Der er 9 kommentarer og
2 løsninger

resultat kan ikke returneres

hej

Forsøger at lave en simpel regnemaskine, der kan plusse og trææke fra, men kan ikke få den til at returnere resulatet.
fejlmeddelelsen: 'Cannot return a value from method whose result type is void'

Min kode:


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

public class SimCalc extends Applet implements ActionListener {
   
   
    private Button plusButton = new Button("plus");
    private Button minusButton = new Button ("minus");
    private Button clearButton = new Button("Slet");
    private IntTextField operand = new IntTextField();
    private IntTextField operand2 = new IntTextField();
    private Label result = new Label(" (ingenting) ", Label.CENTER);

   
    public void init() {
        add(operand);
        add(operand2);
        add(plusButton);
        add(minusButton);
        add(clearButton);
   
       
        plusButton.addActionListener(this);
        minusButton.addActionListener(this);
        clearButton.addActionListener(this);
        setBackground(Color.blue);

    }
   
    public void actionPerformed(ActionEvent e) {
        int number1 = operand.getInt();
        int number2 = operand2.getInt();
        if (number1 == IntTextField.NOT_INT) {
            showStatus("Invalid operand: " + operand.getText());
            return;
        }
        if(number2 == IntTextField.NOT_INT) {
            showStatus("Invalid operand: " + operand.getText());
            return;
        }
        Button button = (Button) e.getSource();
        if (button == plusButton) {
            int answer;
            answer = number1 + number2;
            return answer;
            result.setText(answer);
        }
        else {
          int answer;
          answer = number1 - number2;
          return answer;
          result.setText(answer);
        }
        showStatus("Done");
    }
   
}

Bag ved koden ligger der en IntTextField klasse.

Håber der er nogen der kan gennemskue fejlen...
Avatar billede anhansen Nybegynder
25. september 2003 - 11:04 #1
Du har lavet actionperformed, den har header
public void ...
void betyder den ikke returnerer noget. Hvis den skal returnere et tal skal header være f.eks
public int ...

Men det kan du nok ikke her, da det er en foruddefineret funktion du bruger.
Avatar billede arne_v Ekspert
25. september 2003 - 11:04 #2
public void actionPerformed(ActionEvent e) {
       
og:

return answer;
           
duer ikke sammen !
Avatar billede arne_v Ekspert
25. september 2003 - 11:06 #3
Mit gæt er at du bare skal slette den return, fordi du alligevel displayer
resulatet med:

result.setText(answer);
Avatar billede anhansen Nybegynder
25. september 2003 - 11:06 #4
De steder hvor der står 'return value;' skal væk. Desuden kan en java funktion ikke udføre noget efter du har brugt return, altså er:
      return answer;
            result.setText(answer);
forkert, da result.setText(answer); aldrig kan blive udført. Slet linien med return answer;
så virker det.
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;

public class SimCalc extends Applet implements ActionListener {
   
   
    private Button plusButton = new Button("plus");
    private Button minusButton = new Button ("minus");
    private Button clearButton = new Button("Slet");
    private IntTextField operand = new IntTextField();
    private IntTextField operand2 = new IntTextField();
    private Label result = new Label(" (ingenting) ", Label.CENTER);

   
    public void init() {
        add(operand);
        add(operand2);
        add(plusButton);
        add(minusButton);
        add(clearButton);
   
       
        plusButton.addActionListener(this);
        minusButton.addActionListener(this);
        clearButton.addActionListener(this);
        setBackground(Color.blue);

    }
   
    public void actionPerformed(ActionEvent e) {
        int number1 = operand.getInt();
        int number2 = operand2.getInt();
        if (number1 == IntTextField.NOT_INT) {
            showStatus("Invalid operand: " + operand.getText());
            return;
        }
        if(number2 == IntTextField.NOT_INT) {
            showStatus("Invalid operand: " + operand.getText());
            return;
        }
        Button button = (Button) e.getSource();
        if (button == plusButton) {
            int answer;
            answer = number1 + number2;
            result.setText(answer);
        }
        else {
          int answer;
          answer = number1 - number2;
          result.setText(answer);
        }
        showStatus("Done");
    }
   
}
Avatar billede sito Nybegynder
25. september 2003 - 11:11 #5
Hvis jeg sletter min return får jeg følgende fejlmeddelselse:
setText(java.lang.String)in jawa.awt.Label cannot be applied to (int)

Hvilket vel egentlig er logisk nok, men hvad gør jeg så?
Avatar billede anhansen Nybegynder
25. september 2003 - 11:15 #6
du skal typecaste din int til en string, det er noget med:
result.setText(new Integer(answer).toString());
Avatar billede sito Nybegynder
25. september 2003 - 11:26 #7
Okay, det lader til det virker, men hvordan får jeg så resultet skrevet ud?
Har prøvet med:
            toString(number1 + " Plus " + number2 + " = " + answer);

men det vil den ikke, fejl:
cannot resolve symbol
symbol: method toString (java.lang.string)location: class SimCalc
Avatar billede arne_v Ekspert
25. september 2003 - 11:27 #8
Eller:

result.setText(Integer.toString(answer));

Eller:

result.setText("" + answer);
Avatar billede anhansen Nybegynder
25. september 2003 - 11:31 #9
toString() tager én int som parameter, så du skal skrive:
(Jeg er ikke helt sikker, et stykke tid siden, men mener du kan skrive)
String result = number1 + " Plus " + number2 + " = " + answer;

hvis ikke, så er du nødt til at konvertere hvert tal:
String num1 = new Integer(number1).toString();
String num2 = new Integer(number2).toString();
String answ = new Integer(answer).toString();
String result = num1 + " plus " + num2 + " = " + answ;
Avatar billede sito Nybegynder
25. september 2003 - 11:31 #10
Fremragende, nu virker det.
Brugte showStatus(number1 + "Plus" + number2 + "=" + answer);
I får lov at dele pointene, tak for hjælpen :)
Avatar billede anhansen Nybegynder
25. september 2003 - 11:32 #11
Det var så lidt... ;-)
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