如何修复此代码的运行时错误?

时间:2018-05-04 11:46:00

标签: java

我是java的新手。我正在尝试使用java语言解决以下问题。

  

您要编写一个程序,将分数降低到最低   术语

     

输入

     

输入文件的第一行给出了测试用例数N(&lt; =   20)。以下N行中的每一行包含形式的分数   p = q(1 <= p; q <= 10 ^ 30)。

     

输出

     

对于每个测试用例,在简化后输出分数。

     

示例输入

4
1 / 2
2 / 4
3 / 3
4 / 2
     

示例输出

1 / 2
1 / 2
1 / 1
2 / 1

我的小方法是:

package bigfraction;
import java.math.*;
import java.util.*;
public class Main {

    public static void main(String[] args) {
                Scanner num = new Scanner(System.in);
                int n = num.nextInt();
                int i;
                for(i=1;i<=n;i++){
                    Scanner s = new Scanner(System.in);
                    String input1 = s.next();
                    String d1 = s.next();
                    String input2 = s.next();

                    // convert the string input to BigInteger
                    BigInteger val1 = new BigInteger(input1);
                    BigInteger val2 = new BigInteger(input2);

                    BigInteger gcd = val1.gcd(val2);
                    BigInteger q1 = val1.divide(gcd);
                    BigInteger q2 = val2.divide(gcd);
                    System.out.println(q1+" / "+q2);
                }
    }

}

当我在网上判断提交确切的代码时,我收到运行时错误。这是我第一次用java语言提交。我无法修复运行时错误。

3 个答案:

答案 0 :(得分:3)

您的代码很好,只是您无法使用system.in读取文件。谷歌如何正确地将您的样本输入从文件解析到您的代码中(也许您可以使用地图或类似的东西,我也建议删除输入文件中的空格)或接受来自键盘的输入作为系统。 in接受来自键盘的输入。

在接受之前,还要尝试打印正确的消息,接下来要接受的值。

还有一件事是你不需要多个扫描仪对象,你可以根据需要从单个扫描仪接受尽可能多的输入。此外,变量d1似乎未使用,如果您不使用它,请将其删除

答案 1 :(得分:0)

我刚刚解决了解决方案。现在已被接受。 我接受的代码:

import java.io.IOException;
import java.math.*;
import java.util.*;


public class Main {
   public static void main(String[] args) throws Exception{       

            Scanner num = new Scanner(System.in);
                int n = num.nextInt();
                String extra;
                int i;
                for(i=1;i<=n;i++){
                    extra = num.nextLine();
                    String input1 = num.next();
                    String d1 = num.next();
                    String input2 = num.next();

                    // convert the string input to BigInteger
                    BigInteger val1 = new BigInteger(input1);
                    BigInteger val2 = new BigInteger(input2);

                    BigInteger gcd = val1.gcd(val2);
                    BigInteger q1 = val1.divide(gcd);
                    BigInteger q2 = val2.divide(gcd);
                    System.out.println(q1+" / "+q2);
                }
   }
}

答案 2 :(得分:-1)

正如Lino评论的那样,只要您以任务指定的格式编写派系,这就可以正常工作。如果你在分数之间使用空格(2/4而不是2/4),你将得到简化。