Zweiseitige Auswahl

  • Themenstarter Themenstarter Rabbit2001
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
R

Rabbit2001

Gast
Hallo!

Ich habe folgende Aufgabenstellung bei einer Hausaufgabe für die Schule:

Es soll der Gesamtwiderstand zweier Parallel oder in Reihe geschaltener Widerstände ausgegeben werden.

Wenn der Benutzer ein "R" eingibt, soll die Berechnung für die Reihenschaltung ausgeführt werden und bei "P" dann die Berechnung für die Parallelschaltung.

Jetzt mein Problem: ich weiß nicht wie ich das mit dem Buchstabeneinlesen hinbekommen soll bzw. das mit der Auswahl zwischen "R" und "P".

Schaut euch bitte meinen Code an und es wäre super, wenn ihr den/die Fehler entdecken würdet.

Vielen Dank schon im Vorraus!

Liebe Grüße




*Programmbeschreibung: Berechnet den Gesamtwiderstand zweier parallel oder in Reihe geschalteter Widerstände und gibt ihn aus.
*
*/


Code:
 import java.io.*;
 
 public class Widerstand
 
 {
 		
 	public static void main (String args[]) throws IOException
 	{
 		//Variablendeklaration
 		
 		double r1, r2, ergebnis;
 		
 		char p = 'P';
 		char r = 'R';
 		int zeichen;
 		String str;
 		
 									
 		System.out.println("Widerstands-Schaltung");
 		
 		System.out.println("(P)arallel- oder (R)eihenschaltung?");
 		
 		zeichen=System.in.read();
 		
 			
 		//Einlesen der Information(en)
 									
 		
 		System.out.println("R1 in Ohm: ");
 		
 		//Erzeugung des Eingabeobjektes
 		
 		BufferedReader input=new BufferedReader(
 				    new InputStreamReader(
 				            System.in));
 		
 		str=input.readLine();
 		
 		
 		r1=Double.parseDouble(str);
 		
 		
 		System.out.println("R2 in Ohm: ");
 		
 		str=input.readLine();
 		
 		r2=Double.parseDouble(str);
 		
 		
 		if (zeichen == 'P')
 		
 		{
 				
 			ergebnis=(r1*r2)/(r1+r2);
 			System.out.println("Der Gesamtwert der Parallelschaltung ist "+ergebnis+ " Ohm");
 			System.out.println("Programmende Widerstand");
 			
 			
 		}
 		
 		
 		else
 		
 		{
 			ergebnis=(r1+r2);
 			System.out.println("Der Gesamtwert der Reihenschaltung ist "+ergebnis+ "Ohm");
 			System.out.println("Programmende Widerstand");
 			
 		}
 				
 	}
 			
 	
 }
 
Strings darf man nicht mit "==" vergleichen. Das musst du mit dar Methode String.equals(anderer String) machen:
Code:
if(zeichen.equals("R"))
{
    //Tu was
}
else
{
    //Tu was anderes
}
 
Vielen Dank,

es scheint zu funktionieren... aber gibt es noch eine andere Möglichkeit als mit dem "equals-Befehl"? Denn das haben wir noch nicht durchgenommen... :bahnhof:

Muss ich das "P" und das "R" denn als String einlesen? Es ist doch nur ein Zeichen und keine Zeichenkette. Kann ich das nicht mit dem Variablentyp "Char" irgendwie machen?

Sorry vielleicht für meine etwas dummen Fragen, aber bin noch absoluter Neuling... :?
 
Rabbit2001 hat gesagt.:
Vielen Dank,

es scheint zu funktionieren... aber gibt es noch eine andere Möglichkeit als mit dem "equals-Befehl"? Denn das haben wir noch nicht durchgenommen... :bahnhof:

Muss ich das "P" und das "R" denn als String einlesen? Es ist doch nur ein Zeichen und keine Zeichenkette. Kann ich das nicht mit dem Variablentyp "Char" irgendwie machen?

Sorry vielleicht für meine etwas dummen Fragen, aber bin noch absoluter Neuling... :?

Ja kannst du! 😀

Wenn du nur ein Zeichen hast kannst du mit char arbeiten und die kannst du dann mit == vergleichen 😎
 
Hier mein neuer Code:

Code:
import java.io.*;
 
 public class Widerstand
 
 {
 		
 	public static void main (String args[]) throws IOException
 	{
 		//Variablendeklaration
 		
 		double r1, r2, ergebnis;
 		
 		char p = 'P';
 		char r = 'R';
 		
		
 		String str, zeichen;
 		

 									
 		System.out.println("Widerstands-Schaltung");
 		
 		System.out.println("(P)arallel- oder (R)eihenschaltung?");
 		
 		//Erzeugung des Eingabeobjektes
 		
 		BufferedReader input=new BufferedReader(
 								new InputStreamReader(
 									System.in));
 		
 		
 		zeichen=input.readLine();
 		
 			
 		//Einlesen der Information(en)
 									
 		
 		System.out.println("R1 in Ohm: ");
 		
 
 		
 		
 
 		str=input.readLine();
 		
 		
 		r1=Double.parseDouble(str);
 		
 		
 		System.out.println("R2 in Ohm: ");
 		
 		str=input.readLine();
 		
 		r2=Double.parseDouble(str);
 		
 		
 		if(zeichen.equals("P"))
 		
 		{
 				
 			ergebnis=(r1*r2)/(r1+r2);
 			System.out.println("Der Gesamtwert der Parallelschaltung ist "+ergebnis+ " Ohm");
 			System.out.println("Programmende Widerstand");
 			
 			
 		}
 		
 		
 		if(zeichen.equals("R"))
 		
 		{
 			ergebnis=(r1+r2);
 			System.out.println("Der Gesamtwert der Reihenschaltung ist "+ergebnis+ " Ohm");
 			System.out.println("Programmende Widerstand");
 			
 		}
 				
 	}
 			
 	
 }
 
Danke! Aber warum findet er Integer, wenn ich mit

Code:
 zeichen=System.in.read();


das Zeichen ( "P" oder "R" einlesen will??? Zeichen habe ich als Char deklariert...
 
Anonymous hat gesagt.:
Wenn du nur ein Zeichen hast kannst du mit char arbeiten und die kannst du dann mit == vergleichen 😎

Im Prinzip richtig. Aber es könnte Probleme bei Mehrfachem Einlesen geben,
da bei System.in.read() auch die betriebssystemspezifischen Zeichen für
newline (\r\n (= Carriage Return Newline = ASCII 13/10 bei WinDoof-Systemen)
behandelt werden müssen.

readline ist da angenehmer!
 
Danke Leroy42! Aber geht es denn nicht doch irgendwie mit System.in.read()??? Wenn ich meine Zeichen mit:
Code:
 zeichen=System.in.read();

einlese? Er findet dann aber immer Integer. Warum liest er es nicht als "Char" ein? zeichen habe ich als Char auch deklariert. Muss da vorher noch irgendwas "parsen"??
 
Nein, deine erste Programm-Version sollte eigentlich auch funktionieren.

Ein char ist ja nichts anderes als ein kleiner int.

Code:
zeichen = (char) System.in.read();
 
Mmmh... komisch, dass er trotzdem abbricht... er liest "p" oder "r" denke ich mal ein und wenn er den ersten Widerstandswert (also r1) abfrägt, dann bricht er ab...
Alles sehr eigenartig...
 
Hier die Meldungen die die Konsole ausspuckt:

Widerstands-Schaltung
(P)arallel- oder (R)eihenschaltung?
P
R1 in Ohm:
Exception in thread "main" java.lang.NumberFormatException: empty String
at java.lang.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:9
86)
at java.lang.Double.parseDouble(Double.java:201)
at Widerstand.main(Widerstand.java:53)
Press any key to continue...
 
Die Fehlermeldung ist doch eindeutig. Du versuchst einen leeren String nach Double zu casten. Das klappt natürlich nicht. Das Einlesen klappt offenbar nicht.
 
Genau was ich vermutet habe: In deiner Eingabe steht

P\r\n123.456\r\n

1. Dein read() liest das P ==> OK!
2. Dein readline() liest \r\n ==> Leerer String ==> Nicht ok
 
Das habe ich mir auch schon fast gedacht... also gibt es keinen anderen Weg, als doch das ganze als String einzulesen, oder?
 
...zumindest keine plattformunabhängigen.

Bei WinDoof-Systemen kannst du schreiben:

Code:
zeichen = System.in.read();
System.in.read();System.in.read(); // newline überlesen

Das dürfte auch auf Macs klappen, da meines Wissens
newlines dort durch "\n\r" kodiert werden.

Auf *x (Linux, ...)-Systemen wird newline mit nur einem Zeichen (\n) codiert,
sodaß es dort nicht klappt.

Ergo: Bleib' lieber bei readline (Es macht aus Sicht des Users ja keinen Unterschied)
 
Du könntest auch einfach so lange weiter lesen, bis das gelesene Zeichen kein Whitespace-Zeichen ist.
Oder sogar so lange, bis ein verwertbares Zeichen kommt. Ideal ist diese Lösung aber auch nicht. Besser wäre schon, das ganze als String zu lesen.
 
Okay vielen Dank für eure Hilfe!!! Hab jetzt alles als String eingelesen und jetzt funktioniert es. Also danke nochmal!!! 🙂
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben