Einlesen funktioniert an einer Stelle nicht und ich kann mir nicht erklären warum

Der Neuling

Mitglied
Guten Morgen,

ich habe ein kleines Programm geschrieben das etwas rechnen soll, dann fragen, ob noch etwas gerechnet werden soll und schließlich im Falle eines "j" die Schleife nochmal durchläuft, etc.
Bis zu der Frage, ob etwas gerechnet werden soll funktioniert auch alles, nur habe ich dann keine Eingabemöglichkeit mehr und ich komme seit gestern nicht darauf was ich falsch gemacht habe.
Den Quelltext hab ich als Screenshot angehängt.
Es wäre echt nett, wenn mir jemand helfen könnte, ich bin mit meinem Latein am Ende.

Vielen Dank und viele Grüße

Der Neuling
 

Anhänge

  • Fehler im Code.JPG
    Fehler im Code.JPG
    93,5 KB · Aufrufe: 40
Moin,

zuerst einmal: poste bitte Code nicht als Bild sondern über den "Einfügen"-Button hier im Editor! So läßt er sich nämlich nicht zitieren !!
Sodann ganz verstehe ich Deine Frage nicht wirklich ...

Bis zu der Frage, ob etwas gerechnet werden soll funktioniert auch alles, nur habe ich dann keine Eingabemöglichkeit mehr und ich komme seit gestern nicht darauf was ich falsch gemacht habe
Bedeutet das, dass ab Zeile 11 Schicht ist??
Kommen Fehler? Wenn JA, welche? Stacktrace ??
Was steht nach Zeile 8 im String 'a' ?
Gibt Du vlt. 'J' statt 'j' ein ??

Gruß Klaus
 
Hi,

Code hab ich jetzt angehängt.
Mein Problem ist, dass das Programm bis einschließlich Zeile 44 durchläuft, es erscheint in der Konsole noch "Wollen Sie noch etwas berechnen?" und dann kann ich darunter nichts mehr eingeben, sondern das Programm ist zu Ende. Ich möchte aber die Wahl, ob ich die Schleife mit "j" nochmal starte oder eben mit jeder anderen Eingabe aus der Schleife rausgehe...
Ich habe in Zeile 8 "j" in "a" eingegeben, damit die Schleife überhaupt anläuft. Fehlermeldungen gibt es keine

Hier der eingefügte Code:

Java:
import java.util.*;
public class Box {
    Scanner in = new Scanner (System.in);
   
       
    public void rechnen(){
        System.out.println("Wollen Sie etwas berechnen?");
        String a = in.nextLine();
       
       
    while (a.equals("j")){
           
            System.out.println("Bitte Länge eingeben: ");
            double laenge = in.nextDouble();
            System.out.println(laenge);
   
            System.out.println("Bitte Breite eingeben: ");
            double breite = in.nextDouble();
            System.out.println(breite);
           
            System.out.println("Bitte Höhe eingeben: ");
            double hoehe = in.nextDouble();
            System.out.println(hoehe);
           
            System.out.println("Wollen Sie das Volumen einer Pyramide (1 eingeben) oder eines Würfels (2 eingeben) berechnen");
            double wahl = in.nextDouble();
   
           
           
                if (wahl == 1){
                    double flaeche = (((laenge * breite)/3) * hoehe);
                    System.out.println("Volumen der Pyramide : " + flaeche);
                   
                }
                if (wahl == 2){
                    double flaeche = (laenge * breite * hoehe);
                    System.out.println("Volumen des Würfels : " + flaeche);
                   
                }
                if (wahl != 1 && wahl != 2){
                    System.out.println("Falsche Eingabe, Programmende!");
                }
                   
            System.out.println("Wollen Sie noch etwas berechnen?");
            a = in.nextLine();
            System.out.println(a);
           
           
           
        }//Ende while
   
    }//Ende rechnen
} // Ende class

Viele Grüße
 
Hallo Neuling,
das Problem ist, dass die Methode nextDouble() etwas anders funktioniert als nextLine(). Genaueres kann dir die API dazu sagen. Wenn ich testweise hinter jedem "xxx = in.nextDouble()" noch eine Zeile "in.nextLine()" einfüge, dann klappt es. Es liegt also nicht an deiner Programm-Logik.
 
So jetzt mal der Code als Code
Code:
import java.util.Scanner;

public class Box{
  Scanner in =new Scanner( System.in);
  
  public void rechnen(){
  System.out.println( "Wollen Sie etwas berechnen?");
  String a =in.nextLine();
  
  while( a.equals( "j")){
  System.out.println( "Bitte Länge eingeben: ");
  double laenge =in.nextDouble();
  System.out.println( "Bitte Breite eingeben: ");
  double breite =in.nextDouble();
  System.out.println( "Bitte Höhe eingeben: ");
  double hoehe =in.nextDouble();
  
  System.out.println( "Wollen Sie das Volumen einer Pyramide(1) oder eines Würfels(2) berechen?");
  int wahl =in.nextInt();
  
  if( wahl ==1){
  System.out.println( "Volumen der Pyramide :" +(((laenge*breite)/3)*hoehe));
  } else if( wahl ==2){
  System.out.println( "Volumen der Würfel :" +(laenge*breite*hoehe));
  } else{
  System.out.println( "Falsche Eingabe");
  System.exit( 1);
  }
  
  System.out.println( "Wollen Sie noch etwas berechen?(j)");
  a =in.next();
  }
  System.out.println( "Vielen Dank");
  }
  
  public static void main( String[] args){
  Box b =new Box();
  b.rechnen();
  }
}
Dein Problem lag darin, dass du nextLine() und nicht nur next() genommen hast.
so tuts
 
Hallo miteinander,

vielen Dank. Ich hab jetzt strußis Variante übernommen und lese jetzt die Scannerklasse mal durch um zu verstehen warum es so funktioniert und meine Variante nicht funktioniert hat.

Vielen Dank für eure schnelle Hilfe 🙂
 

Zurück
Oben