# Problem bei meiner Hausaufgabe bitte schnelle lösung ;)



## Neondream (11. Dez 2009)

sooo meine aufgabe:

Schreibe ein programm ZahleTeiler, das für eine gegebene gane Zahl N element der natürlichen Zahlen herausfindet, welche ganze zahl zwischen 1 und N die meisten ganzzahligen teiler besitzt und wieviele dies sind.

bsp: bei N = 5 . Lösung: die zahl 4 - 3 ganzzahlige teiler (1,2,4 - 3 stück)

meine lösung:


public class ZaehleTeiler 
{

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


		int N = Integer.parseInt(args[0]);		

		int[] zaehler;
		zaehler = new int[N];
		int j = 1;
		int z = 0;

		//zaehler hochzaehlen
		for (int i=1; i <= N; i++) 
		{
			while (j<=i)
			{
				if (i%j == 0) 
				{
					//teilermengen an i-ter stelle bestimmen
					z++;
					zaehler_ = z;
				}
				j++; 
			}
			j = 0;
		}
		//bestimmung der größten teilermenge an i-ter stelle
		double max = Double.NEGATIVE_INFINITY;
		for (int a = 0; a <= zaehler.length; a++)
		{
			if (zaehler[a] > max) 
			{
				max = zaehler[a];
			}
		}

		System.out.print(max);




	}

}

so das problem ist das programm gibt mir gar nichts aus....
nach meinen überlegungen müsste es jedoch theoretisch funktionieren....
die ausgabe ist noch nicht die komplette allerdings, geht es auch ums programm 

ich denke es liegt an der füllung des arrays das es die werte nicht annimmt habe aber keine ahnung,

erbitte schnelle lösung da die aufgabe b ereits übermorgen abgegeben werden muss

DANKESCHÖN

greeetz
neon_


----------



## javimka (11. Dez 2009)

Verwende in Zukunft bitte [java)...[/code] Tags rund um deinen Code, sonst ist es kaum leserlich.

Du hast ja hier zahlreiche Fehler drin. Fängt damit an, dass du nach deiner while-Schleife j=0 setzt und dann beim nächsten Aufruf der while-Schleife i%j logischerweise nicht berechnet werden kann.

Der nächste Fehler tritt in der while-Schleife auf. Weil dein Abbruchkriteriumin der for-Schleife i <= N ist, wird i irgendwann N sein. In der while-Schleife wird dann auf das N-te Element von zaehler zugegriffen, welches aber nicht exisitert, weil das erste Element eines Arrays immer das 0-te ist und das letzte dementsprechend das N-1-te. Es muss i<N heissen.

Genau das gleiche Problem tritt auch bei der zweiten for-Schleife auf.

Was meinst du mit einer "schnellen Lösung", willst du mich stressen? ueh:


----------



## Neondream (11. Dez 2009)

ja genau ist ja klar 
fehler die einem direkt vor der nase liegen erkennt man bekanntlich nicht...
und das j = 0 habe ich mir nur bei der fehler suche hinzugedacht 


ja unter stress arbeiten manche doch eben besser :bae:


DANKESCHÖN :applaus:


allerdings kommt bei der lösung imme rnoch nicht das gesuchte ergebniss raus sondern lediglich N -1 
iwie packt er in das array nur die werte von 1,2,3,4.... ein und nicht die gesuchten teiler

wäre für weitere hilfe sehr dankbar


----------



## DigitalForce (12. Dez 2009)

Hi, das müsste funktionieren....
bis 100000 gehts noch aber dauert es... ist nicht optimiert..


```
public class ZaehleTeiler {

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

    }

    public static void berechnen(int n) {
        int zahl = 0;
        int anzahlTeilungen = 0;
        int counter = 0;

        for (int i = n; i >= 1; i--) {
            for (int x = i; x >= 1; x--) {
                if (i % x == 0) {
                    counter++;
                }
            }
            if (counter > anzahlTeilungen) {
                anzahlTeilungen = counter;
                zahl = i;
            }
            counter = 0;
        }
        ausgabe(zahl, anzahlTeilungen);
    }

    public static void ausgabe(int zahl, int anzahlTeilungen) {
        System.out.println("Die meisten Teiler hat die Zahl : "
                + zahl + " mit " + anzahlTeilungen + " Teiler");
        System.out.print(" ( ");
        for (int i = zahl; i >= 1; i--) {
            if (zahl % i == 0) {
                System.out.print(i + " ");
            }
        }
        System.out.print(")");
        System.out.println("");
    }
}
```


----------

