在解决了我的初始越界异常后,如何将a与b或c相乘

时间:2017-12-06 10:52:51

标签: java arrays indexoutofboundsexception

我是Java编程的新手,我想制作一个计算与齿轮和RPM相关的汽车速度的程序。

我搜索了不同的网站或主题,但找不到任何东西。也许答案就在那里,但我还没有看到它: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");
    }
}    

就像我问的那样,我想要你可以输入Gear 1或Gear 2或Gear 3乘以PRM,Pi等来显示MPH。 我读过你也可以用数组做这个,但我现在想把它排成一行,因为我当时更了解它。

我希望你能帮助我。

更新:

我现在按照我的意愿工作,并根据你的建议清理了一下。现在我需要弄清楚我是如何解决越界错误的,但还没弄明白如何,(现在搜索几小时)并获得整数的速度。 到目前为止,感谢您的帮助。

这是我目前的计划:

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

更新2

我已经搜索了更多并观看了OutOfBoundExcenption的一些视频以避免我找到了一个解决方案,这样我就可以在不失败的情况下输入少于1或大于6的程序。 现在唯一的事情是,如何告诉用户输入错误的选择后输入一个不同的数字,而不是通过whoule序列输入。

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 个答案:

答案 0 :(得分:2)

如果您坚持不想使用数组,那么可以使用switch语句:

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

等等。您还需要一个默认值:只要输入不符合其中一种情况(例如打印错误),就会运行默认值。

如果您要使用数组,可以这样做:

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

然后你可以像这样计算MPH:

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

注意你需要从齿轮中减去一个,因为数组索引从0开始。我相信你还需要将你的齿轮变量改为int(使用nextInt()),因为你不能有半个索引。

正如其他评论者所说,我强烈建议您在遇到任何不良习惯之前阅读Java约定(特别是变量命名)。