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