我是新的Java和编程。在我正在参加的课程中,我遇到了问题,任何帮助都会受到赞赏。我们正在覆盖catch块,程序需要在同一行读取两个整数并将它们分开。两个catch块除以零而不输入数字。我遇到的问题,我无法让程序正确读取两个整数输入。
package chapter9problem2;
import java.util.Scanner;
public class Chapter9Problem2 {
public static void main(String[] args) {
Scanner keyboard = new Scanner(System.in);
boolean done = false;
while (!done)
{
try{
System.out.println("Enter two numbers. Please leave a space between the numbers. I will compute the ratio.");
String input = keyboard.nextLine();
String[] numbersStr = input.split(" ");
int[] numbers = new int[ numbersStr.length ];
for ( int i = 0; i < numbersStr.length; i++ )
{
numbers[i] = Integer.parseInt( numbersStr[i] );
}
System.out.println("");
System.out.println("The ratio r is: "+(numbers[1]/numbers[2]));
}
catch (ArithmeticException e)
{
System.out.println("There was an exception: Divide by zero... Try again.");
}
catch (Exception e) {
System.out.println("You must enter an Integer. ");
}
continue;
}
}
}
答案 0 :(得分:3)
数组的索引是从0开始,而不是1.因此,要获取数组的第一个元素,必须访问元素0(在您的情况下为numbers[0]
)。因此这一行
System.out.println("The ratio r is: "+(numbers[1]/numbers[2]));
应该阅读
System.out.println("The ratio r is: "+(numbers[0]/numbers[1]));
还要注意整数除法轮。因此,从您发布的示例中,将10
除以20
的结果为0
。这可能不是您想要的,因为您使用的是术语比率。要获得真实比率,您需要将其中一个数字转换为double
。然后上面的行成为
System.out.println("The ratio r is: "+((double) numbers[0]/numbers[1]));
This question有更多详情。
答案 1 :(得分:2)
这里的问题是您正在尝试访问号码[1]和号码[2]。
应为数字[0]和数字[1]
System.out.println("The ratio r is: "+(numbers[0]/numbers[1]));
答案 2 :(得分:0)
System.out.println("The ratio r is: "+(numbers[0]/numbers[1]));
这是正确的代码,你已经将索引编写为1和2,因此它超出范围。