2016-11-05 5 views
0

Hellooo 1과 정수 및 사용자 및 요소에 의해 입력 된 모든 완벽한 숫자를 표시하려고합니다. 난 괜찮아 그건 내 출력이 매우 내가 원하는 출력과 일치하지 않음을 그냥 작업 코드 ... 여기 자바 프로그래밍을 사용하여 완벽한 숫자

내 코드입니다 가지고 :

import java.util.Scanner;  

public class PerfectNumbers {  
    public static boolean isPerfect(int a) {    
     int n = a; 
     int sum = 0; 
     boolean perfect; 

     while (n-- >1) {     
      if(a%n==0) 
       sum = sum + n; 
      } 
      if (sum == a) { 
       perfect = true; 
      } else { 
       perfect = false; 
      } 
      return perfect; 
     } 

    public static void main(String[] args) { 
     Scanner input = new Scanner(System.in); 
     System.out.print("Enter the number up to which you would like to look for perfect numbers:"); 
     int i = input.nextInt(); 
     String factors = "";   
     System.out.printf("Looking for perfect numbers from 1 to %d%n", i); 

     while (i > 0) { 
      if (PerfectNumbers.isPerfect(i) == true) { 
       int w = i-1; 
       while (w-- > 1) { 
        if(i % w == 0) 
         factors = factors + " " + Integer.toString(w); 
       } 
       System.out.println(i + " is a perfect number it's factors are:" + factors); 
      } 
      i = i - 1; 
     } 
    } 
} 

이이 무엇 내 출력 반환 This is what my output returns

하지만 대신

가 가 가

But I want it to display this instead

가 가
+0

각 정수 다음에 빈 문자열로 'factors'를 재설정해야합니다. – Steve

+0

요인을 어떻게 "재설정"합니까? 이 의미는 빈 문자열과 동일합니까? 나는 초보자이므로 아직 확실하지 않다. – cossii

+0

'while (i> 0)'대신'int j = 1;'을 추가하고 조건을'while (j <= i)'로 변경한다. 또한'i = i - 1;을'j = j + 1;'로 변경하십시오. 주문이 고쳐질 것입니다. – Gendarme

답변

-2
는 역순으로

당신 루프, FR 말은이를 표시 할 1000에서 0으로. 요인

편집

솔루션 제안에 루프에 대한 귀하의

while (i>0) 

for (int j=1;j<i+1;j++) 

같은 일을 변경, 변경 내용 만 메인 방법에

public static void main(String[] args) { 

    Scanner input = new Scanner(System.in); 

    System.out.print("Enter the number up to which you would like to look for perfect numbers:"); 
    int inp = input.nextInt(); 


    System.out.printf("Looking for perfect numbers from 1 to %d%n", inp); 

    for(int j=1;j<inp+1;j++) { 

     if (PerfectNumbers.isPerfect(j) == true) { 


     String factors = ""; 
     for (int w=1; w<j;w++) { 

     if(j % w == 0) 
      factors = factors + " " + Integer.toString(w); 

     } 
     System.out.println(j + " is a perfect number it's factors are:" + factors); 
    } 

    } 
} 
+0

'While'과'For'는 자바에서는 키워드가 아닙니다. 그리고 문제는 프로그램이 잘못된 출력 (248은 6의 인자가 아님)을 보여 주며 출력이 잘못된 순서가 아니라는 것입니다. – Gendarme

+0

while과 for는 java의 키워드가 아닙니까? 당신이 무슨 말을하는거야?????? – Massimo

+0

실제로 문제는 프로그램이 잘못된 출력과 잘못된 순서를 보여주고 있다는 것입니다./haha ​​ – cossii

-1

그것을해야할까요? 이런 식으로 쓰여진거야?

import java.util.Scanner; 

public class PerfectNumbers { 

    public static boolean isPerfect(int a) { 

     int n = a; 
     int sum = 0; 
     boolean perfect; 

     while (n-- > 1) { 

      if (a % n == 0) 
       sum = sum + n; 

     } 
     if (sum == a) { 

      perfect = true; 

     } else { 

      perfect = false; 

     } 

     return perfect; 

    } 

    public static void main(String[] args) { 

     Scanner input = new Scanner(System.in); 

     System.out.print("Enter the number up to which you would like to look for perfect numbers:"); 
     int i = input.nextInt(); 
     String factors = ""; 

     System.out.printf("Looking for perfect numbers from 1 to %d%n", i); 

     for (int j = 1; j < i + 1; j++) { 

      if (PerfectNumbers.isPerfect(i) == true) { 

       int w = i - 1; 

       for (j = 1; j < i + 1; j++) { 

        if (i % w == 0) 
         factors = factors + " " + Integer.toString(w); 

       } 
       System.out.println(i + " is a perfect number it's factors are:" + factors); 
      } 
      i = i - 1; 
     } 
    } 
} 
-1

이 코드는 정상적으로 작동합니다. 당신이 예상대로 출력으로 제공합니다 .. 공용 클래스 PerfectNumbers {

public static boolean isPerfect(int a) { 

    int n = a; 
    int sum = 0; 
    boolean perfect; 

    while (n-- >1) { 

     if(a%n==0) 
      sum = sum + n; 

    } 
    if (sum == a) 
    { 

     perfect = true; 

    } 
    else 
    { 

     perfect = false; 

    } 

     return perfect; 

    } 

public static void main(String[] args) { 
    // TODO Auto-generated method stub 

    Scanner input = new Scanner(System.in); 

    System.out.print("Enter the number up to which you would like to look for perfect numbers:"); 
    int i = input.nextInt(); 


    System.out.println("Looking for perfect numbers from 1 to "+i); 
    int inc = 1; 
    while (inc < i) { 

     if (PerfectNumbers.isPerfect(inc) == true) { 
      String factors = ""; 
      int w = inc-1; 
      int j = 1; 
      while (j < w) { 

       if(inc % j == 0) 
        factors = factors + " " + Integer.toString(j); 

       j++; 
      } 
      System.out.println(inc + " is a perfect number it's factors are:" + factors); 

     } 
     inc = inc + 1; 
    } 
    input.close(); 
} 

}

+1

메모리 누출을 방지하려면 리소스가 완료된 후에 닫습니다. –

+0

유용하지 않다는 이유 –

+0

아아 어디서 잘못 본지 알 겠어! 고마워요 :) – cossii

0

하나 코드

를 작동하고 여기

루프 동안 factors = "";이 추가 코드에 생각

public class PerfectNumbers { 

    public static boolean isPerfect(int a) { 
     int n = a; 
     int sum = 0; 
     boolean perfect = false; 

     while (n-- >1) { 
      if(a%n==0) { 
       sum = sum + n; 
      } 
      if (sum == a) { 
       perfect = true; 
      } else { 
       perfect = false; 
      } 
     } 
     return perfect; 
    } 

    public static void main(String[] args) { 
     Scanner input = new Scanner(System.in); 
     System.out.print("Enter the number up to which you would like to look for perfect numbers:"); 
     int i = input.nextInt(); 
     String factors = ""; 
     System.out.printf("Looking for perfect numbers from 1 to %d%n", i); 
     while (i > 0) { 
      if (PerfectNumbers.isPerfect(i) == true) { 
       int w = i-1; 
       while (w-- > 1) { 
        if(i % w == 0) 
        factors = factors + " " + Integer.toString(w);     
       } 
       System.out.println(i + " is a perfect number it's factors are:" + factors); 
       factors = ""; 
      } 
      i = i - 1; 
     } 
    } 
} 
0

Java 8 스트림 기반 솔루션은 다음과 같습니다.

public class PerfectNumbers { 
    public static void main(String[] args) { 
     IntStream.range(1, 500) 
       .filter(n -> factors(n).sum() == n) 
       .forEach(n -> System.out.println(n + " is a prefect numbers its factors are " 
        + factors(n).mapToObj(Integer::toString).collect(Collectors.joining(" ")))); 
    } 

    private static IntStream factors(int n) { 
     return IntStream.range(1, n).filter(d -> n % d == 0); 
    } 
} 
관련 문제