2013-04-06 26 views
1

所以我有這個奇怪的輸出,其中只有第一個數字被檢查兩次,而第二個數字甚至沒有考慮。請幫助。Amicable numbers Java程序

代碼: -

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 are amicable numbers

回答

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

0

ab源自mn,後者被初始化爲完全相同的值:

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

您的意思是設置n

   n = input.substring(i+1); 

+0

無論我使用什麼作爲兩個數字[我糾正了上述錯誤]都顯示爲友好 – 2013-04-06 16:35:30

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

mn都具有相同

n應該是:

n = input.substring(i+1);

而且現在第二個數字將被分配到n