2017-12-06 8 views
1

Ich bin neu in Java-Programmierung und ich möchte ein Programm zur Berechnung der Geschwindigkeit eines Autos in Bezug auf den Gang und die RPM machen .Wie kann ich a mit entweder b oder c multiplizieren, nachdem ich meine anfängliche out-of-bounds Ausnahme

Ich suchte verschiedene Websites oder Themen, konnte aber nichts finden. Vielleicht war die Antwort da, aber ich habe es nicht gesehen: D.

ein wenig, aber nicht vollständiges Programm zum Beispiel:

import java.util.Scanner; 

public class Speed { 
    public static void main(String[] args) { 

     double Gear, MPH, RPM 
     double TireDia = 78; 
     double Pi = 3.1415; 
     double RatioGearOne = 3.4; 
     double RatioGearTwo = 2.5; 
     double RatioGearThree = 1.6; 

     Scanner input = new 
     Scanner (System.in); 

     System.out.println("What gear is it in?"); 
     Gear = input.nextDouble(); 

     System.out.println("How many RPM are shown?"); 
     RPM = input.nextDouble(); 

     MPH = Gear * RPM * Pi * TireDia * 60/1000000; 
     System.out.println("The car is going: " + MPH + " MPH"); 
    } 
}  

Wie ich schon gefragt, ich will, dass Sie Gang 1 oder Gear 2 oder Getriebe 3 multipliziert mit PRM, Pi, usw. eingeben können mir die MPH angezeigt werden . Ich lese, dass Sie dies mit einem Array auch tun können, aber ich möchte es Linie, dass für jetzt, denn ich verstehe es ein bisschen mehr zu der Zeit.

Ich hoffe, Sie können mir helfen.

UPDATE:

Ich habe es funktioniert, wie ich es für jetzt wollen und reinigte ihn ein wenig mit Ihren Vorschlägen. Jetzt muss ich herausfinden, wie ich den "out of bounds" -Fehler umgehen kann, aber ich habe es nicht herausgefunden, wie, (suche jetzt nach Stunden) und bekomme die Geschwindigkeit in einer ganzen Zahl. Danke für die Hilfe bis jetzt.

Dies ist mein aktuelles Programm:

import java.util.Scanner; 

public class geschwindigkeitAuto { 
public static void main(String[] args) { 

    double gang, kmh, upm; 

    Scanner input = new Scanner (System.in); 

    double[] übersetzungen = {3.7, 1.95, 1.3, 1.03, 0.84, 0.68}; 

    System.out.println("Welcher Gang ist Eingelegt? (wähle 1 bis 6): "); 
    gang = input.nextInt(); 

    System.out.println("Wieviele Umdrehungen werden angezeigt? (wähle 0-6500): "); 
    upm = input.nextInt(); 

    kmh = upm/übersetzungen[(int)gang -1]/3.62 * 68 * 3.141 * 60/100000; 
    System.out.print("Die Geschwindigkeit des Autos beträgt: " + kmh + " kmh"); 
} 
} 

UPDATE 2

Ich habe mehr gesucht und sah einige Videos für die OutOfBoundExcenption zu vermeiden, und ich habe eine Lösung gefunden, so dass ich nicht eingegeben weniger als 1 oder mehr als 6 zu meinem Programm, ohne zu versagen. Die einzige Sache ist jetzt, wie man dem Benutzer sagt, eine andere Zahl einzugeben, nachdem er eine falsche Wahl getroffen hat, anstatt die erste Sequenz durchzugehen.

import java.util.Scanner; 

public class geschwindigkeitAuto { 
public static void main(String[] args) { 
    double gang, kmh = 0, upm; 

    Scanner input = new Scanner (System.in); 

    double[] übersetzungen = {3.7, 1.95, 1.3, 1.03, 0.84, 0.68}; 

    System.out.println("Welcher Gang ist Eingelegt? (wähle Gang 1 bis 6): "); 
    gang = input.nextInt(); 

    System.out.println("Wieviele Umdrehungen werden angezeigt? (wähle 0-6500): "); 
    upm = input.nextInt(); 

    try { 
     kmh = upm/übersetzungen[(int)gang -1]/3.62 * 68 * 3.141 * 60/100000; } 
    catch(ArrayIndexOutOfBoundsException ex) { 
     System.out.println("Du hast einen nicht vorhandenen Gang gewählt! " 
     + "Es gibt nur 6 Gänge zur Auswahl" + "\n"); } 

    System.out.println("Die Geschwindigkeit des Autos beträgt: " + kmh + " kmh" + "\n"); 

    System.out.print("Noch eine Berechnung? (J/N) : "); 
    System.out.printf("\n"); 
    String var= input.next(); 
     if(var.equalsIgnoreCase("J")) { 
     main(null); 
    } 
} 
} 
+1

Mein erster Ratschlag wäre, Java Kodierungskonventionen zu überprüfen: http://www.oracle.com/technetwork/java/codeconventions-135099.html.In Ihrem Code sollten Sie die Variablen so einstellen, dass sie mit Kleinbuchstaben beginnen, und dann einen CamelCase-Stil übernehmen. –

+1

Anstatt drei verschiedene Variablen für die Verhältnisse zu verwenden, setzen Sie sie in ein * Array *. Dann kann der Benutzer "1", "2" oder "3" auswählen, und Sie können diesen Wert (minus eins) als Index in das Array verwenden, um das Verhältnis zu erhalten. –

+0

Also, wenn ich dieses Array verwende, kann ich einfach anArray [] * RPM multiplizieren, oder muss ich mehr hinzufügen? – Marvin

Antwort

2

Wenn Sie unnachgiebig sind, dass Sie nicht ein Array verwenden möchten, dann können Sie eine switch-Anweisung verwenden:

switch(gear) { 
    case 1: ratioGearOne * ... 
    case 2: ratioGearTwo * ... 
    ... 
} 

etc etc. Sie auch eine Standard benötigen: das laufen gelassen wenn die Eingabe nicht einem der Fälle entspricht (z. B. einen Fehler ausgeben).

Wenn Sie ein Array verwenden, so könnte man es so machen:

double[] ratios = { 3.4, 2.5, 1.6 } 

Dann sind Sie wie so die MPH berechnen konnte:

MPH = ratios[gear - 1] * ... 

Hinweis Sie ein vom Getriebe abziehen müssen da Array-Indizes von 0 ausgehen. Ich glaube, Sie müssten auch Ihre Zahnradvariable auf einen int (verwenden Sie nextInt()) ändern, da Sie keinen halben Index haben können.

Wie andere Kommentatoren gesagt haben, würde ich dringend empfehlen, Java-Konventionen zu lesen (besonders variable Benennung), bevor man in schlechte Angewohnheiten gerät.

+2

Danke für einige Beispiele, ich werde das versuchen, wenn ich zu Hause bin. – Marvin

+1

Nochmals vielen Dank Matt, ich denke mit deinem netten Beispiel werde ich es schaffen. Wenn es so ist, werde ich diesen Code hier wieder einfügen :). – Marvin

+0

Bitte akzeptieren Sie die Antwort (grünes Häkchen), um die Frage zu beenden, ob diese Lösungen für Sie funktionierten. – Nothe

Verwandte Themen