import java.util.Scanner;
public class SentenceVowels
{
public static void main(String[] args)
{
int x,z, count, vowels;
String sentence;
char v;
z = 0;
vowels = 0;
Scanner keyboard = new Scanner(System.in);
System.out.print("Please enter a sentence, and the program" +
" will return the # of vowels: ");
System.out.println();
sentence = keyboard.nextLine();
x = sentence.length();
for(count=1; count <= x; count++)
{
char letter = sentence.charAt(z);
isVowel(letter);
if(v == 1)
vowels = vowels + 1;
z++;
}
System.out.println("The amount of vowels in the sentence you inputed " +
" was: " + vowels);
}
public static char isVowel(char l)
{
int v, y;
if ((l == 'a')||(l == 'e')||(l == 'i')||(l == 'o')||
(l == 'u'))
{
v = 1;
return v;
}
}
}
答案 0 :(得分:1)
可能你错过了一个:
v = isVowel(letter);
而不是:
isVowel(letter);
顺便说一句,代码可以简单得多。因为它看起来似乎太复杂了
在奇怪的事情中,v
方法中的int
被声明为isVowel
,但随后将其返回为char
。
我不明白为什么你没有从isVowel
返回一个简单的布尔值
另一个浪费是您可以使用char letter = sentence.charAt(count-1);
而不是使用您并不真正需要的z
然后y
内未使用isVowel
...
基本上代码根本不是很漂亮。你应该考虑重新考虑它。
答案 1 :(得分:0)
因为isVowel中的“v”没有被传递回主程序。最低修正为v = isVowel(letter);
看起来你是一名初学者。我们都曾经。但是还有其他一些关于改进程序的问题。例如,count
和z
用于相同的目的(除了从1开始计数)。通常的习语是for (z=0; z<sentence.length(); ++z);
。
并且:你的isVowel应该返回boolean
,而不是char。 (对于名称如isSomething的所有函数都是如此。)
答案 2 :(得分:0)
由于这显然是家庭作业(或非正式的“学习练习”),并且您需要学习修复编译错误并调试代码,这里有几个提示:
修复编译错误之前您尝试运行程序。修复编译错误涉及阅读并尝试理解错误消息!!
使用调试器单步执行程序,并观察实际发生的情况。
查找在初始化之前使用的变量,或从未初始化的变量。
答案 3 :(得分:0)
这样做:
import java.util.Scanner;
public class SentenceVowels {
public static void main(String[] args) {
int vowels = 0;
String sentence;
Scanner keyboard = new Scanner(System.in);
System.out.print("Please enter a sentence, and the program"
+ " will return the # of vowels: ");
System.out.println();
sentence = keyboard.nextLine().toString();
for (char letter : sentence.toCharArray()) {
vowels += isVowel(letter);
}
System.out.println("The amount of vowels in the sentence you inputed "
+ " was: " + vowels);
System.exit(0);
}
public static int isVowel(char l) {
if ((l == 'a') || (l == 'e') || (l == 'i') || (l == 'o') || (l == 'u')) {
return 1;
} else {
return 0;
}
}
}
你遇到的问题是:
在你的行
元音=元音+ 1;
元音设置为0,永不改变。你需要改变它,因此元音总结你的方法'isVowel'的返回值
vowels += isVowel(letter);
你的行
char letter = sentence.charAt(z);
只会引用字符串的第0个字符,因为你声明它为0并且它永远不会改变。尝试使用for循环中的'count',因为您已将其设置为递增。此外,您应该将计数初始化为'0',因为数组索引始终从'0'开始。所以
x = sentence.length();
for(count=0; count < x; count++) {
char letter = sentence.charAt(count);
.
.
.
希望这有助于更好地理解问题。
祝你好运。答案 4 :(得分:0)
这是一个不那么“昂贵”的代码版本。新Java程序员犯的错误之一是过度声明变量,过分复杂应该是一个简单的程序。实际上,这是对内存的低效使用。我会在代码下面更改一些内容。
import java.util.Scanner;
public class SentenceVowels
{
public static void main(String[] args)
{
Scanner keyboard = new Scanner(System.in);
System.out.println("Please enter a sentence, and the program" +
" will return the # of vowels: ");
// System.out.println(); You don't need this - you could just make the last
//line a println and avoid the unnecessary line
String sentence = keyboard.nextLine();
int vowels = 0;
for (int i = 0 ; i < sentence.length() ; i++) {
vowels += isVowel(sentence.charAt(i));
}
System.out.println("The amount of vowels in the sentence you inputed " +
" was: " + vowels);
}
public static int isVowel(char l) {
if (l=='a' || l=='e' || l=='i' || l=='o' || l=='u') {
return 1;
}
return 0;
}
}
这是我改变的。
希望这会有所帮助。在您的Java之旅中尽情享受!!