就在我认为我已经掌握了 Java 的基础知识时(已经整整一个学期了!),发生了一些事情让我对此产生了疑问。我正在做一些练习复习并且有一点问题。这是代码:
public class LetterCount
{
private char[] wordArray;
private int numVowels = 0, numConsonants = 0, numSpaces = 0, numDigits = 0;
public LetterCount(String str)
{
wordArray = str.toCharArray();
}
public int getNumVowels()
{
for (int count = 0; count < wordArray.length; count++)
{
if (wordArray[count] == 'a' || wordArray[count] == 'e' ||
wordArray[count] == 'i' || wordArray[count] == 'o' || wordArray[count]
== 'u' || wordArray[count] == 'y')
numVowels++;
}
return numVowels;
}
public int getNumDigits()
{
for (int count = 0; count < wordArray.length; count++)
{
if (Character.isDigit(wordArray[count]))
numDigits++;
}
return numDigits;
}
public int getWhiteSpace()
{
for (int count = 0; count < wordArray.length; count++)
{
if (Character.isSpaceChar(wordArray[count]))
numSpaces++;
}
return numSpaces;
}
public int getNumConsonants()
{
numConsonants = wordArray.length - getNumVowels() - getNumDigits() - getWhiteSpace();
return numConsonants;
}
public String toString()
{
String str = "Characters: " + wordArray.length + "\n" +
"Vowels: " + getNumVowels() + "\n" +
"Consonants: " + getNumConsonants() + "\n" +
"Digits: " + getNumDigits() + "\n" +
"Spaces: " + getWhiteSpace();
return str;
}
}
这是输出:
Enter a sentence: this is a test 4 u
Characters: 18
Vowels: 5
Consonants: 2
Digits: 2
Spaces: 10
我的问题: 1) 我确信我可以在 toString() 方法中使用字段名称(例如numVowels与getNumConsonants()),但似乎这个类需要我使用方法名称。当我使用字段名称时,我得到 0。为什么有区别?我知道如果我返回一个方程,我必须使用方法名称。
2) 我也不明白为什么我的 numConsonants() 方法没有返回正确的数字。如果我分别返回每个字段(并调用该方法,因为我无法调用字段名称),我会得到正确的数字。把它们放在一个等式中,这是不正确的。我究竟做错了什么?
这是原始的主要方法。我已经对其进行了编辑以调用 LetterCount 类中的方法:
import java.util.Scanner;
public class LetterCountDemo {
public static void main(String[] args)
{
String sentence;
LetterCount lc;
Scanner keyboard = new Scanner(System.in);
System.out.print("Enter a sentence: ");
sentence = keyboard.nextLine();
lc = new LetterCount(sentence);
System.out.println(lc);
}
}
添加:
lc.getNumVowels();
lc.getNumConsonants();