我有一项作业要做,内容如下 - 读取 2n 个数字作为输入,其中第一个数字代表键,第二个数字代表值。这两个数字都是整数类型。
编写一个函数 getAverageOfOdd 来找出键由奇数表示的所有值的平均值。假设平均值是整数,而不是小数。返回平均值作为输出。将此函数包含在 UserMainCode 类中。
在 Main 类中,它将用于读取 2n 个数字并构建 HashMap 。调用 UserMainCode 中存在的静态方法。
import java.util.HashMap;
import java.util.Iterator;
import java.util.Scanner;
import java.util.Set;
public class MasteringHashmap
{
public static void main(String args[])
{
String number;
Scanner sc = new Scanner(System.in);
int n=sc.nextInt();
//get next 2n numbers i.e n key value pairs using getValues() function into a hashmap
HashMap<Integer,Integer> map = getValues(n);
int out = UserMainCode.getAverageOfOdd(map);
System.out.println(out);
//fill your code here
}
static HashMap<Integer,Integer> getValues(int n)
{
Scanner sc = new Scanner(System.in);
HashMap<Integer,Integer> hm = new HashMap<Integer,Integer>();
for(int i=1;i<=n;i++)
{
int k = sc.nextInt();
int v = sc.nextInt();
hm.put(k, v);
}
return hm;
}
}
class UserMainCode {
public static int getAverageOfOdd(HashMap<Integer,Integer>h1)
{
//fill your code here
Set<Integer> keys = h1.keySet();
Iterator<Integer> it = keys.iterator();
int key,count=0,sum=0;
while(it.hasNext())
{
if((key=it.next())%2!=0)
{
count++;
sum+=h1.get(key);
}
}
return sum/count;
//return 0;
}
}
当我在笔记本电脑上运行此代码时,它运行良好,但不知何故,在线法官响应以下错误
Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Scanner.java:907)
at java.util.Scanner.next(Scanner.java:1530)
at java.util.Scanner.nextInt(Scanner.java:2160)
at java.util.Scanner.nextInt(Scanner.java:2119)
at MasteringHashmap.main(MasteringHashmap.java:14)
可能是什么原因?
最佳答案
问题是您在 System.in
上打开两个 Scanner
实例,并且它们相互干扰。第一个扫描器可能缓冲了一些输入,没有为第二个扫描器留下任何内容,导致它抛出异常。
您应该在 main
中打开一个 Scanner
并将其传递给 getValues
方法:
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
//get next 2n numbers i.e n key value pairs using getValues() function into a hashmap
HashMap<Integer, Integer> map = getValues(n, sc);
...
}
static HashMap<Integer, Integer> getValues(int n, Scanner sc) {
HashMap<Integer, Integer> hm = new HashMap<Integer, Integer>();
for (int i = 1; i <= n; i++) {
int k = sc.nextInt();
int v = sc.nextInt();
hm.put(k, v);
}
return hm;
}
关于java - 使用 Scanner 类扫描 int 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44268517/