我有一项作业,其内容如下 - 读取2n个数字作为输入,其中第一个数字表示键,第二个数字表示值。这两个数字都是整数类型。
编写函数getAverageOfOdd以找出其键由奇数表示的所有值的平均值。假设平均值是一个int而不是十进制数。将平均值作为输出返回。在UserMainCode类中包含此函数。
在Class 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)
可能是什么原因?
答案 0 :(得分:1)
问题是您在Scanner
上打开了两个System.in
个实例,并且它们互相干扰。第一个扫描器可能会缓冲一些输入,第二个扫描器没有任何内容,导致它抛出异常。
您应该在Scanner
中打开一个main
并将其传递给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;
}
答案 1 :(得分:0)
NoSuchElementException由Enumeration的nextElement方法抛出,表示枚举中没有更多元素。
http://docs.oracle.com/javase/7/docs/api/java/util/NoSuchElementException.html
这个怎么样:
if(input.hasNextInt() )
number1 = input.nextInt(); // if there is another number
else
number1 = 0;
关于SO的这个问题回答了你的问题。请参考:NoSuchElementException with Java.Util.Scanner