我需要解决以下问题:编写一个名为tokenStats的方法,该方法接受包含一系列标记的Scanner作为参数。它应该打印出所有合法整数标记的总和,所有合法实数但不是整数的标记的总和,以及任何类型的标记总数。例如,如果名为Scanner的数据包含以下标记:
3 3.14 10 squid 10.x 6.0
然后调用tokenStats(data)
;应打印以下输出:
整数:13
实数:9.14
总代币:6
如果扫描仪没有令牌,则应打印方法:
整数:0
实数:0.0
总代币:0
所以,这是我的问题。我试过用
while (input.hasNext()) {
if (input.hasNextInt()) {
这会创建一个无限循环,
但如果我使用
while (input.hasNext()) {
input.next();
if (input.hasNextInt()) {
如果是第一个令牌,我就失去了第一个令牌......
我该怎么办?
答案 0 :(得分:0)
我建议你检查一下..这涵盖了你所有的场景
int totalint =0;
float totalfloat=0 ;
int count=0;
while(input.hasNext())
{
String next = input.next();
int n; float f;
try{
if(next.contains(".")
{
f= Float.parseFloat(next);
totalfloat += f;
}
else{
n= Integer.parseInt(next);
totalint +=n;
}
}
catch(Exception e){ /*not int nor a float so nothing*/ }
count++;
}
答案 1 :(得分:0)
为了确定文件中整数的数量,我建议你做这样的事情
将以下变量添加到您的代码中
ArrayList<Integer> list = new ArrayList<Integer>();
int EntryCount = 0;
int IntegerCount =0;
然后,当浏览文件输入时,尝试这样的东西是s是扫描仪的实例
while (s.hasNext()) {
if(s.hasNextInt() == true){
int add =s.nextInt();
System.out.println(add);
list.add(add);
IntegerCount++;
}
EntryCount++;
}
然后为了找出所有整数的总和,你将遍历数组列表。
答案 2 :(得分:-1)
public static void tokenStats(Scanner input) {
int integers = 0;
double real = 0.0;
int tokens = 0;
while (input.hasNext()) {
if (input.hasNextInt()) {
integers+= input.nextInt();
} else if (input.hasNextDouble()) {
real+= input.nextDouble();
} else {
input.next();
}
tokens++;
}
System.out.println("integers: " + integers);
System.out.println("real numbers: " + real);
System.out.println("total tokens: " + tokens);
}