为什么我的程序没有返回值?

时间:2011-04-26 23:20:20

标签: java

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;
            }

    }
}

5 个答案:

答案 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);

看起来你是一名初学者。我们都曾经。但是还有其他一些关于改进程序的问题。例如,countz用于相同的目的(除了从1开始计数)。通常的习语是for (z=0; z<sentence.length(); ++z);

并且:你的isVowel应该返回boolean,而不是char。 (对于名称如isSomething的所有函数都是如此。)

答案 2 :(得分:0)

由于这显然是家庭作业(或非正式的“学习练习”),并且您需要学习修复编译错误并调试代码,这里有几个提示:

  1. 修复编译错误之前您尝试运行程序。修复编译错误涉及阅读并尝试理解错误消息!!

  2. 使用调试器单步执行程序,并观察实际发生的情况。

  3. 查找在初始化之前使用的变量,或从未初始化的变量。

答案 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. 您必须初始化变量'v'
  2. 你的方法isVowel必须能够返回一个值。如果你的'if'语句参数失败,那么该方法不能返回任何内容。因此,您必须使用else语句返回否定结果。
  3. 您已将isVowel方法的返回类型声明为'char'但是在return语句中返回的是'int'(int v;)。您的方法必须返回与您在方法标题中声明的类型相同的值。
  4. 在你的行

    元音=元音+ 1;

  5. 元音设置为0,永不改变。你需要改变它,因此元音总结你的方法'isVowel'的返回值

    vowels += isVowel(letter);
    
    1. 你的行

      char letter = sentence.charAt(z);

    2. 只会引用字符串的第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;
    }
}

这是我改变的。

  1. 您的代码声明了几个“迭代器”,它们基本上是指向您当前所在句子部分的整数。如果你有一个String对象,你真的只需要一个迭代器 - 声明所有这些变量都是多余的。
  2. Java非常灵活,可以传递价值并与之合作。请注意,每次我想将参数传递给另一个函数时,或者如果我想返回某些内容,我都不会创建新变量。这真的是Java的优雅和抽象之美(谷歌“面向对象编程”,如果你不清楚抽象意味着什么)
  3. 尝试使用您定义函数的方式进行创作。如果你知道你只是在计算元音,你知道你的isVowel函数最终会计算成一个整数,表示它是否是元音 - 是的,然后将“元音”增加1,否则不会。在isVowel函数中,如果任何条件求值为true,则返回1,否则返回0。请记住,函数一旦返回就停止,所以如果返回1,则函数结束,并且它不会读取“返回0”行。但是,如果条件为假,我们肯定知道它不是元音,所以我们只返回0.
  4. 如果需要新行,则无需添加System.out.println()。格式良好的Java代码应该尝试连续避免多个System.out.print调用 - 它们可以压缩成一个调用。
  5. 希望这会有所帮助。在您的Java之旅中尽情享受!!