英文:
Why is my Java code not working (beginner, array)
问题
感谢您的关注。我卡在了为什么这个代码没有处理输入成绩的情况。它可以正确处理 A+(返回 4.0),但是 'A' 报错,'A-' 返回 4.0(应该是 3.7),然后 'B+' 正确,'B' 报错,'B-' 返回 3.0(应该是 2.7),这个模式一直持续下去。有什么想法吗?
public class Grade {
private String grade = "";
public Grade(String grade) {
this.grade = grade;
}
public double getGrade() {
double gpa = 0.0;
char[] gradeArray = this.grade.toCharArray();
if (gradeArray[0] == 'A') {
gpa += 4.0;
}
if (gradeArray[0] == 'B') {
gpa += 3.0;
}
if (gradeArray[0] == 'C') {
gpa += 2.0;
}
if (gradeArray[0] == 'D') {
gpa += 1.0;
}
if (gradeArray[1] == '+') {
if (gradeArray[0] != 'A') {
gpa += 0.3;
}
}
if (gradeArray[1] == '-') {
gpa -= 0.3;
}
return gpa;
}
}
英文:
thanks for looking. I'm stuck on why this is not handling cases for inputted grades. It handles A+ fine (returns 4.0) but 'A' gives an error, 'A-' gives 4.0 (should be 3.7), then 'B+' is correct, 'B' gives error, 'B-' gives 3.0 (should be 2.7), and this is the pattern. Any thoughts?
public class Grade {
private String grade = "";
public Grade(String grade) {
this.grade = grade;
public double getgrade() {
double gpa = 0.0;
char[] gradeArray = this.grade.toCharArray();
if (gradeArray[0] == 'A') {
gpa += 4.0;
}
if (gradeArray[0] == 'B') {
gpa += 3.0;
}
if (gradeArray[0] == 'C') {
gpa += 2.0;
}
if (gradeArray[0] == 'D') {
gpa += 1.0;
}
if (gradeArray[1] == '+') {
if (gradeArray[0] != 'A') {
gpa += 0.3;
}
}
if (gradeArray[0] == '-') {
gpa -= 0.3;
}
return gpa;
}
}```
</details>
# 答案1
**得分**: 1
如果你调用A或者B,例如:
new Grade("A").getNumericGrade()
你会在以下代码的这一行得到java.lang.IndexOutOfBoundsException错误:
if (gradeArray[1] == '+') {
因为gradeArray[1]并不存在,这里只有一个字符(在索引0处),它可以是'A'或者'B'。
简单的解决方案:检查长度!例如:
if (gradeArray.length > 1 && gradeArray[1] == '+') {
<details>
<summary>英文:</summary>
well if you call A or B, e.g.:
new Grade("A").getNumericGrade()
you get java.lang.IndexOutOfBoundsException on line
if (gradeArray[1] == '+') {
because gradeArray[1] does not exist, there is only 1 character (at index 0) it is 'A' or 'B'
Simple solution: check for length! E.g.:
if (gradeArray.length > 1 && gradeArray[1] == '+') {
</details>
# 答案2
**得分**: 0
```java
public class Grade {
private String grade = "";
public Grade(String grade) {
this.grade = grade;
}
public String getLetterGrade() {
return this.grade;
}
public double getNumericGrade() {
double gpa = 0.0;
char[] gradeArray = this.grade.toCharArray();
// 始终良好地进行空值/空字符串检查
if (gradeArray.length == 0 || gradeArray[0] == ' '){
return 0;
}
// 使用switch语句可以提高代码的可读性。也可以使用if语句
// 考虑到您最初的情况,这将使您最后的代码块变得多余
switch (gradeArray[0]){
case 'A': gpa += 4.0; break;
case 'B': gpa += 3.0; break;
case 'C': gpa += 2.0; break;
case 'D': gpa += 1.0; break;
default: break;
}
// 首先需要检查是否存在第二个字符
// 如果存在,那么它只能是+/-符号
if(gradeArray.length == 2 && (gradeArray[1] == '+' || gradeArray[1] == '-')){
if (gradeArray[1] == '+') {
if (gradeArray[0] != 'A') {
gpa += 0.3;
}
}
// '-'应该是第二个字符,所以索引应为1
if (gradeArray[1] == '-') {
gpa -= 0.3;
}
} // 还需要包含else以处理其他情况
return gpa;
}
}
英文:
public class Grade {
private String grade = "";
public Grade(String grade) {
this.grade = grade;
}
public String getLetterGrade() {
return this.grade;
}
public double getNumericGrade() {
double gpa = 0.0;
char[] gradeArray = this.grade.toCharArray();
// Good to have null/empty check always
if ( gradeArray.length == 0 || gradeArray[0] == ' '){
return 0;
}
// Code readability increases manifolds with switch. if clause can also be used
// Considering only the cases you originally had. With this your code block at last becomes redundant
switch ( gradeArray[0] ){
case 'A': gpa += 4.0; break;
case 'B': gpa += 3.0; break;
case 'C': gpa += 2.0; break;
case 'D': gpa += 1.0; break;
default: break;
}
// First you need to check if there is a second character present or not
// If present then it should be only +/-
if( gradeArray.length == 2 && ( gradeArray[1] == '+' || gradeArray[1] == '-' )){
if (gradeArray[1] == '+') {
if (gradeArray[0] != 'A') {
gpa += 0.3;
}
}
// '-' would be second character, so index should be 1
if (gradeArray[1] == '-') {
gpa -= 0.3;
}
} //Include else to handle other scenarios
return gpa;
}
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论