Forum / Grundlagen des Programmierens / 1. Hausübung

1. Hausübung

hat schon jemand von euch das 2.Beispiel gelöst? ich schaffs iwi nicht dass das programm zu 100% funktioniert ^^ Ich hoffe ihr könnt helfen :D

beste Grüße

Gerhard ±0

Wenn ich die Variable vorher schon definiere, kann ich diese leider nicht mehr scannen...also irgendwas funktioniert da nicht ganz so einfach. Denn wenn ich die Warnung ignoriere dann kann ich das Programm nicht ausführen...dann ist alles voller fehler!

Meines sieht mal etwa so aus...wie gesagt....es funktioniert nicht

public class BSP3_1 {

public static void main(String[] args) {

do{

System.out.println("Sprache:"); System.out.println("(D) Deutsch"); System.out.println("(F) Französisch"); System.out.println("(X) Programm beenden");

Scanner Scan=new Scanner(System.in); char Einlesen = Scan.next().charAt(0);

switch(Einlesen){

case 'F': System.out.println("Bonjour!");
    break;
case 'D': System.out.println("Hallo!");
    break;
case 'X': return;
default: System.out.println("Use letters");
    

}}

while (Einlesen != 'X') //da is dann der hund begraben!?

}}

Clemens +4

Wenn ich die Variable vorher schon definiere, kann ich diese leider nicht mehr scannen...also irgendwas funktioniert da nicht ganz so einfach. Denn wenn ich die Warnung ignoriere dann kann ich das Programm nicht ausführen...dann ist alles voller fehler!

Meines sieht mal etwa so aus...wie gesagt....es funktioniert nicht

(...)

public static void main(String[] args) {

char Einlesen; do{

System.out.println("Sprache:"); System.out.println("(D) Deutsch"); System.out.println("(F) Französisch"); System.out.println("(X) Programm beenden");

Scanner Scan=new Scanner(System.in); Einlesen = Scan.nextLine().charAt(0);

switch(Einlesen){

case 'F': System.out.println("Bonjour!"); break; case 'D': System.out.println("Hallo!"); break; case 'X': return; default: System.out.println("Use letters");

}}

while (Einlesen != 'X'); //da is dann der hund begraben!?

}}

So sollte es funktionieren.

Gerhard ±0

Vielen Dank Nigel...da hatte ich dann eh nur einen mini-fehler drin! Darauf wäre ich nicht gekommen... danke danke!!

Florian ±0

Das Programm funktioniert soweit, was noch nicht optimal ist: wenn der erste Buchstabe übereinstimmt, dann kann man beliebig viel anhängen und es wird trotzdem ausgeführt. Falls jemand dafür eine Lösung hat, bitte posten. //Aufgabe 1_3

import java.util.; import java.io.;

public class Aufgabe1_3 {

public static void main(String[] args) { Console cons = System.console(); boolean y=true;

while(y=true) {
cons.printf("\n");
cons.printf(" Willkommen im Begrüßungsmenü!\n");
cons.printf(" Bitte wählen Sie einen Menüpunkt:\n");
cons.printf(" (D) Deutsch\n");
cons.printf(" (E) Englisch\n");
cons.printf(" (F) Französisch\n");
cons.printf(" (I) Italienisch\n");
cons.printf(" (X) Beenden\n");

Scanner eingabe = new Scanner(System.console().reader());
cons.printf("\n");
char option = eingabe.next().charAt(0);

switch(option) {
  case 'D': cons.printf(" Hallo!\n");
            break;
  case 'E': cons.printf(" Hello!\n");
            break;
  case 'F': cons.printf(" Bonjour!\n");
            break;
  case 'I': cons.printf(" Ciao!\n");
            break;
  case 'X': cons.printf(" Programm beendet\n");
            System.exit(0);
            break;
  default : cons.printf(" Ungültige Eingabe\n");
            break;
}
}

} }

Clemens ±0

Das Programm funktioniert soweit, was noch nicht optimal ist: wenn der erste Buchstabe übereinstimmt, dann kann man beliebig viel anhängen und es wird trotzdem ausgeführt. Falls jemand dafür eine Lösung hat, bitte posten.

Du hast char option = eingabe.next().charAt(0); Aus dem machst du: String = eingabe.nextLine(); Dann if(eingabe.length() > 1){ ERROR} else{Alles ok - Weitermachen}

Error und Alles ok geeignet mit deinem Programm ersetzen. Bei Error bietet sich an den char als etwas abzuspeichern dass dein Switch-Default auslöst.

Was soll while(y=true) bewirken? Wenn es dir um eine Endlosschleife geht reicht: while(true).

Florian ±0

Danke. Und ja das boolean y kann ich mir sparen, das stimmt. Am Anfang wollte ich es anders lösen und dann hab ich das vergessen zu löschen.

Dan ±0

@Gertschibald

case 'F': System.out.println("Bonjour!"); break; case 'D': System.out.println("Hallo!"); break; case 'X': return; default: System.out.println("Use letters");

Wie genau funktioniert die return Anweisung, überprüft er damit

Clemens ±0

Return ist in dem Fall so etwas wie break. Unterschied: break geht aus switch Anweisung return springt komplett heraus bis zum Funktionsaufruf von main.

Philipp ±0

Bsp 1.1 Können eure Programme ganze Sätze wiederholen?? Bei mir funktioniert immer nur ein Wort, obwohl ich mit

String Text=Eingabe.nextLine()

arbeite.

Kann mir da jemand helfen?

lG

Clemens ±0

Bsp 1.1 Können eure Programme ganze Sätze wiederholen?? Bei mir funktioniert immer nur ein Wort, obwohl ich mit

String Text=Eingabe.nextLine()

arbeite.

Kann mir da jemand helfen?

lG Poste den ganzen Code. Nur mit dieser Zeile ist Fehlersuche schwer.

Philipp ±0

public static void main(String[] args) {

   int x;
   String Text;
   
   Scanner Eingabe=new Scanner(System.in);
   System.out.println("Bitte geben Sie die gewünschte Anzahl an Wiederholungen ein.");
   x=Eingabe.nextInt();
   
   System.out.println("Bitte geben Sie den zu wiederholenden Text ein.");
   Text=Eingabe.nextLine();
   
   for(int i=1;i<=x;i=i+1) {
       System.out.println(Text);
   }

}

Clemens ±0

Problem: Du gibst einen int ein und bestätigst dann mit Enter.
nextLine() liest bis zum Zeilenumbruch, und das ist nach dem Int leider nichts.

Lösunng: Nach x = Eingabe.nextInt(); ergänzt du: Eingabe.nextLine(); Fertig.

Alternativ: Int/String Input vertauschen. Wenn du zuerst den String einscannst und danach nur noch Int einscannst kannst du nextInt() ohne Probleme machen. (nicht das gelbe vom Ei) Oder zwei Scannerklassen (noch schlechterer Programmirstil, macht aber keine Probleme^^)

int x; String Text;

Scanner Eingabe=new Scanner(System.in); System.out.println("Bitte geben Sie die gewünschte Anzahl an Wiederholungen ein."); x=Eingabe.nextInt(); Eingabe.nextLine(); System.out.println("Bitte geben Sie den zu wiederholenden Text ein."); Text=Eingabe.nextLine();

for(int i=1;i<=x;i=i+1) { System.out.println(Text); } }

edit: Belass deinen Code so wie er ist und gib einmal ein: "3 Hallo wie gehts" für den ersten Input.

Philipp ±0

Danke...es funktioniert auch perfekt... aber was bewirkt die zusätzliche Zeile "Eingabe.nextLine();" ??

lg

Clemens ±0

Danke...es funktioniert auch perfekt... aber was bewirkt die zusätzliche Zeile "Eingabe.nextLine();" ??

lg Dein Input für einen Integer ist: "3ENTER" (ohne Anführungszeichen; bzw "3\n") nextInt() sucht nur den nächsten Integer aus dem Stream und das wäre 3. nextLine() sucht/returned alles bis zur Eingabetaste. Und das ist in dem Fall wenn der 3er weg ist nur noch die Entertaste. (/n) => kein wirklicher Input. das nextLine() konsumiert dieses /n was noch immer im Buffer von der Int Eingabe ist.

Andere Alternative: int n = Integer.parseInt(input.nextLine()); Erspart sich so ne Zeile Code, problem ist allerdings wenn User "3 4" etc. eingibt. Dieses Problem löst nextLine().

Jannes ±0

Hallo zusammen, also so habe ich Aufgabe 1 gelöst:

package aufgabe1; import java.util.Scanner;

public class Aufgabe1 {

public static void main(String[] args) {
   Scanner eingabe = new Scanner (System.in);
   
   System.out.println(&quot;Welcher Text soll wiederholt werden? Bitte geben Sie ein: &quot;);
   String text = eingabe.nextLine();
   
   System.out.println(&quot;Bitte geben sie die Anzahl der Wiederholungen an: &quot;);
   int anzahl = Integer.parseInt(eingabe.nextLine());
   
    while (anzahl &gt; 0){
       
       System.out.println(text);
       anzahl--;
        
               }
    }

}

Keine Ahnung, ob das jetzt elegant oder schlecht programmiert ist? Ich habe das jetzt einfach mal so runtergeschrieben wie es mir am logischsten vorgekommen ist ;). Funktioniert einwandfrei.

Sorry, die Kommentarfunktion ist geschlossen.