当前位置: 首页 > 知识库问答 >
问题:

有没有更简单的方法来执行if语句?

沈旻
2023-03-14

我正在开发一个java程序,它接受输入的分数,给出输入的总数和平均值,但是我很难计算出如何获得当前输入的最高分数“我使用了大量嵌套的else-if语句,但必须有一种简单的方法来实现这一点,而不是键入100个else-if语句这是我的代码。我在else-if语句开始的地方添加了一条注释,以确定最高级别

//Jonathan Towell
//This program will take grade inputs and then display the amount of A's B's C's D's and F's
import javax.swing.JOptionPane;


public class Grades 
{
public static void main(String[] args)
{
    JOptionPane.showMessageDialog(null, "Welcome to Jonathan's Gradebook");
    int A = 0, B = 0, C = 0, D = 0, F = 0;
    int totalGrades = 0, grade = 0, averageGrade = 0, highestGrade = 0;
    while (grade >= 0)
    {
    grade = Integer.parseInt(JOptionPane.showInputDialog("Enter one grade followed by the enter key\n when finished enter -1"));
    if (grade <= 100 && grade >= 90)
    {
        A = A + 1;
        totalGrades = totalGrades + 1;
        averageGrade = averageGrade + grade;
        if (grade == 100) // Determines highest grade
        {
            highestGrade = 100;
        }
        else if (grade == 99)
        {
            highestGrade = 99;
        }
        else if (grade == 98)
        {
            highestGrade = 98;
        }
        else if (grade == 97)
        {
            highestGrade = 97;
        }
        else if (grade == 96)
        {
            highestGrade = 96;
        }
        else if (grade == 95)
        {
            highestGrade = 95;
        }
        else if (grade == 94);
        {
            highestGrade = 94;
        }
    }

    else if (grade > 100)
    {
        JOptionPane.showMessageDialog(null, "No extra credit for this assignment\n please enter a value less than 100");
    }
    else if (grade <= 89 && grade >= 80)
    {
        B = B + 1;
        totalGrades = totalGrades + 1;
        averageGrade = averageGrade + grade;
    }
    else if (grade <= 79 && grade >= 70)
    {
        C = C + 1;
        totalGrades = totalGrades + 1;
        averageGrade = averageGrade + grade;
    }
    else if (grade <= 69 && grade >= 60)
    {
        D = D + 1;
        totalGrades = totalGrades + 1;
        averageGrade = averageGrade + grade;
    }
    else if (grade <= 59 && grade >= 0)
    {
        F = F + 1;
        totalGrades = totalGrades + 1;
        averageGrade = averageGrade + grade;
    }
    }
    averageGrade = (averageGrade / totalGrades);
    JOptionPane.showMessageDialog(null, "Total number of grades entered was " + totalGrades + "\n The average grade was: " + averageGrade + " percent." + "\nA's: " + A + "\nB's: " + B + "\nC's: " + C + "\nD's: " + D + "\nF's: " + F + "\nThe highest grade earned was: " + highestGrade + " percent.");
    System.exit(0);
}


}

共有2个答案

商同化
2023-03-14

乔纳森,

你重复了很多代码。在每个if子句中,重复相同的两行代码。为什么不把这两行代码放在if子句之外呢。这两行重复:totalGrades=totalGrades 1;averageGrade=averageGrade品位;

关于if的巨大if语句(等级==100)//确定最高等级{

将其替换为:等级=(等级

您还可以使用:Highest等级=Math.max(Highest等级,等级);

我还重新排序了部分代码。你的if语句说“如果在100到90之间”,然后变成“如果在100以上”。这太令人困惑了。我把它排序为“如果在100以上”,然后是“如果在100到90之间”,这更合乎逻辑。

最终代码应如下所示:

public class Grades 
{
    public static void main(String[] args)
    {
        JOptionPane.showMessageDialog(null, "Welcome to Jonathan's Gradebook");
        int A = 0, B = 0, C = 0, D = 0, F = 0;
        int totalGrades = 0, grade = 0, averageGrade = 0, highestGrade = 0;
        while (grade >= 0)
        {
        grade = Integer.parseInt(JOptionPane.showInputDialog("Enter one grade followed by the enter key\n when finished enter -1"));
        if (grade > 100) {
            JOptionPane.showMessageDialog(null, "No extra credit for this assignment\n please enter a value less than 100");
        } else if (grade <= 100 && grade >= 90) {
            A = A + 1;
            grade = (grade > highestGrade ? highestGrade : grade);// Determines highest grade
        } else if (grade <= 89 && grade >= 80) {
            B = B + 1;
        } else if (grade <= 79 && grade >= 70) {
            C = C + 1;
        } else if (grade <= 69 && grade >= 60) {
            D = D + 1;
        }  else if (grade <= 59 && grade >= 0) {
            F = F + 1;
        }
        totalGrades = totalGrades + 1;
        averageGrade = averageGrade + grade;
        averageGrade = (averageGrade / totalGrades);
        JOptionPane.showMessageDialog(null, "Total number of grades entered was " + totalGrades + "\n The average grade was: " + averageGrade + " percent." + "\nA's: " + A + "\nB's: " + B + "\nC's: " + C + "\nD's: " + D + "\nF's: " + F + "\nThe highest grade earned was: " + highestGrade + " percent.");
        System.exit(0);
    }

}

让我知道这是否对你更好。

姬博瀚
2023-03-14

为了使其更易于管理,您可以考虑使用具有多态性的工厂模式,并在其自己的单独类中实现所有等级括号(if,else if)。

 类似资料:
  • 问题内容: 我正在尝试弄清楚如何解析一些XML(对于Android应用程序),在Java中很难做到这一点似乎很荒谬。似乎需要创建一个具有各种回调(startElement,endElement等)的XML处理程序,然后您必须注意将所有这些数据更改为对象。类似于本教程。 我真正需要的只是将XML文档更改为多维数组,甚至更好的是拥有某种Hpricot处理器。有没有办法做到这一点,还是真的必须在上面的示

  • 问题内容: 来自Gson项目的此链接似乎表明,将类型化的Map序列化为JSON时,我将必须执行以下操作: 很酷,这行得通,但是似乎有很多开销( 整个Type Adapter类? )。我使用了其他JSONLib之类的JSON库,它们使您可以通过以下方式构建地图: 或者,如果我有一个自定义类,则如下所示: 该过程更加手动,但是所需的代码更少,并且没有开销来为Number创建自定义类型适配器,或者在大多

  • 问题内容: 似乎有很多方法可以在Python中定义单例。关于堆栈溢出是否有共识? 问题答案: 我没有真正的需要,因为具有功能(而不是类)的模块可以很好地用作单例。它的所有变量都将绑定到模块,该模块无论如何都无法重复实例化。 如果您确实希望使用类,则无法在Python中创建私有类或私有构造函数,因此,您只能通过使用API​​的约定来保护自己免受多重实例化。我仍然将方法放在模块中,并将模块视为单例。

  • 我有一个javascript函数,它接受一个数组,并对该数组的每个项执行另一个函数。有很多重复的部分,所以我假设有一种更简单的递归方式来写这个: null null 数组中的每个项要么是字符串,要么是嵌套数组。字符串不必是唯一的,所以我认为我不能使用object和map()来代替。

  • 有没有更有效/简洁/雄辩的方法来写这个: 是否有任何有效的语法 ... 或者,与一组具有| |逻辑的布尔表达式相比,您可以更简洁地对单个变量的值集进行分组? 背景:初级程序员,通过一个基本的密码挑战coderbyte,需要采取一定的行动(大写),如果字母是元音。出于简单的原因(因为它在程序的其他地方使用),我声明了一个数组字母表,其中包含字符串形式的每个字母a-z。cypher还将每个字母1移到右

  • 问题内容: 最近,我一直在使用嵌套集模型中的废话。我喜欢为几乎所有有用的操作和视图设计查询。我坚持的一件事是如何选择节点的直接子代(并且 仅 选择子代,而不是进一步的子代!)。 老实说,我确实知道一种方法-但它涉及大量的SQL。我敢肯定有一个更直接的解决方案。 问题答案: 您是否阅读过您张贴的文章?在“查找节点的直接下属”标题下 但是,我要做的(这是作弊)是将嵌套集与邻接列表结合在一起-我在表中嵌