在java中,如何对不同的变量使用相同的条件语句?

在java中,如何对不同的变量使用相同的条件语句?,java,netbeans,Java,Netbeans,我的程序假设使用此条件语句从用户处获得每个主题的标记。输出是受试者的成绩和四门学科的总平均成绩 我想将这个条件语句用于其他四个变量(subjectA、subjectB、subjectC、subjectD),以替换“discrete”。我想访问它们以获得输出。有没有办法缩短代码,而不是为每个变量编写相同的条件语句 if (discrete>=90 && discrete <=100) {discreteGrade= "A+" ;

我的程序假设使用此条件语句从用户处获得每个主题的标记。输出是受试者的成绩和四门学科的总平均成绩

我想将这个条件语句用于其他四个变量(subjectA、subjectB、subjectC、subjectD),以替换“discrete”。我想访问它们以获得输出。有没有办法缩短代码,而不是为每个变量编写相同的条件语句

if (discrete>=90 && discrete <=100)
      {discreteGrade= "A+" ;
        discreteGPA=4.00;}
 else if (discrete>=80 && discrete <=89)
  {discreteGrade= "A" ;
   discreteGPA=4.00;}
     else if (discrete>=75 && discrete <=79)
     {discreteGrade= "A-" ;
     discreteGPA=3.67;}
       else if (discrete>=70 && discrete <=74)
        {discreteGrade= "B+" ;
         discreteGPA=3.33;}
           else if (discrete>=65 && discrete <=69)
          {discreteGrade= "B" ;
           discreteGPA=3.00;}
               else if (discrete>=60 && discrete <=64)
               {discreteGrade= "B-" ;
                discreteGPA=2.67;}
                  else if (discrete>=55 && discrete <=59)
                 {discreteGrade= "C+" ;
                  discreteGPA=2.33;}
                     else if (discrete>=50 && discrete <=54)
                     {discreteGrade= "C" ;
                     discreteGPA=2.00;}
                         else if (discrete>=45 && discrete <=49)
                        {discreteGrade= "C-" ;
                         discreteGPA=1.67;}
                             else if (discrete>=40 && discrete <=44)
                            {discreteGrade= "D+" ;
                            discreteGPA=1.33;}
                                  else if (discrete>=35 && discrete <=39)
                                    {discreteGrade= "D" ;
                                 discreteGPA=1.00;}
                                       else
                                {discreteGrade= "F" ;
                                   discreteGPA=0.00;}

if(discrete>=90&&discrete=80&&discrete=75&&discrete=70&&discrete=65&&discrete=60&&discrete=55&&discrete=50&&discrete=45&&discrete=40&&discrete=35&&discretediscrete从命令行第1个参数读取

        int[] discrvals = {90,80,75,70,65,60,55,50,45,40,35};
        String[] discrgrades = {
                  "A+","A","A-","B+","B","B-","C+","C","C-","D+", "D","F"};
        double[] discrgpas = {
           4.0,4.0,3.67,3.33,3.0,2.67,2.33,2.00,1.67,1.33,1.0, 0.0};

        int discrete = Integer.parseInt(args[0]);
        int i;
        for(i = 0; i<discrvals.length; i++){
          if (discrete > discrvals[i] ) {
             break;
          }
        }
        System.out.println( discrgrades[i] + "/" + discrgpas[i] );
int[]discrvals={90,80,75,70,65,60,55,50,45,40,35};
字符串[]discrgrades={
“A+”、“A”、“A-”、“B+”、“B-”、“C+”、“C-”、“D+”、“D-”、“F”};
双[]discrgpas={
4.0,4.0,3.67,3.33,3.0,2.67,2.33,2.00,1.67,1.33,1.0, 0.0};
int离散=整数.parseInt(args[0]);
int i;
for(i=0;i discrvals[i]){
打破
}
}
System.out.println(discrgrades[i]+“/”+discrgpas[i]);

我的意思是,我会从最低等级开始,这样你可以减少一些条件

if (discrete < 35) {
    discreteGrade = "F";
    discreteGPA = 0.00;
} else if (discrete < 40) {
    discreteGrade = "D";
    discreteGPA = 1.00;
} else if (discrete < 45) {
    discreteGrade = "D+";
    discreteGPA = 1.33;
} else if (discrete < 50) {
    discreteGrade = "C-";
    discreteGPA = 1.67;
} else if (discrete < 55) {
    discreteGrade = "C";
    discreteGPA = 2.00;
} else if (discrete < 60) {
    discreteGrade = "C+";
    discreteGPA = 2.33;
} else if (discrete < 65) {
    discreteGrade = "B-";
    discreteGPA = 2.67;
} else if (discrete < 70) {
    discreteGrade = "B";
    discreteGPA = 3.00;
} else if (discrete < 75) {
    discreteGrade = "B+";
    discreteGPA = 3.33;
} else if (discrete < 80) {
    discreteGrade = "A-";
    discreteGPA = 3.67;
} else if (discrete < 90) {
    discreteGrade= "A";
    discreteGPA = 4.00;
} else {
    discreteGrade = "A+";
    discreteGPA = 4.00;
}
if(离散<35){
discreteGrade=“F”;
离散PA=0.00;
}否则如果(离散<40){
discreteGrade=“D”;
离散PA=1.00;
}else if(离散<45){
discreteGrade=“D+”;
离散PA=1.33;
}否则如果(离散<50){
discreteGrade=“C-”;
离散PA=1.67;
}否则如果(离散<55){
discreteGrade=“C”;
离散PA=2.00;
}否则如果(离散<60){
discreteGrade=“C+”;
离散PA=2.33;
}否则如果(离散<65){
discreteGrade=“B-”;
离散PA=2.67;
}否则如果(离散<70){
discreteGrade=“B”;
离散PA=3.00;
}否则如果(离散<75){
discreteGrade=“B+”;
离散PA=3.33;
}否则如果(离散<80){
discreteGrade=“A-”;
离散PA=3.67;
}否则如果(离散<90){
discreteGrade=“A”;
离散PA=4.00;
}否则{
discreteGrade=“A+”;
离散PA=4.00;
}

由于我无法发表评论,您也可以尝试使用switch case,您希望放置&&但您可能不需要| |部分,因为您的if语句已经声明了下一步,如

if(discrete>89 )// it don't matter  if it is greater then 100 because it is still going to be an a+
{
   discreteGrade= "A+";
   discreteGPA=4.00;
}else if(discreet > 79)
{
  // your code here because it will catch the the fact that it is already
  // < 90 because the first if statement says it is already greater than 89.
}
if(discrete>89)//它是否大于100并不重要,因为它仍然是a+
{
discreteGrade=“A+”;
离散PA=4.00;
}否则,如果(谨慎>79)
{
//你的代码在这里,因为它将捕捉到它已经存在的事实
//<90,因为第一个if语句说它已经大于89。
}

所以,我会尽量避免这样的IF-ELSE语句。它们很难理解、编写和扩展。这里有一个更好的解决方案

public class Grade {
    private double min;
    private double gpa;
    private String mark;
    public Grade(double min, double gpa, String mark) {
        this.min = min;
        this.gpa = gpa;
        this.mark = mark;
    }
}
它存储获得它所需的最小离散值、GPA和字符串表示(A+、A、A-,等等)

现在,我们有一个平分类来计算成绩。对不起,如果我的英语不是标准的,名字也不正确,但是我希望你明白。

public class Grader {
    private List<Grade> grades = Arrays.asList(new Grade(90, 4.00, "A+"),
            new Grade(80, 4.00, "A"),
            new Grade(75, 3.67, "A-"));
    public Grade getGrade(double discrete) {
        Iterator<Grade> iterator = grades.listIterator();
        Grade grade = iterator.next();
        while (grade.getMin() > discrete) {
            grade = iterator.next();
        }

        return grade;
    }
}

这是我能回答的最接近的问题了。不仅仅是四个主题,我还把它做成了一系列主题标记,这样它对于多个主题来说是灵活的

这不是一个完整的答案,而是一个供您构建的想法

public class S06 {
  public static void main(String[] args) {
    Student s = new Student(89.5, 90.0, 45.0, 99.5); // Marks of 4 subjects
    List<Grade> studentGrade = s.getGradesForMarks(); // Grades of 4 subjects
    System.out.println(studentGrade);
  }
}

class Student {

  private Double[] marks;

  public Student(Double... marks) {
    this.marks = marks;
  }

  public List<Grade> getGradesForMarks() {
    return Arrays.stream(marks).map(this::getGradeForMark).collect(Collectors.toList());
  }

  private Grade getGradeForMark(double mark) {
    return Arrays.stream(Grade.values())
        .filter(g -> mark > g.minMarks && mark <= g.maxMarks) //Your conditions go here!
        .findFirst()
        .orElseThrow(() -> new RuntimeException("Unable to grade mark , " + mark));
  }

  enum Grade {
    GRADE_A_PLUS("A+", 4.00, 100, 91),
    GRADE_A("A", 4.00, 90, 81),
    GRADE_A_MINUS("A-", 3.69, 80, 71),
    OTHERS("O", 3.00, 70, 0);

    String discreteGrade;
    Double discreteGPA;
    Double maxMarks; 
    Double minMarks;

    Grade(String discreteGrade, double discreteGPA, double maxMarks, double minMarks) {
      this.discreteGrade = discreteGrade;
      this.discreteGPA = discreteGPA;
      this.maxMarks = maxMarks;
      this.minMarks = minMarks;
    }
  }
}
公共类S06{
公共静态void main(字符串[]args){
学生s=新生(89.5,90.0,45.0,99.5);//四门学科的分数
列出studentGrade=s.getGradesForMarks();//4个科目的成绩
系统输出打印LN(学生级);
}
}
班级学生{
私人双[]标记;
公立学生(双倍分数){
这个。标记=标记;
}
公共列表getGradesForMarks(){
返回Arrays.stream(marks).map(this::getGradeForMark.collect(Collectors.toList());
}
私人等级getGradeForMark(双标记){
返回Arrays.stream(Grade.values())
.filter(g->mark>g.minMarks&&marknewruntimeexception(“无法评分,+mark));
}
枚举等级{
等级A加(“A+”,4.00,100,91),
甲级(A,4.00,90,81),,
等级A减(“A-”,3.69,80,71),
其他(O,3.00,70,0);;
弦离散化;
双离散;
双马克斯;
双标记;
等级(字符串离散等级、双离散等级、双最大等级、双最小等级){
this.discreteGrade=discreteGrade;
this.discreteGPA=discreteGPA;
this.maxMarks=maxMarks;
this.minMarks=minMarks;
}
}
}

希望变量名是不言自明的。

如果我理解,这里有一个答案:

        if (discrete>=90 && discrete <=100)
          {discreteGrade= "A+" ;
            discreteGPA=4.00;}
     else if (discrete>=80 && discrete <=89)
      {discreteGrade= "A" ;
       discreteGPA=4.00;}
         else if (discrete>=75 && discrete <=79)
         {discreteGrade= "A-" ;
         discreteGPA=3.67;}
           else if (discrete>=70 && discrete <=74)
            {discreteGrade= "B+" ;
             discreteGPA=3.33;}
               else if (discrete>=65 && discrete <=69)
              {discreteGrade= "B" ;
               discreteGPA=3.00;}
                   else if (discrete>=60 && discrete <=64)
                   {discreteGrade= "B-" ;
                    discreteGPA=2.67;}
                      else if (discrete>=55 && discrete <=59)
                     {discreteGrade= "C+" ;
                      discreteGPA=2.33;}
            else if (discrete>=45 && discrete <=49)
                            {discreteGrade= "C-" ;
                             discreteGPA=1.67;}
                                 else if (discrete>=40 && discrete <=44)
                                {discreteGrade= "D+" ;
                                discreteGPA=1.33;}
                                      else if (discrete>=35 && discrete <=39)
                                        {discreteGrade= "D" ;
      

if(discrete>=90&&discrete=80&&discrete=75&&discrete=70&&discrete=65&&discrete=55&&discrete=45&&discrete=40&&discrete=35&&discrete=35&&discrete不是您所要求的,但这些
|
不都应该是
&
吗?另外,我建议您让IDE重新格式化该代码。您会发现它更可读@FedericoklezCulloca刚刚意识到那些
|
应该是
&
。谢谢!还有如何让我的IDE重新格式化代码?Alt+Shift+F重新格式化您的代码。对于所有回答的人,我敦促你们都仔细阅读这个问题。OP不是问如何将那段代码重写得更紧凑,他们是问如何应用t他把同样的逻辑分为四个等级,而不是一个等级。我可以知道什么是
discrvals
discrgpas
分别代表什么吗?@Syazwani2191“离散值”和“离散GPA”。我想目前为止这是OP想要的最接近的,但也许你可以向他们展示它是如何与他们的“四个变量”联系在一起的请求?也就是说,这个类如何被每个类重用。Grader类不关心它作为离散参数接收到什么。它可以用于任何主题。不知道为什么我得到了-1…编辑了我的答案
        if (discrete>=90 && discrete <=100)
          {discreteGrade= "A+" ;
            discreteGPA=4.00;}
     else if (discrete>=80 && discrete <=89)
      {discreteGrade= "A" ;
       discreteGPA=4.00;}
         else if (discrete>=75 && discrete <=79)
         {discreteGrade= "A-" ;
         discreteGPA=3.67;}
           else if (discrete>=70 && discrete <=74)
            {discreteGrade= "B+" ;
             discreteGPA=3.33;}
               else if (discrete>=65 && discrete <=69)
              {discreteGrade= "B" ;
               discreteGPA=3.00;}
                   else if (discrete>=60 && discrete <=64)
                   {discreteGrade= "B-" ;
                    discreteGPA=2.67;}
                      else if (discrete>=55 && discrete <=59)
                     {discreteGrade= "C+" ;
                      discreteGPA=2.33;}
            else if (discrete>=45 && discrete <=49)
                            {discreteGrade= "C-" ;
                             discreteGPA=1.67;}
                                 else if (discrete>=40 && discrete <=44)
                                {discreteGrade= "D+" ;
                                discreteGPA=1.33;}
                                      else if (discrete>=35 && discrete <=39)
                                        {discreteGrade= "D" ;
      
    if (discrete < 35) {
    discreteGrade = "F";
    discreteGPA = 0.00;
} else if (discrete < 40) {
    discreteGrade = "D";
    discreteGPA = 1.00;
} else if (discrete < 45) {
    discreteGrade = "D+";
    discreteGPA = 1.33;
} else if (discrete < 50) {
    discreteGrade = "C-";
    discreteGPA = 1.67;
} else if (discrete < 55) {
    discreteGrade = "C";
    discreteGPA = 2.00;
} else if (discrete < 60) {
    discreteGrade = "C+";
    discreteGPA = 2.33;
} else if (discrete < 65) {
    discreteGrade = "B-";
    discreteGPA = 2.67;
} else if (discrete < 70) {
    discreteGrade = "B";
    discreteGPA = 3.00;
} else if (discrete < 75) {
    discreteGrade = "B+";
    discreteGPA = 3.33;
} else if (discrete < 80) {
    discreteGrade = "A-";
    discreteGPA = 3.67;
} else if (discrete < 90) {
    discreteGrade= "A";
    discreteGPA = 4.00;
} else {
    discreteGrade = "A+";
    discreteGPA = 4.00;
}