首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用扫描器输入进行一些基本的数学运算并格式化输出

使用扫描器输入进行一些基本的数学运算并格式化输出
EN

Code Review用户
提问于 2018-01-18 10:49:23
回答 2查看 136关注 0票数 1

编写一个名为plusScores的静态方法,该方法接受包含一系列表示学生记录的行的扫描器作为参数。每个学生的记录需要两行输入。第一行有学生的名字,第二行有一系列的正负字符。下面是一个示例输入:凯恩,埃丽卡-+-+钱德勒,亚当++-+马丁,杰克+++++++狄龙,阿曼达+-+-++对于每个学生,您应该生成一行输出,其中包含学生的名字,后面是冒号,后面是加号字符的百分比。例如,如果上面的输入存储在一个名为input的扫描仪中,那么plusScores(输入)的调用应该产生以下输出:凯恩、埃丽卡: 40.0% +钱德勒、亚当: 75.0% +马丁、杰克: 100.0% +狄龙、阿曼达: 62.5% +

我正在寻找解决这个问题的替代方法,当然,我的代码可能存在任何潜在的错误或缺陷。如果你有什么有趣的事情要分享,请做!我对编程很陌生,我渴望看到其他解决问题的方法,比如这个问题。这是我的密码:

代码语言:javascript
复制
public static void plusScores(Scanner sc) {
    while (sc.hasNextLine()) {
        String line = sc.nextLine();
        if (!line.startsWith("+") && !line.startsWith("-")) {
            System.out.print(line);
        } else {

            int plus = 0;
            int minus = 0;

            for (char ch : line.toCharArray()) {
                if (ch == '+') {
                    plus++;
                } else {
                    minus++;
                }
            }

            float percentPlus = ((float) (plus) / (plus + minus)) * 100;
            System.out.format(": %.1f%% plus\n", percentPlus);
        }
    }
}
EN

回答 2

Code Review用户

回答已采纳

发布于 2018-01-18 13:30:06

您的方法基本上是正确的,但它有包含整个逻辑的谬误,没有给流程、变量等提供有意义的名称/解释--一个更健壮、可扩展、清晰和可维护的解决方案是用最终变量替换所有常量,并将小问题域封装到它们自己的方法中。特别代表:

代码语言:javascript
复制
   public static final String PLUS = "+";
   public static final String MINUS = "-";

   ...

   if (isStudentNameLine(line)) {
        processStudentNameLine(line);
   } else {
   ...

   private static boolean isStudentNameLine(String line) {
       return !line.startsWith(PLUS) && !line.startsWith(MINUS);
   }

   private static void processStudentNameLine(String line) {
        System.out.print(line);
   }

如果用方法替换一行代码,这似乎是过分的做法。这种方法有许多优点:

  1. 使用变量而不是常量意味着您不必处理键入
  2. 较小的方法更易于调试。
  3. 代码变得更清晰
票数 1
EN

Code Review用户

发布于 2018-01-18 13:15:14

您的方法大部分是正确的,但它似乎是写得太具体,无法解决问题,正如所述。

例如,您假设任何不以正数或减号开头的行都是包含学生姓名的行。

举个例子:如果一个学生没有得利,那该怎么办?这种情况不会像前面提到的那样发生,但是您通常不会得到这样的“已经处理了”,而且它只是帮助编程的方式,以一种轻微偏离正常的输入仍然可以优雅地处理。

你也在假设,当你计算正数和负数时,所有不是正数的东西都是负数。

就目前而言,这是可行的。但是,如果需要改变评分机制,您可能需要采用一种更灵活的方法--例如,将I/O和计数分离开来。

票数 1
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/185385

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档