Anzahl der Werte bestimmen

Bastik1007

Aktives Mitglied
Hallo,
wir sollen für die Schule einen Widerstandsberechner von 2 Werten in einer Reihen- oder Parallelschaltung programmieren. Ich habe das erstmal so gelöst:
Java:
import static java.lang.System.*;
import java.util.Scanner;

public class Widerstand {


   public static void main(String[] args) {
      Scanner scan = new Scanner(in);
      
      float Wert1,Wert2;
      float ergebnis;
      String eingabe;
      
      out.println("Es gibt Parallelschaltung und Reihenschaltung."); 

      try {
    	  Thread.sleep(2000);
      	}
      	catch (InterruptedException e){ 
      	}
      
      out.println("Wählen Sie R bzw r für Reihenschaltung und P bzw p für Parallelschaltung:");
      eingabe = scan.next();      
      
      if (eingabe.equals("P")||eingabe.equals("p")) {
         out.println("Sie haben Parallelschaltung gewählt, geben sie nun die beiden Werte ein.\nWert 1:");
         Wert1 = scan.nextFloat();
         out.println("Wert 2:");
         Wert2 = scan.nextFloat();
         ergebnis = (1/Wert1+1/Wert2);
         ergebnis = 1/ergebnis;
         
         out.println("Das Ergebnis aus beiden Werten lautet: " + ergebnis);
      }
      
      if (eingabe.equals("R")||eingabe.equals("r")) {
         out.println("Sie haben Reihenschaltung gewählt, geben sie nun die beiden Werte ein.\nWert 1:");
         Wert1 = scan.nextInt();
         out.println("Wert 2:");
         Wert2 = scan.nextFloat();
         ergebnis = Wert1+Wert2;
         out.println("Das Ergebnis aus beiden Werten lautet: " + ergebnis);
         
      } else
         out.println("Bitte nur R bzw r oder P bzw p eingeben");
         
      }
      
 
}

Aber ist ja doof, wenn man nur 2 Werte berechnen kann. Also wie kann ich das machen, dass man vorher die Anzahl der Werte bestimmt. Ich hab da echt keine Ahnung wie man das machen könnte.
Bitte um Hilfe 🙂
 
Zuletzt bearbeitet:
Du kannst ja vorher den Benutzer Fragen, wieviele Werte er eingeben möchte. Die Werte musst du dann in ein Array packen.
Oder du lässt die Eingabe solange laufen, bis der Benutzer eine 0 eingibt. Da du aber die Anzahl vorher nicht weißt, solltest du da eher eine Liste nehmen (ArrayList<Float> oder so)
 
Du könntest zum Beispiel ein
Code:
float[] values
definieren und dieses am Anfang initialisieren, indem du den Benutzer nach der gewünschten Anzahl fragst. Dann hast du mit
Code:
int count = scan.nextInt()
und
Code:
values = new float[count]
ein Array der gewünschten Größe. Später musst du dann eben eine for-Schleife durchlaufen, wenn die einzelnen Werte eingegeben werden sollen. Aber wenn du dir
Code:
count
merkst und wiederverwendest, hast du ja die genaue Obergrenze der for-Schleife. 😉
 
ich würde in der Klasse Widerstand wert1,wert2 (Variablen sind lowerCamelCase) als Attribute definieren. Dann ein Konstruktor
Code:
public Widerstand(float wert1, float wert2)
erstellen und eine Methode zum Berechnen des ergebnis. Von der Klasse Widerstand erzeugst du dann eine ArrayList<Widerstand>.
Achja, es gibt auch eine Methode equalsIgnoreCase String (Java Platform SE 6) (edit: ah. hat ja schon der Vorposter geschrieben 😉).

edit2: in Zeile 36 solltest du ein else if machen
 
Zuletzt bearbeitet:
Ja okay, danke. Werds mal ausprobieren 🙂 aber mir is ein anderer fehler aufgefallen, und zwar, wenn man parallelschaltung wählt, gibt der nach dem ergebnis das "else out.println("bitte geben sie nur r oder p ein");" von der 2. if schleife aus. Wenn ich 2 else rein mach, gehts nicht, wenn ich das else nach der 1. schleife setz, gehts nicht und wenn ich ne 3. if bedingung mach, die sagt, dass wenn !eingabe.equalsIgnoreCase("r,p") ist, dann gehts auch nicht... hilfeee !

edit: also ich will jetz einfach nur, dass wenn kein r oder p eingegeben wird, dass ne fehlermeldung rauskommt
 
Zuletzt bearbeitet:
Da musst du ein
Code:
else if
benutzen:

Java:
if(a==b){
//...
} else if (a==c){
//...
} else {
// ...
}
 
ich verstehs doch noch nicht ganz mit dem ArrayList. Bzw...ich verstehs überhaupt nicht :/ wenn ihr mir mit meinem code das mal zeigen würde, wie das gemeint ist..muss ja nicht gleich alles sein, nur so ne kleine starthilfe oder so 🙁
 
Habs ja eigentlich schon fast erklärt. Hier nochmal ein Code-Schnipsel, an dem du dich orientieren könntest:

Java:
int count = scan.nextInt();
float[] values = new float[count];
// ...
for (int i = 0; i < count; i++) {
	System.out.println("Wert " + (i + 1) + ":");
	values[i] = scan.nextFloat();
}
 
hatte weng langeweile auf der Arbeit 😉. vielleicht hilft dir ja der Code ein bisschen weiter. So in der Art (ist jetzt eher quick&dirty) würde ich das machen.
Java:
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Widerstand {

	public static enum Type {PARALLEL, SERIAL};
	private float firstValue, secValue;
	private Type type;


	public Widerstand(float firstValue, float secValue, Type type) {
		this.firstValue = firstValue;
		this.secValue = secValue;
		this.type = type;
	}

	public float getFirstValue() {
		return firstValue;
	}

	public float getSecValue() {
		return secValue;
	}

	public float getResult() {
		// Berechnung in Abhängigkeit von type
		return 0.0f;
	}

	public static void main(String[] args) {
		List<Widerstand> list = new ArrayList<Widerstand>();
		SimpleScanner sscn = new SimpleScanner();

		System.out.println("Es gibt Parallelschaltung und Reihenschaltung");
		String input = sscn.getString("Wählen Sie R bzw. r für Reihenschaltung, P bzw. p für Parallelschaltung oder e bzw. E um die Ergebnisse anzuzeigen> ");      

		while (!input.equalsIgnoreCase("e")) {
			if (input.equalsIgnoreCase("p")) {
				System.out.println("Sie haben Parallelschaltung gewählt, geben sie nun die beiden Werte ein");
				list.add(new Widerstand(sscn.getFloat("Wert 1> "), sscn.getFloat("Wert 2> "), Widerstand.Type.PARALLEL));
			} else if (input.equalsIgnoreCase("r")) {
				System.out.println("Sie haben Reihenschaltung gewählt, geben sie nun die beiden Werte ein");
				list.add(new Widerstand(sscn.getFloat("Wert 1> "), sscn.getFloat("Wert 2> "), Widerstand.Type.SERIAL));
			} else {
				System.out.println("Sie haben keine gültige Auswahl getroffen");
			}
			input = sscn.getString("Wählen Sie R bzw. r für Reihenschaltung, P bzw. p für Parallelschaltung oder e bzw. E um die Ergebnisse anzuzeigen> ");
		}

		if (list.isEmpty()) {
			System.out.println("Es erfolgt keine Ausgabe, weil keine Widerstände definiert wurden");
		} else {
			for (Widerstand ws : list) {
				System.out.printf("Das Ergebnis der Werte %f und %f lautet %f", ws.getFirstValue(), ws.getSecValue(), ws.getResult());
			}
		}
	}
}

class SimpleScanner {

	private static Scanner scn;

	SimpleScanner() {
		scn = new Scanner(System.in);
	}

	String getString(String prompt) {
		System.out.print(prompt);
		return scn.next();
	}

	float getFloat(String prompt) {
		System.out.print(prompt);
		return scn.nextFloat();
	}
}
Berechnung habe ich mal weggelassen. Fand deine Rechnung weng umständlich und wenn ich jetzt probier den Physikunterricht von der 9ten aufzufrischen verkack ich das eh nur. kannst ja du dazu machen 😉

edit: die getter bzw. den Zugriff auf Type über Widerstand kannst du dir natürlich sparen, wenn du das in eine Klasse machst. Ich würde daraus eh 3 Klassen machen. Habe es jetzt einfach zum einfachen c&p und testen in eine gemacht.
 
Zuletzt bearbeitet:
wie kann man die werte dann verwenden, wenn ich int count = scan.nextInt();
float[] values = new float[count];
// ...
for (int i = 0; i < count; i++) {
System.out.println("Wert " + (i + 1) + ":");
values = scan.nextFloat();
}

verwende?
also die verschiedenen werte mit einer formel berechnen lassen
 
Ähm.. ???:L
Die Werte werden doch im Array values gespeichert, du kannst die einfach mit zB values[0] abrufen. Oder einfach in der for-Schleife mit values. Bin mir nicht sicher, ob das deine Frage beantwortet, aber was hat das denn mit dem ursprünglichen Thread zu tun?!
 

Zurück
Oben