0

コードをコンパイルしようとするたびに、return ステートメントが見つからないというエラーが表示されます。私のコードの何が問題なのかについてのアイデアはありますか?

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx だから、いくつかのことを修正しましたが、変数「結果」が初期化されていない可能性があるというエラーが表示されます。何か提案はありますか?

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

4 に答える 4

2

forループに入らない場合に備えて、ループの後に return ステートメントを配置し、デフォルトの char または null を返す必要があります。また、 yourisPerfectには、 if も入力できない場合があります。

あなたのvariable 'result' might not have been initialized問題では、問題はその行です:

int result,z,y = 1;

変数のみがy1 に初期化されます。while ループに入らない可能性があるため、return ステートメントはresult初期化されずに返されるため、値 (null または任意の整数) を明示的に指定する必要があります。それらをすべて1にしたい場合は、次のことができます。

int result,z,y;
result = z = y = 1;
于 2013-05-01T19:47:50.527 に答える
0

あなたのメソッドでは、コードが ifブロックisPerfectに入らない場合の return ステートメントがありません。if(x%y==0)

于 2013-05-01T19:48:29.553 に答える
0

たとえば、x <= 1 の場合、または x%y が決して 0 でない場合、次のコードは返されない可能性があります。

 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';
            }
        }
    }
于 2013-05-01T19:48:42.053 に答える
0

isPrimeandメソッドではisPerfect、コードが for ループに入らない場合があります。これを調整するには、これらのメソッドの最後にデフォルトのリターンを配置するか、例外をスローします。

于 2013-05-01T19:48:54.927 に答える