我的String toString()方法有问题。这是整个程序的代码(请记住,我是java世界的新手,所以请解释任何答案,谢谢)
import static java.lang.System.*;
import java.util.Scanner;
public class CharacterAnalyzer
{
private char theChar;
private boolean isUpper, isLower, isNumber;
public CharacterAnalyzer()
{
char theChar = ' ';
}
public CharacterAnalyzer(char c)
{
theChar = c;
}
public void setChar(char c)
{
theChar = c;
}
public char getChar()
{
char getChar= theChar;
return getChar;
}
public boolean isUpper( )
{
if (((int)theChar)>64&&((int)theChar)<91){
boolean isUpper = true;
return isUpper;
}
else{
boolean isUpper = false;
return isUpper;
}
}
public boolean isLower( )
{
if (((int)theChar)>97&&((int)theChar)<123){
boolean isLower = true;
return isLower;
}
else{
boolean isLower = false;
return isLower;
}
}
public boolean isNumber( )
{
if (((int)theChar+48)>47&&((int)theChar+48)<58){
boolean isNumber = true;
return isNumber;
}
else{
boolean isNumber = false;
return isNumber;
}
}
public int getASCII( )
{
return ((int)theChar);
}
public String toString()
{
if(isNumber == true && isUpper == false && isLower == false){
String chartype = "a number";
return ""+getChar() + " is "+chartype+". ASCII == " + getASCII() + "\n";
}
else if(isNumber == false && isUpper == true && isLower == false){
String chartype = "an uppercase character";
return ""+getChar() + " is "+chartype+". ASCII == " + getASCII() + "\n";
}
else if(isNumber == false && isUpper == false && isLower == true){
String chartype = "a lowercase character";
return ""+getChar() + " is "+chartype+". ASCII == " + getASCII() + "\n";
}
}
}
以下是跑步者:
import static java.lang.System.*;
import java.util.Scanner;
public class Lab05d
{
public static void main ( String[] args )
{
Scanner keyboard = new Scanner(System.in);
out.print("Enter a letter :: ");
char letter = keyboard.next().charAt(0);
CharacterAnalyzer test = new CharacterAnalyzer(letter);
out.println(test); //A
//add more test cases
out.print("Enter a letter :: ");
char letter2 = keyboard.next().charAt(0);
CharacterAnalyzer test2 = new CharacterAnalyzer(letter2);
out.println(test2); //l
out.print("Enter a letter :: ");
char letter3 = keyboard.next().charAt(0);
CharacterAnalyzer test3 = new CharacterAnalyzer(letter3);
out.println(test3); //a
out.print("Enter a letter :: ");
char letter4 = keyboard.next().charAt(0);
CharacterAnalyzer test4 = new CharacterAnalyzer(letter4);
out.println(test4); //7
out.print("Enter a letter :: ");
char letter5 = keyboard.next().charAt(0);
CharacterAnalyzer test5 = new CharacterAnalyzer(letter5);
out.println(test5); //D
out.print("Enter a letter :: ");
char letter6 = keyboard.next().charAt(0);
CharacterAnalyzer test6 = new CharacterAnalyzer(letter6);
out.println(test6); //2
out.print("Enter a letter :: ");
char letter7 = keyboard.next().charAt(0);
CharacterAnalyzer test7 = new CharacterAnalyzer(letter7);
out.println(test7); //X
out.print("Enter a letter :: ");
char letter8 = keyboard.next().charAt(0);
CharacterAnalyzer test8 = new CharacterAnalyzer(letter8);
out.println(test8); //Z
out.print("Enter a letter :: ");
char letter9 = keyboard.next().charAt(0);
CharacterAnalyzer test9 = new CharacterAnalyzer(letter9);
out.println(test9); //9
}
}
我很确定错误只是在String toString方法中,至少这是bluej告诉我的。我环顾四周,其他人只是在他们的代码上添加了一个else语句,但是当我这样做时,它总是执行else语句,绕过我的ifs(我不知道为什么,我把它们放在同一个缩进上。 ..)。我也尝试完全在ifs / elses之外放置一个返回,当我编译它时,它没有找到我在toString方法中使用的变量,isUpper是isLower和isNumber值。当我的老师分配了这个时,他给了我们用来测试它的输入,A, 1, 一个, 7, d, 2, X, Z, 9 那么,我如何让它运行并输出它们的ASCII值,65,49,97,55,68,50,88,122,57(我已经超过了这个愚蠢的问题很多次,他们的价值被铭刻在我的脑海里。 ..)。 我真的很沮丧,请帮帮我!
其实我只是想到了什么。我认为它可能找不到我之前的方法(isUpper,isLower和isNumber),它们只会执行其他语句,使它们全部为假,从而使我的所有ifs无效......任何人都知道如何解决这个问题?< / p>
答案 0 :(得分:3)
您的toString
方法采用
if (a) {
// return stuff
} else if (b) {
// return stuff
} else if (c) {
// return stuff
}
没有保证执行路径,其中包含return
语句。即使逻辑规定当c
和a
都为假时b
总是为真,这对编译器来说还不够好。
如果在c
和a
都为假时b
始终为真,那么您应该将else if (c)
更改为else
或者,您可以在方法结束处抛出此内容:
return "";
或者您可以添加到当前方法:
} else {
// throw an exception
}
答案 1 :(得分:1)
你有以下内容:
if (...)
return ...
else if (...)
return ...
else if (...)
return ...
问题:如果if
条件都不匹配会怎样?
答案:有一个可怕的错误,因为在最终的else if
条款之后没有返回语句。正如上面的回答所说,你知道它无法从最终结束 - 编译器不知道这一点并不重要。要修复错误,您需要执行以下操作之一:
if (...)
return ...
else if (...)
return ...
else if (...)
return ...
else
return ...
或
if (...)
return ...
else if (...)
return ...
else if (...)
return ...
return ...
请注意,第二个答案在所有条款下面都有一个return
语句。这是一个小的区别,就你的问题而言并不重要,但是,例如,如果其中一个if
子句在其中有另一个条件,则可能无法返回某些内容。例如:
if (...)
if (...)
return ...
else
...
else if (...)
return ...
else if (...)
return ...
else
return ...
上面的编译也无法编译,因为嵌套的return
子句中没有else
语句。
答案 2 :(得分:0)
基本上,我们无法保证您的代码中会出现return
语句。
你可以重构它:
public String toString()
{
// declare variable to store return value, initialize it to ¿empty string?
// if - elseif logic to assign proper value to the variable
// return the string variable
}