【问题标题】:Errors with missing return statement缺少返回语句的错误
【发布时间】:2013-05-01 19:46:16
【问题描述】:

每次我尝试编译我的代码时,都会收到关于缺少返回语句的错误。关于我的代码有什么问题的任何想法?

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 所以我修复了一些问题,但现在我收到一个错误,我的变量“结果”可能没有被初始化,有什么建议吗?

    import javax.swing.JOptionPane;
    import java.io.*;
    public class facts
    {
      public static void main(String[]args)
    {

    String input;
    int x;
    char y,prime,perfect;
            do{
        input = JOptionPane.showInputDialog("Enter an integer");
        x = Integer.parseInt(input);
        if(x%2==0)
                System.out.println("The integer is even - it is evenly divisible by 2");
            else
                System.out.println("The integer is not even - it is not evenly divisible by 2");
            prime = isPrime(x);     
            if(prime == 't')
                System.out.println("The integer is a prime number");
            else
                System.out.println("The integer is not a prime number");
            perfect = isPerfect(x);
            if(perfect == 't')
                System.out.println("The integer is a perfect number");
            else
                System.out.println("The integer is not a perfect number");

        input = JOptionPane.showInputDialog("Enter Y for another number, anything else to quit");
        y = input.charAt(0);
        }while(y=='Y');
            System.out.println("Good Bye");

            System.exit(0);
}            
    public static char isPrime(int x)
    {
        for(int y=2;y<x;y++)
        {
            if(x%y==0)
                return 't';
            else 
                return 'f';
        }
    }
    public static char isPerfect(int x)


 public static int triAng(int x)
{
    int result,z,y = 1;
    while(y<=x)
    {
        z=y*(y+1)/2;
        y++;
        System.out.println(z);
        result = z;
    }
    return result;
}

【问题讨论】:

  • 要做的第一件事:修复缩进。第二件事:在所有if 语句主体周围添加大括号(或迟早)咬你。要做的第四件事:将返回 true 或 false 值的方法从返回 char 更改为返回 boolean。然后考虑如果x % y 永远不为0,你想做什么。
  • 我会说你至少错过了 2 个。
  • @JonSkeet 神秘的第三点是什么? :)
  • @skuntsel 我一直想知道这是否是 Jon Skeet 的传奇事实之一:meta.stackexchange.com/questions/9134/jon-skeet-facts 但我什么也找不到。
  • @skuntsel:为什么,当然是想出第三件事;)哎呀。 (我确定我确实还有一个。可能是为了编写更短的方法,然后我发现它们毕竟没有那么长。)跨度>

标签: java


【解决方案1】:

您需要在 for 循环之后放置 return 语句并返回默认的 char 或 null,以防循环不会被输入。而在你的isPerfect中,连if都不能输入。

对于您的variable 'result' might not have been initialized 问题,问题在于:

int result,z,y = 1;

只有 y 变量被初始化为 1。由于您可能没有进入 while 循环,那么 return 语句将返回 result 而它还没有被初始化,所以您需要显式地为其指定一个值( null 或任何整数)。 如果您希望它们都为 1,您可以这样做:

int result,z,y;
result = z = y = 1;

【讨论】:

    【解决方案2】:

    在您的isPerfect 方法中,如果if(x%y==0) 阻塞,则代码未进入的情况没有返回语句。

    【讨论】:

      【解决方案3】:

      例如,如果 x

       public static char isPerfect(int x)
          {
              int y,z=0;
              for(y=1;y<x;y++)
              {
                  if(x%y==0)
                  {
                      z+=y;
                      if(z==x)
                          return 't';
                      else
                          return 'f';
                  }
              }
          }
      

      【讨论】:

        【解决方案4】:

        isPrimeisPerfect 方法中,您的代码可能不会进入for 循环。要对其进行调整,请在这些方法的末尾放置一个默认返回或抛出异常。

        【讨论】:

          猜你喜欢
          • 2013-04-27
          • 1970-01-01
          • 2013-09-18
          • 2013-03-21
          • 2016-01-04
          • 1970-01-01
          • 1970-01-01
          • 2014-08-20
          • 1970-01-01
          相关资源
          最近更新 更多