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

标签 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 的数据而不会失败。 现在唯一的问题是,如何告诉用户在做出错误选择后输入不同的数字,而不是拳头浏览整个序列。

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

最佳答案

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

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

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

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

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

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

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

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

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

关于java - 在解决了最初的越界异常后,如何将 a 与 b 或 c 相乘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47672533/

相关文章:

java - build.gradle : compile group vs compile, buildscript,类路径

java - 替换包含正则表达式的行

javascript - Array.filter 返回空数组

c - 使用 C 覆盖数组中的字符

java.lang.ArrayIndexOutOfBoundsException : 49 error - NFA Java 异常

Java try catch 不处理 IndexOutOfBoundsException

java - (索引越界)我用java写了一个刽子手游戏程序

java - R.java 不包含 IntelliJ Idea 12 中的新资源文件

java - 查找 AAR 依赖项

javascript - JavaScript 数组的 bool 计算