Double in komma und Punkt akzeptieren -> Robusteeingabe

Zidinjo

Mitglied
Hallo liebe Community,

ich brauch mal wieder eure Hilfe. Undzwar klappt das Programm aber wenn ich 6,5 und 6,3 eigeben kommt die Ausgabe Fläche 0 Umfang 0. Wenn ich ein Punkt benutzt klappt alles. Kann mir wer helfen?

Java:
import java.text.DecimalFormat;
import java.util.Locale;
import java.util.Scanner;
import javax.swing.JOptionPane;
public class PunktKomma 
{
	public static void main(String[] args)
	{
		Locale.setDefault(Locale.US);
		DecimalFormat df = new DecimalFormat("###,###.###");
		String titel = "Berechnen der Quadratwertes";
		String willko = "Willkommen mein Freund";
		String eingabeFenster = "Bitte geben Sie den ersten Wert ein";
		String zweitesFenster = "Bitte geben Sie den zweiten Wert ein";
		
		JOptionPane.showMessageDialog(null, willko, titel, JOptionPane.CLOSED_OPTION);
		
		double var=0; double var2=0;
		
		Scanner eingabe = new Scanner(JOptionPane.showInputDialog(null,eingabeFenster, titel, JOptionPane.PLAIN_MESSAGE));
		while(eingabe.hasNextDouble())
		{
		if(eingabe.hasNextDouble())
		{
			Locale.setDefault(Locale.US);
			 var = eingabe.nextDouble();
		}
		else
		{
			Locale.setDefault(Locale.GERMAN);
			var = eingabe.nextDouble();
		}
		}
		eingabe.close();
		
		eingabe = new Scanner(JOptionPane.showInputDialog(null,zweitesFenster, titel, JOptionPane.PLAIN_MESSAGE));
		while(eingabe.hasNextDouble())
		{
		if(eingabe.hasNextDouble())
		{
			Locale.setDefault(Locale.US);
			var2 = eingabe.nextDouble();
		}
		else
		{
			Locale.setDefault(Locale.GERMAN);
			var2 = eingabe.nextDouble();
		}
		}
		
		eingabe.close();
	
		double umfang = var + var2;
		double flaeche = var * var2;
		
		JOptionPane.showMessageDialog(null,"Der Umfang: " + df.format(umfang) + " Die Flaeche: " + df.format(flaeche), titel, JOptionPane.PLAIN_MESSAGE);	
		
	
	}
}
 
Java:
while(eingabe.hasNextDouble())
{
if(eingabe.hasNextDouble())
{
Locale.setDefault(Locale.US);
var2 = eingabe.nextDouble();
}
else
{
Locale.setDefault(Locale.GERMAN);
var2 = eingabe.nextDouble();
}
}
Dir ist klar, dass das schief gehen MUSS? Wenn das nächste ein Double ist, dann englisch (6.3), wenn nicht dann trotzdem nextDouble()!?

Möchtest du die Eingaben in englischer oder in deutscher Notation machen!? Ich denke du solltest dich entscheiden und dann den Code entsprechend umbauen. Meinetwegen speichere das Locale irgendwo weg, dass du es über einen weiteren Befehl ändern kannst.
 
Ja, normalerweise nutze ich auch US. aber haben an der Uni diese aufgabe 😀 und bekomme die nicht gescheid hin.

Soll ich dies als String speichern 😀 oder was soll ich machen.
 
Zuletzt bearbeitet:
Mach doch einfach folgendes:

Schmeiß alle Locale.setDefault(...) raus. Schmeiß auch das if(eingabe.hasNextDouble()){...} raus und ließ die Zahlen ganz normal aus. Ohne zwischendurch irgendwann am Locale rumzufummeln.

Wenns dann nicht geht, meld dich hier nochmal. 😉
 
Mach doch einfach folgendes:

Schmeiß alle Locale.setDefault(...) raus. Schmeiß auch das if(eingabe.hasNextDouble()){...} raus und ließ die Zahlen ganz normal aus. Ohne zwischendurch irgendwann am Locale rumzufummeln.

Wenns dann nicht geht, meld dich hier nochmal. 😉


So gemacht. Jetzt klappt natürlich die eingabe mit dem Komma. aber wenn ich jetzt mit dem Punkt mache, dann meckert er natürlich wieder .)

Java:
import java.text.DecimalFormat;
import java.util.Locale;
import java.util.Scanner;
import javax.swing.JOptionPane;
public class PunktKomma 
{
	public static void main(String[] args)
	{
		DecimalFormat df = new DecimalFormat("###,###.###");
		String titel = "Berechnen der Quadratwertes";
		String willko = "Willkommen mein Freund";
		String eingabeFenster = "Bitte geben Sie den ersten Wert ein";
		String zweitesFenster = "Bitte geben Sie den zweiten Wert ein";
		
		JOptionPane.showMessageDialog(null, willko, titel, JOptionPane.CLOSED_OPTION);
		
		Scanner eingabe = new Scanner(JOptionPane.showInputDialog(null,eingabeFenster, titel, JOptionPane.PLAIN_MESSAGE));
		double var = eingabe.nextDouble();
		eingabe.close();
		
		eingabe = new Scanner(JOptionPane.showInputDialog(null,zweitesFenster, titel, JOptionPane.PLAIN_MESSAGE));
		double var2 = eingabe.nextDouble();
		eingabe.close();
	
		double umfang = var + var2;
		double flaeche = var * var2;
		
		JOptionPane.showMessageDialog(null,"Der Umfang: " + df.format(umfang) + " Die Flaeche: " + df.format(flaeche), titel, JOptionPane.PLAIN_MESSAGE);
	}
}
 
Dann ersetze doch einfach nach der Eingabe des Strings alle vorhandene Punkte durch ein Komma. Dafür gibt es einen String.replace()

Gruss

Claus
 
Yeahhh klappt :d !!!!

Lösung:

Java:
import java.text.DecimalFormat;
import java.util.Locale;
import java.util.Scanner;
import javax.swing.JOptionPane;
public class PunktKomma 
{
	public static void main(String[] args)
	{
		Locale.setDefault(Locale.US);
		DecimalFormat df = new DecimalFormat("###,###.###");
		String titel = "Berechnen der Quadratwertes";
		String willko = "Willkommen mein Freund";
		String eingabeFenster = "Bitte geben Sie den ersten Wert ein";
		String zweitesFenster = "Bitte geben Sie den zweiten Wert ein";
 
		JOptionPane.showMessageDialog(null, willko, titel, JOptionPane.CLOSED_OPTION);
 
		Scanner eingabe = new Scanner(JOptionPane.showInputDialog(null,eingabeFenster, titel, JOptionPane.PLAIN_MESSAGE));
		String var = eingabe.next();
		String neu = var.replace(",", ".");
		double zahl1 = Double.parseDouble(neu);
		eingabe.close();
 
		eingabe = new Scanner(JOptionPane.showInputDialog(null,zweitesFenster, titel, JOptionPane.PLAIN_MESSAGE));
		String var2 = eingabe.next();
		String neu2 = var2.replace(",", ".");
		double zahl2 = Double.parseDouble(neu2);
		eingabe.close();
		
		
 
		double umfang = zahl1 + zahl2;

		double flaeche = zahl1 * zahl2;
 
		JOptionPane.showMessageDialog(null,"Der Umfang: " + df.format(umfang) + " Die Flaeche: " + df.format(flaeche), titel, JOptionPane.PLAIN_MESSAGE);
	}
}
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben