【问题标题】:Calculating Average, A String Tokenization Exercise计算平均值,字符串标记化练习
【发布时间】:2018-05-18 22:15:15
【问题描述】:

我已经尝试让这个程序运行 3 天了。我也一直在研究各种网站和 stackoverflow,但并没有取得太大的成功。

这个程序的目标是接收用户输入,该输入可以由任意数量的空格和单个分号分隔。然后将添加整数并计算平均值。诀窍是分数也可以实现,并且可以采用以下格式:12/33 或 (12/33)。

分数是 100 分中的百分比分数。

我成功地消除了空格和分号我只是不确定如何进行这段代码的计算方面,特别是处理分数。

这是我当前的代码:

public static void main(String[] args) {
    System.out.println("Enter a Set of Grades:");
    Scanner messageIn = new Scanner(System.in);
    String store = new String();
    store = messageIn.nextLine();
    store = store.trim().replaceAll(" +", "");
    //store = store.trim().replaceAll("(", "");
    //store = store.trim().replaceAll(")", "");
    String[] dataSet = store.split(";");
    //messageIn.close();
    for (int i = 0; i<dataSet.length; i++) {
        System.out.println(dataSet[i]);
    }
}

非常感谢您的帮助

我还没有走到这一步,但是例如,我输入了这段代码:

98;37; 12/33; (33/90); 88; 120/150;

输出将是:

平均值为:62.67

【问题讨论】:

  • 你的输入是什么,你想要的输出是什么?
  • 嗨,我已经用一个例子更新了这个问题。感谢您的帮助
  • 您应该能够将数字转换为双精度并执行除法。
  • 你是怎么得到 62.67 的?
  • 我明白你的困惑,我认为分数分数是 100 分的百分比分数,因此在计算为小数后需要乘以 100

标签: java string average tokenize


【解决方案1】:

如果您检查个人评分 contains 是否为 / 并单独处理该案例,这样的情况如何:

import java.util.Scanner;

class Main{
  public static void main(String[] args) {
    //Initialize scanner object
    Scanner scanner = new Scanner(System.in);

    //Prompt user for input
    System.out.print("Enter a Set of Grades:");
    String store = scanner.nextLine();

    //Remove all white space and round brackets
    store = store.replaceAll("[\\(\\)\\s+]","");

    //Split input into individual grades
    String[] grades = store.split(";");

    double sum = 0;
    //Loop over each entered grade and add to sum variable
    for (String grade : grades) {
      if(grade.contains("/")) {
        double numerator = Double.parseDouble(grade.split("/")[0]);
        double denominator = Double.parseDouble(grade.split("/")[1]);
        sum += numerator/denominator * 100;
      } else {
        sum += Double.parseDouble(grade);
      }
    }

    System.out.printf("The average is: %.2f\n", sum/grades.length);
  }
}

示例用法:

Enter a Set of Grades: 98;37; 12/33; (33/90); 88; 120/150;
The average is: 62.67

试试看here!

【讨论】:

  • 这是一个聪明的主意!你能向我解释一下 .replaceAll 方法是如何工作的: store = store.replaceAll("[\(\)\\s+]","");
  • 因为我们要替换开闭圆括号以及所有空格,所以我们需要使用方括号来表示我们要匹配多个事物。所有的 `\\` 都是用来转义的。
  • \\s+ 专门匹配一个或多个空白字符的序列。
  • 这是有道理的,非常感谢 shash678 的帮助,这个例子被证明是非常有用的,我从中学到了很多关于 Java 的知识。非常感谢您抽出宝贵时间提供帮助!
猜你喜欢
  • 1970-01-01
  • 2015-10-15
  • 1970-01-01
  • 1970-01-01
  • 2022-01-15
  • 1970-01-01
  • 2018-03-23
  • 2013-10-21
  • 1970-01-01
相关资源
最近更新 更多