2017-12-06 10 views
1

私はJavaプログラミングには新しく、ギアとRPMの関係で自動車の速度を計算するプログラムを作成したい。私は最初の範囲外の例外を解決した後にbとcのいずれかをaに掛けることができます

私はさまざまなサイトやトピックを検索しましたが、何かを見つけることができませんでした。多分答えはそこにありましたが、私はそれを見ていませんでした:D。

例えば少しではなく、完全なプログラム:

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"); 
    } 
}  

私は、私はあなたが私にMPHを表示するには、歯車1またはギア2かなどPRM、パイ、乗じたギア3に入ることができることをしたい尋ね同様。 私はあなたも配列でこれを行うことができると読んでいますが、私はそれが今のところ行こうと思っています。

私があなたを助けてくれることを願っています。

UPDATE:私は今、あなたの提案でそれを少しきれいにするためにそれを望むよう

私はそれが働いてしまいました。今、私は境界外のエラーをどのように回避するかを理解する必要がありますが、どのように(時間を捜して)それを理解し、速度を全体の数値で取得するのは難しいです。 これまでのご協力ありがとうございます。

これは私の現在のプログラムである:私はより多くを検索し、避けるためにOutOfBoundExcenptionためのいくつかのビデオを見て、1よりも私が入力あまりできないので、私は解決策を発見したしている

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

私のプログラムには6以上のものが失敗することはありません。 唯一のことは、whoule sequenzを通過するのではなく、間違ったchoiseを行った後に別の番号を入力するようにユーザーに指示する方法です。

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

私の最初のアドバイスは、Javaコーディング規則をチェックすることです。http://www.oracle.com/technetwork/java/codeconventions-135099.htmlあなたのコードでは、小文字で始まる変数を設定し、次にcamelCaseスタイルを採用する必要があります。 –

+1

比率に3つの異なる変数を使用する代わりに、* array *に配置します。次に、ユーザーは「1」、「2」または「3」を選択でき、その値(マイナス1)を配列のインデックスとして使用して比率を得ることができます。 –

+0

その配列を使用すると、単純にanArray [] * RPMを掛けることはできますか、それとももっと追加する必要がありますか? – Marvin

答えて

2

あなたは、配列を使用しないことを断固しているなら、あなたは、switchステートメントを使用することができます。

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

などなどあなたがデフォルトをも必要があります:それは実行しています入力がケースの1つに適合しないときはいつでも(例えば、エラーを出力する)。

あなたはこのようにそれを行うことができ、アレイを使用した場合:あなたはギアから1を減算する必要が

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

注:

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

次に、あなたがそうのようMPHを計算することができ配列のインデックスは0から始まるからです。インデックスの半分を持つことができないため、ギア変数をint(nextInt()を使用)に変更する必要があると思います。

他のコメント者からは、悪い習慣に入る前に、Javaの規約(特に変数の名前付け)を読むことを強くお勧めします。

+2

いくつかの例をありがとう、私は家にいるときにそれを試してみます。 – Marvin

+1

もう一度おねがいします。マット、私はあなたの素敵な例で私はこの実行を得ることができると思います。もしそうなら、私はここにそのコードを再び置くでしょう:)。 – Marvin

+0

これらの解決策が効果を発揮した場合は、回答を受け入れて(緑色のチェックマーク)、質問を終了してください。 – Nothe

関連する問題