从同一行

时间:2018-04-27 14:03:50

标签: java

我是新的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;
        }

    }

}

And this is the result

3 个答案:

答案 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,因此它超出范围。