2017-05-07 6 views
-3

für mein Schulprojekt muss ich ein Programm erstellen, das perfekte Zahlen basierend darauf abgibt, wie viele perfekte Zahlen der Benutzer (Lehrer) möchte. Der Benutzer kann eine beliebige Zahl von 1 bis 4 auswählen und es sollte so viele Zahlen anzeigen, wie der Benutzer wählt. Hier ist mein aktueller Code. Bitte ignorieren Sie die Methoden sumupTo, factorial, isprime und testGoldbach. Bitte schauen Sie sich nur die Methode der perfekten Zahlen an.Warum läuft mein Programm nicht korrekt?

import java.util.Scanner; 

public class MyMathB 
{ 

    public static int sumUpTo(int n) 
    { 
int sum = 0; 

for (int k = 1; k <= n; k++) 
    sum += k; 

return sum; 
    } 


    public static long factorial(int n) 
    { 
long f = 1; 

for (int k = 2; k <= n; k++) 
    f *= k; 

return f; 
    } 

    public static boolean isPrime(int n) 
    { 
    if (n <= 1) 
     return false; 

int m = 2; 

while (m * m <= n) 
{ 
    if (n % m == 0) 
return false; 
    m++; 
} 

return true; 
    } 

    public static void PerfectNumbers(int number) 
{ 
    System.out.println("How many perfect numbers would you like to see? Please enter an integer from 1 to 4"); 
    Scanner s = new Scanner(System.in); 
    int numbersToSee = s.nextInt(); 
    int counts = 0; 

    for(counts = 0; counts <= numbersToSee; counts++) 
    { 
     for (int n = 5; n <= 10000; n++) 
     { 
      int temp = 0; 

      for(int i = 1; i <= number/2; i++) 
      { 
       if (number % i == 0) 
       { 
        temp += i; 

       } 
       if (temp == number) 
       { 
        System.out.println(number); 
       } 

      } 
     } 


    } 
} 

    public static boolean testGoldbach(int bigNum) 
    { 
    for (int n = 6; n <= bigNum; n += 2) 
{ 
    boolean found2primes = false; 

     for (int p = 3; p <= n/2; p += 2) 
     { 
    if (isPrime(p) && isPrime(n - p)) 
     found2primes = true; 
    } 

    if (!found2primes) 
    { 
System.out.println(n + " is not a sum of two primes!"); 
return false; 
    } 
} 

return true; 
    } 


    public static void main(String[] args) 
    { 
Scanner kb = new Scanner(System.in); 
int n; 

do 
{ 
    System.out.print("Enter an integer from 4 to 20: "); 
    n = kb.nextInt(); 
} while (n < 4 || n > 20); 

kb.close(); 

System.out.println(); 
System.out.println("1 + ... + " + n + " = " + sumUpTo(n)); 
System.out.println(n + "! = " + factorial(n)); 
System.out.println("Primes: "); 
for (int k = 1; k <= n; k++) 
    if (isPrime(k)) 
System.out.print(k + " "); 
System.out.println(); 
System.out.println("Goldbach conjecture up to " + n + ": " + testGoldbach(n)); 
    } 
} 
+0

Sorry, es ist "Warum läuft mein Programm nicht richtig?" –

+3

Bearbeiten Sie den Titel, fügen Sie es nicht als Kommentar hinzu. Und erzähle uns, was passiert und was erwartet wird. – AntonH

+2

* "Bitte ignorieren Sie die Methoden sumupTo, factorial, isprime und testGoldbach" * Wenn diese für das Reproduzieren des Problemverhaltens irrelevant sind, sollten Sie sie aus dem Beispiel entfernen. Siehe http://stackoverflow.com/help/mcve. – Radiodef

Antwort

0

Sie nicht die Variable "Zahl" in Ihrer Methode deklarieren.

Edit: Sie haben nicht SET die variable Zahl an irgendetwas, ich meine letzte Aussage misworded.

+0

Wenn Sie die 'PerfectNumbers' Methode meinen, ist' number' ein Parameter; Es wird auf das Argument festgelegt, das beim Aufruf der Methode übergeben wird. Das einzige Problem ist: Nichts nennt es jemals. –

Verwandte Themen