Spezifischer Widerstand

Dilay123

Mitglied
Hey Leute,

ich muss halt ein Programm schreiben was den Spezifischen Widerstand ausrechnet und es gibt eine Formel dafür (R=p*l/A ) wo ich P (Rho) angeben muss und für Rho kann man verschiedene Stoffe einsetzen zb Aluminium hat 0,023 oder Eisen hat 0,097. Ich hab halt versucht eine Auswahlmöglichkeit mit einer switch zu machen, aber wenn ich es ausführen möcht rechnet es leider R aus sondern gibt mir nur die Zahl des Stoffes an.

Ich würde mich auf eine schnelle Rückmeldung von euch freuen, denn ich muss es morgen schon abgeben.

LG
Dilay

Hier ist mein Programm:

Java:
import java.util.Scanner;
public class SpezifischerWiderstand {

    public static void main(String[] args) {
        
        double r=0;  //Leitwiderstand
        double a=0;  //Querschnittsfläche
        double l=0;  //Länge des Leiters
        double p=0;  //spezifischer Widerstand Rho
        String stoff="";
        Scanner scn = new Scanner(System.in);
        
        try {
            
            System.out.println("Länge des Leiters angeben: ");
            l=scn.nextDouble();
            
            System.out.println("Querschnittsfläche angeben:");
            a=scn.nextDouble();
            
            System.out.println("Wählen Sie einen Stoff:\n(a)Aluminium\n(b)Eisen\n(c)Gold\n(d)Kupfer\n(e)Silber");
            stoff = scn.next();
            
            
            switch(stoff)
            {
                case "a" :System.out.println("a)Aluminium\n");
                         System.out.println("0,028\n");
                         p=scn.nextDouble();
                         break;
                case "b":System.out.println("b)Eisen:\n");
                         System.out.println("0,097\n");
                         p=scn.nextDouble();
                         break;
                case "c":System.out.println("c)Gold:\n");
                         System.out.println("0,023\n");
                         p=scn.nextDouble();
                         break;
                case "d":System.out.println("d)Kupfer:\n");
                         System.out.println("0,017\n");
                          p=scn.nextDouble();
                        break;
                case "e":System.out.println("e)Silber:\n");
                         System.out.println("0,016\n");
                         p=scn.nextDouble();
                         break;
            }
            r=(p*l/a);
            System.out.println("R="+r);
            }catch (Exception e)
        
            {
                System.out.println("Falsche Eingabe");
            }
            scn.close();
        }

    }
 

httpdigest

Top Contributor
Du fragst in jedem switch-case nochmal eine Zahl (double) vom Nutzer ab (per p=scn.nextDouble();), ohne, dass man sieht, dass man hier noch was eingeben muss. Der Prozess wartet also dort noch auf eine Eingabe.
Wenn man hier noch eine Zahl eingibt, dann erscheint auch das Gesamtergebnis (R=....).
 

White_Fox

Top Contributor
Die vielen p=scn.nextDouble(); kannst du vor dein Switchstatement stellen und wenn du dem Benutzer noch eine eindeutige Aufforderung zu einer Eingabe gibst, sollte es funktionieren.

Edit: Da ich auf korrekte und eindeutige Bezeichnung Wert lege und mich mit E-Technik ein wenig auskenne, triggert mich das hier doch sehr:
//Leitwiderstand
Es gibt einen Leitwert und einen Leiterwiderstand. Beides ist nicht dasselbe, du meinst letzteres. (Ist aber nur ein kleiner Schönheitsfehler, nix für ungut.)
 

iwer1

Mitglied
Also das würde bei mir funktionieren
Java:
import java.util.Scanner;

public class SpezifischerWiderstand {
    public static void main(String[] args) {
        double r = 0; // Leitwiderstand
        double a = 0; // Querschnittsfläche
        double l = 0; // Länge des Leiters
        double p = 0; // spezifischer Widerstand Rho
        String stoff = "";
        try (Scanner scn = new Scanner(System.in)) {
            System.out.println("Länge des Leiters angeben: ");
            l = scn.nextDouble();

            System.out.println("Querschnittsfläche angeben:");
            a = scn.nextDouble();

            System.out.println("Wählen Sie einen Stoff:\n(a)Aluminium\n(b)Eisen\n(c)Gold\n(d)Kupfer\n(e)Silber");
            stoff = scn.next();

            switch (stoff) {
                case "a":
                    System.out.println("a)Aluminium");
                    System.out.println("0,028\n");
                    p = 0.028;
                    break;
                case "b":
                    System.out.println("b)Eisen:");
                    System.out.println("0,097\n");
                    p = 0.097;
                    break;
                case "c":
                    System.out.println("c)Gold:");
                    System.out.println("0,023\n");
                    p = 0.023;
                    break;
                case "d":
                    System.out.println("d)Kupfer:");
                    System.out.println("0,017\n");
                    p = 0.017;
                    break;
                case "e":
                    System.out.println("e)Silber:");
                    System.out.println("0,016\n");
                    p = 0.016;
                    break;
                default:
                    System.out.println("Falsche Eingabe");
                    return;
            }
            r = (p * l / a);
            System.out.println("R=" + r);
        }
    }
}

Code:
Länge des Leiters angeben:
20
Querschnittsfläche angeben:
0,5
Wählen Sie einen Stoff:
(a)Aluminium
(b)Eisen
(c)Gold
(d)Kupfer
(e)Silber
a
a)Aluminium
0,028

R=1.12
 

Blender3D

Top Contributor
Ich hab halt versucht eine Auswahlmöglichkeit mit einer switch zu machen, aber wenn ich es ausführen möcht rechnet es leider R aus sondern gibt mir nur die Zahl des Stoffes an.
Du könntest mit Arrays und Funktionen arbeiten.
[CODE lang="java" title="SpezifischerWiderstand" highlight="7-20"]public class SpezifischerWiderstand {
private static final Scanner input = new Scanner(System.in);
private static final String[] metal = { "Aluminium", "Eisen", "Gold", "Kupfer", "Silber" };
private static final double[] resistivityValue = { .028, .097, .023, .017, .016 };

public static void main(String[] args) {
double resitance = 0; // Leitwiderstand
double sectionalArea = 0; // Querschnittsfläche
double conductorLenght = 0; // Länge des Leiters
double resistivity = 0; // spezifischer Widerstand Rho

conductorLenght = inputDouble("Laenge des Leiters angeben");
sectionalArea = inputDouble("Querschnittsflaeche angeben");
int id = inputMetal();
resistivity = resistivityValue[id];
resitance = (conductorLenght * resistivity) / sectionalArea;
System.out.println(String.format("Laenge \t%.3f\nQuerschnitt\t%.3f\n%s \t%.3f", conductorLenght,
sectionalArea, metal[id], resistivity));
System.out.println("Widerstand = " + resitance);
input.close();
}

private static String getMetallMenuString() {
String menu = "Wählen Sie einen Stoff:\n";
for (int i = 0; i < metal.length; i++)
menu += "(" + (char) ('a' + i) + ")" + metal + "\n";
return menu;
}

private static int inputMetal() {
String menu = getMetallMenuString();
boolean ok = false;
char c;
do {
System.out.println(menu);
String str = input.next();
c = str.charAt(0);
if (c < 'a' || c >= ('a' + metal.length))
System.out.println("Bitte einen gueligen Menuepunkt eingeben!");
else
ok = true;
} while (!ok);
return c - 'a';
}

private static double inputDouble(String label) {
double value = 0;
boolean ok = false;
do {
try {
System.out.print(label + ": ");
value = Double.parseDouble(input.next());
ok = true;
} catch (NumberFormatException e) {
System.out.println("Bitte nur Zahlen eingeben!");
}
} while (!ok);
return value;
}
}[/CODE]
 

Ähnliche Java Themen

Neue Themen


Oben