Erste Schritte Fehler in Übungsaufgabe

uebertreiber

Mitglied
Guten Abend, habe ein Programm geschrieben allerdings ist dort ein fehler drin, könntet ihr bitte mal drüber schauen und mir sagen wo der fehler ist :/ ?
danke 🙂

Java:
//Scanner Einfügen
import java.util.Scanner;

public class Blatt4Aufgabe1 {
	//Hauptmethode
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		
		//integer Deklaration
		int x = 0;
		int zahl1 = 3;
		int zahl2 = 4;	
		
		//Aufforderung zur Zahlen Eingabe
		System.out.println("Was moechten Sie tun ? ");
		System.out.println("  <1> - Aufgabenteil A aufrufen ");
		System.out.println("  <2> - Aufgabenteil B aufrufen");
		System.out.println("  Jede andere Zahl ruft Aufgabenteile A & B auf");
		
		//Benutzer Eingabe

		int x = scanner.nextInt();
		
		//if Anweisung was ausgeführt werden soll

			if(x = 1) {
				addiere();
			else if (x = 2)
				subtrahiere();
			else
				addiere() & subtrahiere();
			}
	}
			
	// Methode A	
	private int addiere(int zahl1, int zahl2) {
	        return zahl1 + zahl2;
	 }
	
	// Methode B		
	private int subtrahiere(int zahl1, int zahl2) {
	        return zahl1 - zahl2;
	 }	
		
	
}
 
Zuletzt bearbeitet:
Java:
		addiere() & subtrahiere();
Ich denke mal da hast Du etwas zu wörtlich genommen ;-) es sollen einfach nur beide Methoden aufgerufen werden.
Weitere Fehler
Die Methoden erwarten zwei Parameter, Du willst sie aber ohne Parameter aufrufen.
Sie sind nicht static und können so nicht aus dem statischen Kontext der main aufgerufen werden.
 
Java:
 if(x = 1)

Hier sollte eher sowas stehen:

Java:
if(x == 1)

x = 1 ist ein Zuweisung.

Pentalon
 
Guten Abend, habe ein Programm geschrieben allerdings ist dort ein fehler drin

Ein Fehler ist gut, es sind mehrere.
1. Die Variable x wird doppelt deklariert, was nicht zulässig ist. Bei der Zuweisung int x kannst Du das int weglassen.
2. Innerhalb der ifs wird mit = eine Zuweisung gemacht und kein Vergleich. Numerische Vergleiche auf Gleichheit immer mit ==
3. Die Methoden addiere() und substrahiere() haben zwei Parameter, beim Aufruf werden aber keine Argumente übergeben, was ebenfalls zum Fehler führt.
4. MethodeA() gibt es gar nicht!
 
Zuletzt bearbeitet:
Das kannst Du auch selber.

Bei den beiden Methoden static dazuschreiben.
Bei den Aufrufen, Parameter übergeben.
Bei den if's aus einem = zwei == machen.

PS: Wie ist diese Klammerung zu berstehen ???

Java:
            if(x = 1) {
                addiere();
            else if (x = 2)
                subtrahiere();
            else
                addiere() & subtrahiere();
            }

Pentalon
 
Java:
//Scanner Einfügen
import java.util.Scanner;

public class Blatt4Aufgabe1 {
	//Hauptmethode
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		
		//integer Deklaration
		int x = 0;
		int zahl1 = 3;
		int zahl2 = 4;	
		
		//Aufforderung zur Zahlen Eingabe
		System.out.println("Was moechten Sie tun ? ");
		System.out.println("  <1> - Aufgabenteil A aufrufen ");
		System.out.println("  <2> - Aufgabenteil B aufrufen");
		System.out.println("  Jede andere Zahl ruft Aufgabenteile A & B auf");
		
		//Benutzer Eingabe
		int x = scanner.nextInt();
		
		//if Anweisung was ausgeführt werden soll
			if(x == 1) {
				addiere(int zahl1, int zahl2);
			else if (x == 2)
				subtrahiere(int zahl1, int zahl2);
			else
				addiere(int zahl1, int zahl2) & subtrahiere(int zahl1, int zahl2);
			}
	}
			
	// Methode A
	
	public static addiere(int zahl1, int zahl2) {
	        return zahl1 + zahl2;
	}
	
	// Methode B
	
	public static subtrahiere(int zahl1, int zahl2) {
	        return zahl1 - zahl2;
	}	
		
	
}

mein aktueller stand :S
 
Obwohl dein Thread-Titel richtig schlecht und deine Problembeschreibungen miserabel sind gibts trotzdem nen kleinen Tipp von mir...
Java:
if(x == 1) {
   addiere();
}
else if (x == 2) {
   subtrahiere();
}
else {
   addiere();
   subtrahiere();
}
Außerdem fehlt bei den Methoden der Rückgabetyp
 
Zuletzt bearbeitet:
Der if Block hat noch ein Problem:

Java:
            if(x == 1) {
                addiere();
            else if (x == 2)
                subtrahiere();
            else
                addiere() & subtrahiere();
            }

Hier müsste die erste und die letzte geschwungene Klammer weg.

Java:
            if(x == 1)
                addiere(5, 10);
            else if (x == 2)
                subtrahiere(10,5);
            else
                addiere(10,10) & subtrahiere(100,20);

Pentalon
 
Mit dem was addiere und subtrahiere zurückliefert machst Du aber noch nichts.

Hier könnte man so etwas machen:

Java:
System.out.println("Additionsergebnis= "+addiere(10,10));
System.out.println("Subtraktionsergebnis = "+subtrahiere(10,5));

Pentalon
 
Die Methodenaufrufe haben immer noch keine Argumente. Und der Aufruf beider Methoden mit & geht auch nicht. In Java wird der Operator & für die bitweise Verknüpfung verwendet.
 
bin grad voll am verzweifeln und durcheinander... sitze schon seit 4 stunden dran und kriege i.wie nichts mehr hin 🙁

kann mir bitte jemand einfach den code korrigieren ?
 
Der einzig richtige Weg ist sich eines der vielen Java Bücher zu nehmen und die Grundlagen zu lernen. Dieses rumprobieren was du hier machts bringt nichts.
 
Ich nehme mal an, dass zahl1 und zahl2 jedes mal neu eingelesen werden.
Ansonsten hilft meistens in kleinen Schritten programmieren, ausführen
- geht ==> ok, nächster Schritt
- geht nicht ==> überlegen woran es liegt.

und das das "&" so nicht geht, wurde ja bereits erwähnt. Du sollst einfach die Methoden nacheinander aufrufen: erste Zeile addiere(.. zweite Zeile sub...
 
Java:
//Scanner Einfügen
import java.util.Scanner;

public class Blatt4Aufgabe1 {
	//Hauptmethode
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);

		//integer Deklaration

		int zahl1 = 3;
		int zahl2 = 4;  

		//Aufforderung zur Zahlen Eingabe
		System.out.println("Was moechten Sie tun ? ");
		System.out.println("  <1> - Aufgabenteil A aufrufen ");
		System.out.println("  <2> - Aufgabenteil B aufrufen");
		System.out.println("  Jede andere Zahl ruft Aufgabenteile A & B auf");

		//Benutzer Eingabe
		int x = scanner.nextInt();

		//if Anweisung was ausgeführt werden soll
		if(x == 1)
			System.out.println("Addition= "+addiere(zahl1, zahl2));
		else if (x == 2)
			System.out.println("Subtraktion= "+subtrahiere(zahl1, zahl2));
		else {
			System.out.println("Addition= "+addiere(zahl1, zahl2));
			System.out.println("Subtraktion= "+subtrahiere(zahl1, zahl2));
		}

	}

	// Methode A

	public static int addiere(int zahl1, int zahl2) {
		return zahl1 + zahl2;
	}

	// Methode B

	public static int subtrahiere(int zahl1, int zahl2) {
		return zahl1 - zahl2;
	}   
}

Deine Methoden hatten zwar ein return, jedoch war der Datentyp im Methodenkopf nicht angegeben.

Pentalon
 
Noch eine kleine Sache:

Um eine Variable zu deklarieren gibtst Du den Datentyp an gefolgt vom Namen den die Variable haben soll.

int a;

Danach kannst Du mit a=5; damit arbeiten uns sie einer methode mit addiere(a,a), übergeben.

Deine Parameterübergabe an die Methode addiere und subtrahiere hat so nicht den gewünschten Effekt (die globalen Variablen, die Du oben definiert und initialisiert hast zu übergeben).

subtrahiere(int zahl1, int zahl2); // Dein Aufruf
subtrahiere(zahl1, zahl2); // so geht das. INT musst Du nicht dazusagen, Java weiss das schon 🙂

Pentalon
 
Zuletzt bearbeitet:
mal eine genrelle frage... sagen wir ich habe eine main methode und ich habe noch eine methode a und methode b mit drin, wie kann ich dann methode a oder b aufrufen ?
bzw die unterprogramme in methode a und b
danke
 
Was meinst Du mit "mit drin" ???

Du hattest doch gerade eine Main mit den 2 Methoden addiere und subtrahiere.
Meinst Du vielleicht eine weitere Klasse in der Methoden enthalten sind ?
Machst Du das für die Schule, oder ist es privates Interesse ?

Pentalon
 
mal eine genrelle frage... sagen wir ich habe eine main methode und ich habe noch eine methode a und methode b mit drin, wie kann ich dann methode a oder b aufrufen ?
bzw die unterprogramme in methode a und b
danke
Was sollen bitte "unterprogramme" sein? :autsch:

Du kannst die Methoden genau so aufrufen wie du bereits addieren und subtrahieren in deinem Code aufgerufen hast. Also einfach
Code:
a();
bzw.
Code:
b();
 
ja ich meine wenn ich zb in die methode a einen rechner machen muss der primzahlen ausrechnet und in methode b zb wenn ich 18 eingebe alle zahlen bis 18 ausgibt :S mache das für die uni 🙂
 
Ich würde vorschlagen Du schliesst dieses Thema, denn die Frage ist erledigt und machst einen neuen Thread auf mit Deiner neuen Frage. Also Knopf "Thema als erledigt markieren". Es freut sich auch sicher jeder über ein Danke, der Dir aus Deiner Sicht bei der Lösung geholfen hat (Danke Button bei den Beiträgen).

Pentalon
 
Mit BufferedReader finde ich das besser:
Java:
            //Hauptmethode
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); 
        
        //integer Deklaration
        int zahl1 = 3;
        int zahl2 = 4;  
        
        //Aufforderung zur Zahlen Eingabe
        System.out.println("Was moechten Sie tun ? ");
        System.out.println("  <1> - Aufgabenteil A aufrufen ");
        System.out.println("  <2> - Aufgabenteil B aufrufen");
        System.out.println("  Jede andere Zahl ruft Aufgabenteile A & B auf");
        
        //Benutzer Eingabe
         String x = reader.readLine();
        
        //if Anweisung was ausgeführt werden soll
            if(x.contains("1"))
                addiere(zahl1, zahl2);
            else if (x.contains("2"))
                subtrahiere(zahl1, zahl2);
            else {
                addiere(zahl1, zahl2); subtrahiere(zahl1, zahl2);
            }
    }
            
    // Methode A    
    private static int addiere(int zahl1, int zahl2) {
            return zahl1 + zahl2;
     }
    
    // Methode B        
    private static int subtrahiere(int zahl1, int zahl2) {
            return zahl1 - zahl2;
     }
Methoden addiere u. subtrahiere geben aber ein Ergebnis (int) zurück, vielleicht solltest du das ausgeben...? Ansonsten ist es aber ok. Wenn aber 2 oder mehr if-Blöcke aufeinander folgen, solltest du komplett klammern, denn sonst kann das Dangling-Else-Problem auftreten.
 

Zurück
Oben