跟踪每个令牌

时间:2013-12-09 03:43:21

标签: java object file-processing

我需要解决以下问题:编写一个名为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()) {

如果是第一个令牌,我就失去了第一个令牌......

我该怎么办?

3 个答案:

答案 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);
}