Rechner

Conax

Mitglied
Eclipse zeigt mir 4 Fehler an ich habe aber keine Ahnung wie ich das fixe.


Java:
import java.io.*;

public class rechner
{
 public static void main(String[] args) throws IOException
 {
  boolean abbruch = false;
  System.out.println("**************************");
  System.out.println("******Taschenrechner******");
  System.out.println("**************************");
  System.out.println("*Rechenopperationen:     *");
  System.out.println("*(1)addieren             *");
  System.out.println("*(2)subtrahieren         *");
  System.out.println("*(3)multiplizieren       *");
  System.out.println("*(4)dividieren           *");
  System.out.println("*Programm beenden:       *");
  System.out.println("*(5)beenden              *");
  System.out.println("**************************");

  BufferedReader stdin = new BufferedReader(new InputStreamReader( System.in ));


   public static String variableeins() 
   {
    System.out.println("Bitte geben Sie die erste Zahl ein");
    double variable;
    String eingabe = stdin.readLine();
    variable = Integer.parseInt(eingabe);
   }

   public static String variablezwei()
   {
    System.out.println("Bitte geben Sie die zweite Zahl ein");
    double variable1;
    String eingabe1 = stdin.readLine();
    variable1 = Integer.parseInt(eingabe1);
   }
   
   public static String variabledrei()
   {
    System.out.println("Bitte Rechenoperation eingeben/Programm beenden");
    double variable2;
    String eingabe2 = stdin.readLine();
    variable2 = Integer.parseInt(eingabe2);
   }

   public static void abfrage()
   {
    if (variable2== 1)
    {
     System.out.println("Das Ergebnis ist: "+(variable+variable1));
    }
    else if (variable2== 2)
    {
     System.out.println("Das Ergebnis ist: "+(variable-variable1));
    }
    else if (variable2== 3)
    {
     System.out.println("Das Ergebnis ist: "+(variable*variable1));
    }
    else if (variable2== 4)
    {
     System.out.println("Das Ergebnis ist: "+(variable/variable1));
    }
    else if (variable2== 5)
    {
     System.out.println("Auf Wiedersehen!");
     boolean beenden = true;
    }
    else
    {
     System.out.println("Fehler bitte Programm neu starten!");
    }
   }
    
    for(boolean beenden=false; beenden == true; beenden++)
    {
     variableeins();
     variablezwei();
     variabledrei();
     variableabfrage();
    }
 }
}
 
Zuletzt bearbeitet von einem Moderator:
Michael... hat es schon gesagt. Du kannst keine Methode in Methoden definieren. Du kannst in einer Klasse Methoden definieren. In Methoden kannst du nur SCHON definierte Methoden aufrufen!
 
ah ok solangsam beginne ich das ganze zu verstehen.

Ich habe das jetzt mal etwas angepasst das Problem ist jetzt hänge ich an anderen Stellen:

Code:
import java.io.*;

public class rechner
{
 public static void main(String[] args) throws IOException
 {
  System.out.println("**************************");
  System.out.println("******Taschenrechner******");
  System.out.println("**************************");
  System.out.println("*Rechenopperationen:     *");
  System.out.println("*(1)addieren             *");
  System.out.println("*(2)subtrahieren         *");
  System.out.println("*(3)multiplizieren       *");
  System.out.println("*(4)dividieren           *");
  System.out.println("*Programm beenden:       *");
  System.out.println("*(5)beenden              *");
  System.out.println("**************************");

  for(boolean beenden=false; beenden == true; beenden++)
  {
   variableeins();
   variablezwei();
   variabledrei();
   variableabfrage();
  }
 }

   public static String variableeins() throws IOException
   {
    System.out.println("Bitte geben Sie die erste Zahl ein");
    double variable;
    BufferedReader stdin = new BufferedReader(new InputStreamReader( System.in ));
    String eingabe = stdin.readLine();
    variable = Integer.parseInt(eingabe);
   }

   public static String variablezwei() throws IOException
   {
    System.out.println("Bitte geben Sie die zweite Zahl ein");
    double variable1;
    BufferedReader stdin = new BufferedReader(new InputStreamReader( System.in ));
    String eingabe1 = stdin.readLine();
    variable1 = Integer.parseInt(eingabe1);
   }
   
   public static String variabledrei() throws IOException
   {
    System.out.println("Bitte Rechenoperation eingeben/Programm beenden");
    double variable2;
    BufferedReader stdin = new BufferedReader(new InputStreamReader( System.in ));
    String eingabe2 = stdin.readLine();
    variable2 = Integer.parseInt(eingabe2);
   }

   public static void abfrage()
   {
    if (variable2== 1)
    {
     System.out.println("Das Ergebnis ist: "+(variable+variable1));
    }
    else if (variable2== 2)
    {
     System.out.println("Das Ergebnis ist: "+(variable-variable1));
    }
    else if (variable2== 3)
    {
     System.out.println("Das Ergebnis ist: "+(variable*variable1));
    }
    else if (variable2== 4)
    {
     System.out.println("Das Ergebnis ist: "+(variable/variable1));
    }
    else if (variable2== 5)
    {
     System.out.println("Auf Wiedersehen!");
     boolean beenden = true;
    }
    else
    {
     System.out.println("Fehler bitte Programm neu starten!");
    }
   }
}
 
Ich habe das jetzt mal etwas angepasst das Problem ist jetzt hänge ich an anderen Stellen:
Wenn ich raten müsste...
...in der letzten Methode sind die Variablen variableX nicht bekannt.
Da diese nur in den jeweils abfragenden Methoden deklariert werden, gelten sie auch nur dort.

Warum überhaupt die Auslagerung in Methoden? Warum nicht alles in die main?
 
1! : verwende mal bitte JAVA-Tags *ist der dezente rote hinweis echt so schwer zu verstehen ?*

2 :
Java:
for(boolean beenden=false; beenden == true; beenden++)

du hast scheinbar KEINE ahnung was du da tust oder ?

ein FOR-loop hat 3 parameter

1: init > wird EINMAL beim ERSTEN aufruf von FOR() aufgerufen ... in der regel zum initialisieren von zählern oder der gleichen
2: loop-condition : wird bei JEDEM durchlauf geprüft ... nur wenn dieser ausdruck TRUE ist wird der loop ein weiteres mal ausgeführt ... wenn FALSE wird die schleife abgebrochen

ergo : der zweite parameter MUSS ein BOOLEAN sein !

3: loop-step : wird bei JEDEM durchlauf ausgeführt ... normalerweise wird hier ein zähler getaktet oder eine andere anweisung welches jedesmal ausgeführt werden muss ... sollte auch irgendwann mal zum abbruch des loops führen

und 3: du kannst mit einem BOOLEAN NICHT rechnen ! ... einen bool zu incrementieren macht auch keinen sinn ...

zum loop selbst : da du den bool mit FALSE initialisierst ... und dann auf TRUE prüfst ... ist deine loop-condition nicht erfüllt und dein loop wird auch nicht ausgeführt ..


btw : warum alles STATIC ? schon mal was von INSTANZ gehört ? sieht ja echt grausam aus
 
ja wie ist jetzt die frage?
da macht mehr keinen sinn... du kannst ja nicht 80 zeilen code schreiben und nicht wissen was return bedeutet?
 
Ich habe es jetzt noch einmal angepasst. Viele Fehler sind weg aber auf die variablen in der if abfrage habe ich keinen zugriff.

Code:
import java.io.*;

public class rechner
{
 public static void main(String[] args)
 {
  System.out.println("**************************");
  System.out.println("******Taschenrechner******");
  System.out.println("**************************");
  System.out.println("*Rechenopperationen:     *");
  System.out.println("*(1)addieren             *");
  System.out.println("*(2)subtrahieren         *");
  System.out.println("*(3)multiplizieren       *");
  System.out.println("*(4)dividieren           *");
  System.out.println("*Programm beenden:       *");
  System.out.println("*(5)beenden              *");
  System.out.println("**************************");
  
  boolean beenden = false; 
  
  while(beenden = true)
  {
   System.out.println("Bitte geben Sie die erste Zahl ein");
   variableeins();
   System.out.println("Bitte geben Sie die zweite Zahl ein");
   variablezwei();
   System.out.println("Bitte Rechenoperation eingeben/Programm beenden");
   variabledrei();
   variableabfrage();
  }
 }

   public static String variableeins()
   {
    BufferedReader b = new BufferedReader(new InputStreamReader(System.in));
    try{
        return b.readLine();
    }catch(Exception e){
        return "?";
    }
   }

   public static String variablezwei()
   {
    BufferedReader b = new BufferedReader(new InputStreamReader(System.in));
    try{
        return b.readLine();
    }catch(Exception e){
        return "?";
    }
   }
   
   public static String variabledrei()
   {
    BufferedReader b = new BufferedReader(new InputStreamReader(System.in));
        try{
            return b.readLine();
        }catch(Exception e){
            return "?";
        }
   }

   public static void abfrage()
   {
    if (variabledrei() == 1)
    {
     System.out.println("Das Ergebnis ist: "+(variableeins()+variablezwei());
    }
    else if (variabledrei() == 2)
    {
     System.out.println("Das Ergebnis ist: "+(variableeins()-variablezwei());
    }
    else if (variabledrei() == 3)
    {
     System.out.println("Das Ergebnis ist: "+(variableeins()*variablezwei());
    }
    else if (variabledrei() == 4)
    {
     System.out.println("Das Ergebnis ist: "+(variableeins()/variablezwei());
    }
    else if (variabledrei() == 5)
    {
     System.out.println("Auf Wiedersehen!");
     boolean beenden = true;
    }
    else
    {
     System.out.println("Fehler bitte Programm neu starten!");
    }
   }
}
 
public static void abfrage()
{
if (variabledrei() == 1)
{
System.out.println("Das Ergebnis ist: "+(variableeins()+variablezwei());
}
else if (variabledrei() == 2)
{
System.out.println("Das Ergebnis ist: "+(variableeins()-variablezwei());
}
else if (variabledrei() == 3)
{
System.out.println("Das Ergebnis ist: "+(variableeins()*variablezwei());
}
else if (variabledrei() == 4)
{
System.out.println("Das Ergebnis ist: "+(variableeins()/variablezwei());
}
...
[/CODE]
Willst du hier rechnen? variableeins() und variablezwei geben beide eine String zurück, da kannst du nicht mit == vergleichen sondern musst if(variabledrei().equals("1")) abfragen und rechnen kannst du damit auch nicht!

Was möchtest du machen, welche möglichen Werte sollen variableeins() und variablezwei() returnen?
 
Java:
while(beenden = true)
das ist eine ZUWEISUNG ! aber KEIN VERGLEICH ! ... und ist demnach IMMER TRUE ... da kannst du von außen dein bool ändern wie du willst ... du setz es bei jedem durchlauf immer wieder auf true ... und da eine zuweisung in diesem fall als ergenis true liefert hast du damit einen endlos-loop ... und könntest eigentlich auch
Java:
while(true)
schreiben ... würde aufs selbe kommen

wenn du mit einem flag ein loop kontrollieren willst dann musst du auf diesen mit einem bool-vergleich prüfen ...
wenn du ein bool-flag hast kannst du dies dierekt einsetzen
Java:
while(flag)
wenn aber vorher noch was anstellen musst um einen bool zu bekommen der die aktuelle situation deines programms ausdrückt bieten sich call's an
Java:
while(checkFlag())
die entsprechende methode muss dann natürlich ein bool returnen ...

wenn du nun einen anderen typ hast prüfst du diesen einfach
Java:
while(flag!=x)
oder was auch immer für eine arithmetische oder logische funktion ... wichtig ist das das ergenis dieses aufrufs ein bool ist ... UND KEINE ZUWEISUNG !

alternativ kannst du auch innerhalb des loops mit nem if() prüfen und dann mit break; rausspringen ...

du siehst : es gibt genug möglichkeiten einen loop zu kontrolieren ...


und auch der rest deine codes ist kompletter blödsinn

du kannst nicht einfach wild irgendwelche methoden aufrufen die irgendwas machen ...
dann find ich unten den letzten rest noch sehr geil ...

1) du vergleichst STRINGS mit == ... anstatt mit equals() ... mag bei String auf grund des String-Pool , der gelichen adressen im RAM und der selben hash-codes noch irgendwie sinn machen ... sollte man aber gerade bei eingaben nicht verwenden

2) du rufst innerhalb deines while-loops deine methoden auf die i-was einlesen sollen ... speicherst dieses aber nirgends ... und callst diese dann am ende NOCHMAL ? ... warum ? denkste du das eine METHODE eine local-variable zwischen zwei calls behält ? vor allem wenn du sie wie dort sowieso jedes mal neu überschreiben würdest ?

3) mit einem String rechnen ? hatten wir dasselbe nicht schon mit BOOL ? du kannst mit NICHT-numerischen typen natürlich auch NICHT rechnen ... das da eine menge compiler-fehler bei rauskommen sieht man ... und selbst wenns compilen würde wäre die funktion sowas von daneben ... nee ...


und dann verwende doch bitte endlich mal JAVA-tags ... also anstatt
Code:
 [code=Java] schreiben ... und am ende statt
einfach [/code] ... ist das echt SO SCHWER ?


junge erlich ... du hast KEINE AHNUNG von java , den grundlagen oder von programmieren an sich ...
leg dir n paar gute bücher zu ... *alternativ : google -> javainsel* und versuch das ganze mal zu begreifen ...
und bei einem KONKRETEN problem kannst du dann fragen ...
aber wir sind hier nicht da um dir die grundlagen zu erklären oder um deine hausaufgaben zu machen ...

wenn du in der schule nicht mitkommst ... dann musst du dich selbst mal zu deinem lehrer / dozent / prof bewegen und sagen : "kollege sorry .. aber ich raff dat nich" ... und ihn dann auch so lange nerven bis du es gerafft hast ...

das is ja echt schlimm ... und nein : ich werd dir diese sehr einfach aufgabe nicht lösen *zu mal ichs eh in einer art und weise machen würde an der dein lehrer sehen würde das das nich von dir kommen kann ...*
 
@irgendjemand
deine Postings sind ja (ohne sie im Detail gelesen zu haben) bemerkenswert arbeitsintensiv,
deshalb sind sie trotz des komischen Tons (noch) nicht zu löschen/ zu sperren

falls du nicht nur spammst sondern anscheinend wirklich (irgendwie..) zum Thema beitragen willst,
sei einmal drauf hingewiesen: mit zivilisierten Ton wäre allen noch mehr geholfen

---

@Conax
Java-Tags statt Code-Tags!
 
der folgende Code läuft, habe versucht möglichst viel von deinem zu erhalten. Den kannst du vergleichen und Fragen stellen.

Java:
package rechner;

import java.io.*;

public class Rechner
{
    public static double vEins, vZwei;
    public static int vDrei;
    public static boolean beenden = false;
    
    public static void main(String[] args)
    {
        while(beenden != true)
        {
            uebersicht();
            vEins = variableeins();
            vZwei = variablezwei();
            vDrei = variabledrei();
            abfrage();
        }
    }
    
    public static void uebersicht()
    {
        System.out.println("**************************");
        System.out.println("******Taschenrechner******");
        System.out.println("**************************");
        System.out.println("*Rechenopperationen:     *");
        System.out.println("*(1)addieren             *");
        System.out.println("*(2)subtrahieren         *");
        System.out.println("*(3)multiplizieren       *");
        System.out.println("*(4)dividieren           *");
        System.out.println("*Programm beenden:       *");
        System.out.println("*(5)beenden              *");
        System.out.println("**************************");
    }
    
    public static double variableeins()
    {
        System.out.println("Bitte geben Sie die erste Zahl ein");
        BufferedReader b = new BufferedReader(new InputStreamReader(System.in));
        try
        {
            return Double.parseDouble(b.readLine());
        }catch(Exception e)
        {
            System.out.println("Eingabe ist kein Integer!");
            return 0;
        }
     }
    
    public static double variablezwei()
    {
        System.out.println("Bitte geben Sie die zweite Zahl ein");
        BufferedReader b = new BufferedReader(new InputStreamReader(System.in));
        try{
            return Double.parseDouble(b.readLine());
        }catch(Exception e)
        {
            System.out.println("Eingabe ist kein Integer!");
            return 0;
        }
    }
    
    public static int variabledrei()
    {
        System.out.println("Bitte Rechenoperation eingeben/Programm beenden");
        BufferedReader b = new BufferedReader(new InputStreamReader(System.in));
        try
        {
            return Integer.parseInt(b.readLine());
        }catch(Exception e)
        {
            System.out.println("Eingabe ist kein Integer!");
            return 0;
        }
     }
    
    public static void abfrage()
    {
        if (vDrei == 1)
        {
            System.out.println("Das Ergebnis ist: "+(vEins+vZwei));
        }
        else if (vDrei == 2)
        {
            System.out.println("Das Ergebnis ist: "+(vEins-vZwei));
        }
        else if (vDrei == 3)
        {
            System.out.println("Das Ergebnis ist: "+(vEins*vZwei));
        }
        else if (vDrei == 4)
        {
            if(vZwei != 0.0)
            {
                System.out.println("Das Ergebnis ist: "+(vEins/vZwei));
            }else
            {
                System.out.println("Division durch 0!");
            }
        }
        else if (vDrei == 5)
        {
            System.out.println("Auf Wiedersehen!");
            beenden = true;
        }
        else
        {
            System.out.println("Fehler bitte Programm neu starten!");
        }
    }
}
 
Zuletzt bearbeitet:
Generell wäre es hilfreich, die Fehlermeldungen mit zu posten.

... oder noch besser mit "Hello world" zu beginnen.

Das meine ich durchaus ernst.

Erst ein Hello world - das ist mal dazu da, die Entwicklungsumgebung zu überprüfen.

Dann eine erste Methode reinpacken und die aus dem Main aufrufen und das Resultat ausgeben

Dann weitere Methoden --- schön Schritt für Schritt

Java:
do {
    überlegen();
    implementieren();
    testen();
} while(nochNichtFertig())

(Einen noch einfacheren Entwicklungsprozess habe ich noch nie gesehen 😀 )

Und zum Thema static:
static sieht gar nicht grausig aus - für so ein Programm ist das perfekt.
Was eher unschön ist, sind globale Variabeln wie beenden, aber das lassen wir jetzt ganz einfach mal so stehen.
 
richtig globale Variablen sind unschön, aber in diesem Fall vielleicht übersichtlicher. Naja, vielleicht auch Geschmackssache.

Hier ohne globale Variable:

Java:
package rechner;

import java.io.*;

public class Rechner
{
    public static void main(String[] args)
    {
        boolean beenden = false;
        double vEins, vZwei;
        int vDrei;
        
        while(beenden != true)
        {
            uebersicht();
            vEins = variableeins();
            vZwei = variablezwei();
            vDrei = variabledrei();
            beenden = abfrage(vEins, vZwei, vDrei);
        }
    }
    
    public static void uebersicht()
    {
        System.out.println("**************************");
        System.out.println("******Taschenrechner******");
        System.out.println("**************************");
        System.out.println("*Rechenopperationen:     *");
        System.out.println("*(1)addieren             *");
        System.out.println("*(2)subtrahieren         *");
        System.out.println("*(3)multiplizieren       *");
        System.out.println("*(4)dividieren           *");
        System.out.println("*Programm beenden:       *");
        System.out.println("*(5)beenden              *");
        System.out.println("**************************");
    }
    
    public static double variableeins()
    {
        System.out.println("Bitte geben Sie die erste Zahl ein");
        BufferedReader b = new BufferedReader(new InputStreamReader(System.in));
        try
        {
            return Double.parseDouble(b.readLine());
        }catch(Exception e)
        {
            System.out.println("Eingabe ist kein Integer!");
            return 0;
        }
     }
    
    public static double variablezwei()
    {
        System.out.println("Bitte geben Sie die zweite Zahl ein");
        BufferedReader b = new BufferedReader(new InputStreamReader(System.in));
        try{
            return Double.parseDouble(b.readLine());
        }catch(Exception e)
        {
            System.out.println("Eingabe ist kein Integer!");
            return 0;
        }
    }
    
    public static int variabledrei()
    {
        System.out.println("Bitte Rechenoperation eingeben/Programm beenden");
        BufferedReader b = new BufferedReader(new InputStreamReader(System.in));
        try
        {
            return Integer.parseInt(b.readLine());
        }catch(Exception e)
        {
            System.out.println("Eingabe ist kein Integer!");
            return 0;
        }
     }
    
    public static boolean abfrage(double vEins, double vZwei, int vDrei)
    {
        if (vDrei == 1)
        {
            System.out.println("Das Ergebnis ist: "+(vEins+vZwei));
            return false;
        }
        else if (vDrei == 2)
        {
            System.out.println("Das Ergebnis ist: "+(vEins-vZwei));
            return false;
        }
        else if (vDrei == 3)
        {
            System.out.println("Das Ergebnis ist: "+(vEins*vZwei));
            return false;
        }
        else if (vDrei == 4)
        {
            if(vZwei != 0.0)
            {
                System.out.println("Das Ergebnis ist: "+(vEins/vZwei));
                return false;
            }else
            {
                System.out.println("Division durch 0!");
                return false;
            }
        }
        else if (vDrei == 5)
        {
            System.out.println("Auf Wiedersehen!");
            return true;
        }
        else
        {
            System.out.println("Fehler bitte Programm neu starten!");
            return true;
        }
    }
}
 
Du musst jetzt nicht die banalen Sachen ändern - wenn du Kompilationsfehler hast und der Überblick fehlt, empfiehlt sich der Weg zurück Richtung "hello world" - code rausschmeissen und eine schöne Struktur erstellen - das musst du definitv selbermachen, sonst lernst du es nie.
 
Zuletzt bearbeitet:
@Andi_CH: Ich habe keine Kompilationsfehler - versuche eigentlich zu helfen. :bahnhof: Probleme mit dem Programm hat Conax. In seiner Version fehlt es hinten und vorne, da gebe ich dir recht mit Hello World zu beginnen, aber in diesem speziellen Fall wäre ein Buch sinnvoll (fangen ja auch alle mit Hello World an) und zwar insbesondere die Kapitel über Datentypen und Methoden. Kurzfristig dachte ich mir, ich stelle Conax einen lauffähigen Code zur Verfügung, den er mit seinem vergleichen kann und dann Fragen stellt.
 

Neue Themen


Zurück
Oben