gpt4 book ai didi

java - 在java中使用扫描器类输入

转载 作者:搜寻专家 更新时间:2023-10-31 20:00:57 25 4
gpt4 key购买 nike

我正在制作一个程序来将给定的整数减少到最简单的比率。但是在程序的子方法中通过 Scanner 类获取输入时发生错误。这是代码:

package CodeMania;

import java.util.Scanner;

public class Question5
{
public static void main(String args[])
{
Scanner sc=new Scanner(System.in);
int T=sc.nextInt();// number of test cases
sc.close();
if(T<1)
{
System.out.println("Out of range");
System.exit(0);
}
for(int i=0;i<T;i++)
{
ratio();//line 19
}

}
static void ratio()
{
Scanner sc1=new Scanner(System.in);
int N=sc1.nextInt();//line 26
if((N>500)||(N<1))
{
System.out.println("Out of range");
System.exit(0);
}
int a[]=new int[N];
for(int i=0;i<N;i++)
{
a[i]=sc1.nextInt();
}
int result = a[0];
for(int i = 1; i < a.length; i++)
{
result = gcd(result, a[i]);
}
for(int i=0;i<N;i++)
{
System.out.print((a[i]/result)+" ");
}
sc1.close();
}
static int gcd(int a, int b)
{
while (b > 0)
{
int temp = b;
b = a % b;
a = temp;
}
return a;
}
}

错误是——

Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Scanner.java:862)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextInt(Scanner.java:2117)
at java.util.Scanner.nextInt(Scanner.java:2076)
at CodeMania.Question5.ratio(Question5.java:26)
at CodeMania.Question5.main(Question5.java:19)

在这里,我在 main 函数中使用了 2 个单独的扫描仪对象 sc,在 ratio 函数中使用了 sc1 从控制台获取输入。但是,如果我在类范围内声明一个公共(public)静态类型 Scanner 对象,然后在整个程序中仅使用一个 Scanner 对象来获取输入,那么程序将按要求正常工作,不会出现错误。

为什么会这样……?

最佳答案

此错误的原因是在扫描器上调用 .close() 也会关闭 inputStream System.in,但实例化一个新的扫描器不会重新打开它。

您需要在方法参数中传递单个 Scanner,或者将其设为静态全局变量。

关于java - 在java中使用扫描器类输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34508824/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com