Java scanner类,用于计算我的双精度和非双精度

Java scanner类,用于计算我的双精度和非双精度,java,double,java.util.scanner,Java,Double,Java.util.scanner,我有一个问题,我被要求从一个文件中读取令牌并打印出三个值:是数字的令牌数(双倍)、不是数字的令牌数以及数字的总和。就这些价值观 我已经设法读取了文本文件,并且能够根据它们是否为双倍来区分它们,但是我在构建输出时遇到了问题,目前,输出只是列表,除了非双倍的文本文件在以下位置列出外: 1 2 3 one two three z 1.1 zz 2.2 zzz 3.3 zzzz 我的代码如下所示: import java.util.Scanner; import j

我有一个问题,我被要求从一个文件中读取令牌并打印出三个值:是数字的令牌数(双倍)、不是数字的令牌数以及数字的总和。就这些价值观

我已经设法读取了文本文件,并且能够根据它们是否为双倍来区分它们,但是我在构建输出时遇到了问题,目前,输出只是列表,除了非双倍的文本文件在以下位置列出外:

    1 2 3 one two three
    z 1.1 zz 2.2 zzz 3.3 zzzz
我的代码如下所示:

     import java.util.Scanner;
     import java.io.File;
     import java.io.FileNotFoundException;


     public class Lab1 {

        public static void main(String[] args) {

     Scanner in = null;

     try {
         in = new Scanner(new File("data.txt"));
     } catch (FileNotFoundException e) {
         System.err.println("failed to open data.txt");
         System.exit(1);
     }

    /**
     * parse file token by token
     */

     while (in.hasNext()) {
         String token = in.next();
    // if it's a Double
         try {
             double d = Double.parseDouble(token);
             System.out.println(+d);
             continue;
     } 
         catch (NumberFormatException e) {

         // It's not a double:

             System.out.println("Not a double");

     }
   }
}

    }
这是我的输出:

    1.0
    2.0
    3.0
    Not a double
    Not a double
    Not a double
    Not a double
    1.1
    Not a double
    2.2
    Not a double
    3.3
    Not a double
当我希望输出为以下内容时:

    6 7 12.6
它分别对应于双精度数、非双精度数和双精度和

如果我的措辞有误,请原谅。只是想修复我的输出

提前谢谢

你需要

  • main
    函数顶部定义变量,以记住当前的双倍计数, 非双倍,以及双倍的总和

    int doubles = 0;
    int nonDoubles = 0;
    double sumOfDoubles = 0.0;
    
  • 每次读取文件时,将其添加到double/non-double/sum

    while (in.hasNext()) {
        String token = in.next();
        try {
            // try to convert string to double
            double d = Double.parseDouble(token);
            doubles += 1;
            sumOfDoubles += d;
        } catch (NumberFormatException e) {
            // conversion failed - it's not a double
            nonDoubles += 1;
        }
    }
    
  • 主功能的末尾打印总计数。请注意,
    %.1f
    截断为小数点后一位

    System.out.printf("%d %d %.1f", doubles, nonDoubles, sumOfDoubles);
    

  • 由于您已经成功地检测到输入何时为双精度输入,何时不是双精度输入,因此您可以在满足每种情况时分别增加计数器,并在读取完输入后显示输出。例如:

     import java.util.Scanner;
     import java.io.File;
     import java.io.FileNotFoundException;
    
    
     public class Lab1 {
    
        public static void main(String[] args) {
    
          Scanner in = null;
    
          try {
            in = new Scanner(new File("data.txt"));
          } catch (FileNotFoundException e) {
            System.err.println("failed to open data.txt");
            System.exit(1);
          }
    
       /**
        * parse file token by token
        */
    
         // Added lines of code
         int noOfDoubles = 0;
         int noOfNonDoubles = 0;
    
          while (in.hasNext()) {
            String token = in.next();
            // if it's a Double
            try {
              double d = Double.parseDouble(token);
              System.out.println(+d);
              noOfDoubles++;
              continue;
            } 
             catch (NumberFormatException e) {
    
             // It's not a double:
    
               System.out.println("Not a double");
               noOfNonDoubles++;
    
             }
          }
    
         System.out.println("No of doubles: " + noOfDoubles + ", " +
             "No of non-doubles: " + noOfNonDoubles);
       }
    
    }
    

    至于计算现在双倍的总和,你可以按照Bruce在回答中的建议,也就是以类似的方式为总和添加另一个计数器。但是,由于这个问题,您可能需要考虑使用BigDeCimple:p> 你能不能澄清一下,是什么阻碍了你获得想要的结果?看起来您需要使用3个变量来跟踪2个计数和运行总和。老实说,我只是有点困惑在开始解析文件后该怎么做。我想用int表示双倍数,int表示非双倍数,double表示双倍和。我不知道如何组织这个想法。这正是我想要的。非常感谢。