gpt4 book ai didi

java - 使用 Scanner 类扫描 int 时出错

转载 作者:行者123 更新时间:2023-11-30 06:41:50 27 4
gpt4 key购买 nike

我有一项作业要做,内容如下 -读取 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/

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