1

そのため、最初の数値のみが 2 回チェックされ、2 番目の数値は考慮されないという奇妙な出力が発生しています。助けてください。

コード:-

import java.util.Scanner;

public class Amicable
{
    private static int a,b;
    private static String m,n; 

    public static void main()
    {       
        acceptNumbers();

        if (firstNumber() == secondNumber())
        {
            System.out.println(a+" and "+b+" are amicable numbers");
        }

        else    System.out.println(a+" and "+b+" are not amicable numbers");
    }

    public static void acceptNumbers()
    {
        Scanner sc = new Scanner(System.in);

        int count=0;

        System.out.print("Enter two numbers [ separated by a ',' ] : ");
        String input = sc.nextLine(); 

        System.out.println();

        for (int i = 0; i < input.length(); i++)
        {
            char c = input.charAt(i);

            if (c == ',')
            {
                count++;
                if (count == 1)
                {
                    m = input.substring(0,i);
                    n = input.substring(0,i);
                }

                break;
            }            
        }

        if (count == 0)
        {
             System.out.println("Invalid operation : You have entered only 1 number");
        }        

        m = m.trim(); n = n.trim();

        a = Integer.valueOf(m);
        b = Integer.valueOf(n);
    }

    public static int firstNumber()
    {
        int a1,a2=0;

        for (int i = 0; i < m.length()-1; i++)
        {
            a1 = Integer.valueOf(m.charAt(i));

            if (a%a1 == 0)    a2 = a2+a1;        
        }

        return a2;
    }

    public static int secondNumber()
    {
        int b1,b2=0;

        for (int i = 0; i < n.length()-1; i++)
        {
            b1 = Integer.valueOf(n.charAt(i));

            if (b%b1 == 0)    b2 = b2+b1;        
        }       

        return b2;
    }
}

そして、ここに出力があります:-

2 つの数字を入力してください [「,」で区切って]: 248 、 222

248と248は友好的な数字です

4

3 に答える 3

3

あなたが持っているので、あなたの m と n は等しいです。

m = input.substring(0,i);
n = input.substring(0,i);

次のように変更します。

m = input.substring(0,i);
n = input.substring(i+1);

ところで、あなたは多くの不必要なこと、完全な解決策を行っています(例外は気にしません):

import java.util.Scanner;

public class Amicable {
    public static void main(String args[]) {
        try {
            Scanner sc = new Scanner(System.in);
            System.out.print("Enter two numbers [ separated by a ',' ] : ");
            String input = sc.nextLine();

            String[] numbers = input.split(",");

            int num1 = Integer.parseInt(numbers[0].trim());
            int num2 = Integer.parseInt(numbers[1].trim());
            int sum1 = 0, sum2 = 0;
            for (int i = 1; i <= num1; i++) {
                if (num1 % i == 0)
                    sum1 += i;
            }
            for (int i = 1; i <= num2; i++) {
                if (num2 % i == 0)
                    sum2 += i;
            }
            if (sum1 == sum2)
                System.out.println(num1 + " and " + num2
                        + " are amicable numbers");
            else
                System.out.println(num1 + " and " + num2
                        + " are not amicable numbers");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

コードの一部: http://www.daniweb.com/software-development/java/code/304600/amicable-numbers

于 2013-04-06T16:31:58.260 に答える
0

abは と から派生しmn後者はまったく同じ値に初期化されます。

                m = input.substring(0,i);
                n = input.substring(0,i);

nに設定するつもりでしたか

                n = input.substring(i+1);

?

于 2013-04-06T16:32:30.130 に答える
0
m = input.substring(0,i);
n = input.substring(0,i);

mn同じ値を持っています。

n次のようにする必要があります。

n = input.substring(i+1);

これで、2 番目の番号が に割り当てられnます。

于 2013-04-06T16:33:49.157 に答える