Java Fehler in Java-Code

Status
Für weitere Antworten geschlossen.

herrbaert

Cadet 2nd Year
Registriert
Juli 2014
Beiträge
28
Hallo Leute,

ich brauche eure Hilfe bei meiner Java-Hausaufgabe.

Aufgabenstellung:

1. Aufgabe:
Graf Zahl findet Zahlen knuddelig, welche größer als die Summe aller ihrer echten Teiler (die
Summe aller Teiler ohne die Zahl selbst) sind. Beispiele sind:

9: 1 + 3 = 4. 9 ist also eine knuddelige Zahl (zumindest für Graf Zahl).
12: 1 + 2 + 3 + 4 + 6 = 16. 12 ist nicht knuddelig.

Graf Zahl wünscht sich nun ein Programm das ihm die ersten n knuddeligen Zahlen
beginnend von 2 auflistet. Gehen Sie dabei wie folgt vor:

a) Erstellen Sie eine Methode int[] arrayAnlegen(). Hier werden mit Hilfe eines
Scanners 2 Zahlen eingelesen. Die erste Zahl a gibt an ab welcher Zahl begonnen
werden soll die knuddeligen Zahlen zu berechnen (Achten Sie darauf, dass nur Zahlen
ab 2 knuddelig sein können). Die zweite Zahl b gibt an wie viele knuddelige Zahlen
berechnet werden sollen. Anschließend wird ein Array der Größe b angelegt und mit
den ersten b knuddeligen Zahlen beginnend von a aufgefüllt (Ihr Programm sollte
nicht abstürzen wenn sich Graf Zahl vertippt und eine negative Zahl eingibt).
Für a = 3 und b = 4 sollte das Array also mit den Zahlen 3, 4, 5, 7 befüllt werden.

Code:
import java.util.Scanner;

 public class JavaHausaufgabe5 {

     public static void main(String[] args) {
         arrayAnlegen();
         
        
        
        
        
        
        

     }
    
     public static void arrayAnlegen() {
         Scanner sc = new Scanner(System.in);
         int startZahl, anzahlKnuddeligeZahlen;    
         do {
             System.out.println("Bitte geben Sie eine Zahl fuer a >= 2 ein");
             startZahl = sc.nextInt();
         } while (startZahl < 2);
         do {
             System.out.println("Bitte geben Sie eine Zahl fuer b >= 0 ein");
             anzahlKnuddeligeZahlen = sc.nextInt();
         } while (anzahlKnuddeligeZahlen < 0);
         int counterKnuddeligeZahl = 0;
         int summeTeiler = 0;
         int[] Array = new int[anzahlKnuddeligeZahlen];
         while (counterKnuddeligeZahl <= anzahlKnuddeligeZahlen) {
             for (int i = 1; i < startZahl; i++) {
                 if (startZahl % i == 0) {
                         summeTeiler += i;
                 }
                
             }
             for (int j = 0; j < anzahlKnuddeligeZahlen; j++) { 
                 if (summeTeiler < startZahl) {
                     Array[j] = startZahl;                        
                     counterKnuddeligeZahl = counterKnuddeligeZahl + 1;
                 }
             } 
             startZahl++;
                       
         }    
            
             for (int k = 0; k < anzahlKnuddeligeZahlen; k++) {
                 System.out.print(Array[k] + ", ");  
             }
        
     }
 }

Wenn ich nun für a 3 eingebe und für b 4, dann erhalte ich: 81606, 81606, 81606, 81606.
Rauskommen soll aber: 3, 4, 5, 7

Die Formattierung bitte nicht beachten, sieht hier etwas wirr aus.

vielen Dank!
 
Zuletzt bearbeitet:
Hi,

und du möchtest, dass wir dir deine Aufgabe lösen, um dir den Lerneffekt und die Eigenleistung zu ersparen oder wie stellst du dir das vor?

VG,
Mad
 
Ungeachtet der Aufgabe gibts hier die Raute oben rechts im Editor, der die Code Eingabe ermöglicht. Dann sieht das auch gut aus ;) Einfach Raute drücken, Copy Past ohne Ändern aus der IDE und das passt.
 
Madman1209 schrieb:
Hi,

und du möchtest, dass wir dir deine Aufgabe lösen, um dir den Lerneffekt und die Eigenleistung zu ersparen oder wie stellst du dir das vor?

VG,
Mad

Ich habe bereits länger darüber nachgedacht.
 
nur kurz überflogen.. musst du summeTeiler nicht zurücksetzen bei jeder neuen knuddeligen zahl?
 
Debugge das Ding mal. Da wirst du sehen was nicht stimmt. Hab ich grad gemacht. Beachte dabei JohnnieWalker's Rat und schau dir an was passiert. Dabei schrittweise vorgehen, in Eclipse is das Step Over mit F6 im Debug Modus.
 
JohnnieWalker schrieb:
nur kurz überflogen.. musst du summeTeiler nicht zurücksetzen bei jeder neuen knuddeligen zahl?

stimmt, jedoch kommt immer noch nicht das richtige Raus.

Code:
import java.util.Scanner;

public class JavaHausaufgabe5 {

    public static void main(String[] args) {
        arrayAnlegen();
        
        
        
        
        
        
        

    }
    
    public static void arrayAnlegen() {
        Scanner sc = new Scanner(System.in);
        int startZahl, anzahlKnuddeligeZahlen;    
        do {
            System.out.println("Bitte geben Sie eine Zahl fuer a >= 2 ein");
            startZahl = sc.nextInt();
        } while (startZahl < 2);
        do {
            System.out.println("Bitte geben Sie eine Zahl fuer b >= 0 ein");
            anzahlKnuddeligeZahlen = sc.nextInt();
        } while (anzahlKnuddeligeZahlen < 0);
        int counterKnuddeligeZahl = 0;
        int summeTeiler = 0;
        int[] Array = new int[anzahlKnuddeligeZahlen];
        while (counterKnuddeligeZahl <= anzahlKnuddeligeZahlen) {
            for (int i = 1; i < startZahl; i++) {
                if (startZahl % i == 0) {
                        summeTeiler += i;
                }
                
            }
            for (int j = 0; j < anzahlKnuddeligeZahlen; j++) { 
                if (summeTeiler < startZahl) {
                    Array[j] = startZahl;                        
                    counterKnuddeligeZahl = counterKnuddeligeZahl + 1;
                }
            } 
            startZahl++;
            summeTeiler = 0;           
        }    
            
            for (int k = 0; k < anzahlKnuddeligeZahlen; k++) {
                System.out.print(Array[k] + ", ");  
            }
        
    }
}
Ergänzung ()

Nero1 schrieb:
Debugge das Ding mal. Da wirst du sehen was nicht stimmt. Hab ich grad gemacht. Beachte dabei JohnnieWalker's Rat und schau dir an was passiert. Dabei schrittweise vorgehen, in Eclipse is das Step Over mit F6 im Debug Modus.

Wie geht das bei Notepad++?
 
Gar nicht, weil Notepad++ ein Texteditor ist, keine IDE o.O

Lade dir mal (vorzugsweise) Eclipse runter und lerne mit einer IDE zu arbeiten. Als Anfänger sollte man mMn nicht mit Editoren arbeiten, auch wenn ich das so oder so nicht machen würde, egal auf welchem Level. Das machts nur unnötig schwer und kompliziert, auch wenn das manche Lehrer und Profs net verstehen.
Damit findest du wesentlich eher Fehler, nämlich auch den, dass man Scanner nach Beendigung wieder mit (hier)
Code:
sc.close()
schließen sollte ;)
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben