Teiler ermittlen - Array erweitern?

Status
Nicht offen für weitere Antworten.

S.T.O.R.M.

Mitglied
Hallo zusammen,

ich versuche eine Java-Programm zu schreiben, das folgendes macht:
Es wird eine Zahl z initialisiert z.B. int z=24. Jetzt soll das Programm mir alle Teiler zwischen 1 und z ausgeben, den größten Teiler und die Anzahl aller Teiler.
Für die Teiler würde ich gerne ein Array deklarieren, aber mir fehlt ja am Anfang die Größe um es zu initialisieren.

Hier ist mein Ansatz:
Java:
public class Teiler
{
    public static void main(String[] args)  {
        int zahl=24;
        int j=0;
        int[] teiler;
        int anzahlTeiler=0;
        for (int i=2; i<zahl; i++)  {
            if(zahl%i==0)   {
                anzahlTeiler++;
                i=teiler[j];
                j++;
            }
        }
        System.out.println(teiler);
    }
}

Der Compiler meldet natürlich einen Fehler, da teiler nicht initialisiert wurde. Hat jemand eine Idee wie ich das mit dem Array hinbekomme ohne die Schleife doppelt durchlaufen zu müssen? :bahnhof:

Gruß,
Storm
 

javimka

Top Contributor
Was ist an einem Array denn "alienmäßig"? Ist jedenfalls immer noch die allerschnellste Möglichkeit, mehrere Elemente eines Typs zu verwalten.

Aber im Beispiel hier, würde sich ArrayList/LinkedList sicherlich anbieten.
 

S.T.O.R.M.

Mitglied
Danke für die schnelle Antwort. So scheint es ja dann zu funktionieren:
Java:
import java.util.*;
public class Zwei
{
    public static void main(String[] args)  {
        int zahl=24;
        int j=0;
        LinkedList teiler=new LinkedList();
        int anzahlTeiler=0;
        for (int i=2; i<zahl; i++)  {
            if(zahl%i==0)   {
                anzahlTeiler++;
                teiler.add(i);
                j++;
            }
        }
        System.out.println(teiler);
    }
}

Wenn man solche Listen hat, wozu benutzt man dann eigentlich Arrays? Diese Listen sind doch viel flexibler!?

Edit: noch eine Frage: Gibt es eine Möglichkeit auf spezielle Elemente dieser Liste zuzugreifen wie bei einem Array mit z.B. array[3]? Oder müsste ich anstatt dessen mit Vektoren arbeiten?
 
Zuletzt bearbeitet:

Murray

Top Contributor
Wenn man solche Listen hat, wozu benutzt man dann eigentlich Arrays? Diese Listen sind doch viel flexibler!?
Genauso könnte man fragen: warum verwendet man die primitiven Typen int,double etc, wo man doch auch mit den Wrapper-Typen Integer, Double etc. arbeiten könnte. In manchen Situationen möchte/muss man sich den Overhead, den die Listen gegenüber den Arrays haben, eben sparen.

Edit: noch eine Frage: Gibt es eine Möglichkeit auf spezielle Elemente dieser Liste zuzugreifen wie bei einem Array mit z.B. array[3]? Oder müsste ich anstatt dessen mit Vektoren arbeiten?
(Linked)List.get( int index);
Mit Vectoren sollte man nicht mehr arbeiten; das ist ein Relikt aus den Anfangszeiten von Java und nur noch aus Kompatibilitätsgründen vorhanden.
 

Landei

Top Contributor
Besser:
Java:
List<Integer> teiler=new ArrayList<Integer>();
Dann funktioniert auch int x = List.get(index); ohne Casts.
LinkedList ist dann gut, wenn viel am Anfang oder der Mitte eingefügt oder gelöscht wird, und wenn man keinen Zugriff über index braucht (die ganze Liste durchgehen ist OK). ArrayList ist gut, wenn nur am Ende eingefügt oder gelöscht wird, wenn man die Endgröße schon schätzen kann und wenn man Zugriff über Index benötigt.
 

faetzminator

Gesperrter Benutzer
Ein Array bietet sich grundsätzlich kann, wenn man eine Datenmenge hat, welche bereits im Vorherein bekannt ist und sich nicht ändert ("ich habe 5 Elemente, und das hab ich immer, solang ich das Array brauch").
Ansonsten nimmt man meistens eine List, z.B. eine ArrayList arbeitet intern sowieso mit einem Array des jeweiligen Datentyps.
 

Landei

Top Contributor
sie sind keine eigene Klassen und somit muss ziemlich viel aufwand betrieben werden sie dementsprechend hinzubiegen

Da kann ich nur zustimmen. Java ist eben nur eingeschränkt objektorientiert, sonst dürfte es primitive Typen, Arrays und - meiner Meinung nach - null nicht geben (dafür fehlt ein ordentlicher void-Typ). Immer wenn es um diese Sachen geht, kommen dann auch prompt unschöne Ecken und Kanten zum Vorschein. Arrays "können" z.B. nicht richtig mit Generics, und beherbergen Java's größtes Typ-Loch:
Java:
String[] strings = { "eins", "zwei" };
Object[] object = strings;
objects[0] = Integer.valueOf(1); //Bumm!!!
 

javimka

Top Contributor
0x7F800000 zuliebe, schreibe ich nichts mehr zur Array/List Verwendung, aber den mit dem "sorry aber das ist einfach nur Unsinn ! " von bygones kann ich schon nicht kampflos so stehen lassen ;)

Folgedes Beispiele erstellt ein Array und eine ArrayList mit n int/Integer und misst 3 Mal abwechslungsweise die benötigten Laufzeiten, um alle Zahlen in der Datenstruktur zu addieren.

Java:
import java.util.*;
import java.util.Random;

public class ArrayOrList {

	private int n;
	private int[] array;
	private ArrayList<Integer> arrayList;
	
	public ArrayOrList(int n) {
		this.n = n;
		this.array = new int[n];
		this.arrayList = new ArrayList<Integer>();
		Random rand = new Random();
		for (int i=0;i<n;i++) {
			int v = rand.nextInt(100);
			array[i] = v;
			arrayList.add(v);
		}
	}
	
	private void start() {
		testArray();
		testArrayList();
		
		testArray();
		testArrayList();
		
		testArray();
		testArrayList();
	}
	
	private void testArray() {
		int sum = 0;
		long t0 = System.nanoTime();
		for (int i=0;i<n;i++) {
			sum += array[i];
		}
		long dt = System.nanoTime()-t0;
		System.out.println("Array Test: "+dt/1000000+" ms");
	}
	
	private void testArrayList() {
		int sum = 0;
		long t0 = System.nanoTime();
		for (int i=0;i<n;i++) {
			sum += arrayList.get(i);
		}
		long dt = System.nanoTime()-t0;
		System.out.println("ArrayList Test: "+dt/1000000+" ms");
	}

	public static void main(String[] args) {
		ArrayOrList arrayOrList = new ArrayOrList(4000000);
		arrayOrList.start();
	}
}


Das Resultat auf meinem Computer (Windows 7, 64-Bit, Java 1.6.0_16, Core2 Duo 2.53GHz) sieht für n = 4 Mio Elemente folgendermassen aus:

Array Test: 9 ms
ArrayList Test: 49 ms
Array Test: 8 ms
ArrayList Test: 49 ms
Array Test: 8 ms
ArrayList Test: 35 ms

Es würde mich noch interessieren, ob das auf einem 32er System auch solche Unterschiede gibt. Vielleicht hat das ja gerade jemand eines parat :)

Die LinkedList ist für diese Aufgabe übrigens nicht im geringsten konkurrenzfähig. Für n = 100'000 Elemente dauert es über 8 Sekunden.
 

Marco13

Top Contributor
Auch wenn Microbenchmarks immer heikel sind: Bei diesem wurden zumindest einige ""Grundregeln"" für's Microbenchmarking beachtet.
Trotzdem sagt das in dieser Form nicht viel aus: Etwas sinnvoller wäre, einen Integer array[] statt eines int array[] zu verwenden, weil man im Moment nicht weiß, wieviel Zeit für die Arrayzugriffe draufgeht, und wie viel für die Umwandlungen von Intger in int. Danach könnte man noch den "RANGE_CHECK" in der ArrayList ausschalten, und aus Neugier, und das ganze dann nochmal mit -server parameter starten... dann dürften sie sich schon etwas annähern. Interessanterweise können bei solchen Benchmarks schon solche Fragen einen Einfluss haben wie ob dort
[c]private ArrayList<Integer> list[/c]
oder
[c]private List<Integer>[/c]
steht, und ob es noch andere List-Implementierungen in diesem Programm gibt... Wie auch immer: Wenn es um den letzten Fitzel Performance geht, liegen Arrays praktisch immer vorne - aber ob man ein paar Prozent Geschwindigkeit gegen eine potentiell(!!!) unschönere Struktur tauschen will, muss man sich dann halt überlegen...
 

javimka

Top Contributor
Ich habe hier ein int[] array verwendet, S.T.O.R.M eines verwendet hat. Hier habe ich es mit einem Interger[] array getestet:
Array Test: 10 ms
ArrayList Test: 49 ms
Array Test: 10 ms
ArrayList Test: 48 ms
Array Test: 10 ms
ArrayList Test: 35 ms

Und hier habe ich "private List" statt eine "private ArrayList" verwendet. (geht etwas langsamer)
Array Test: 10 ms
ArrayList Test: 55 ms
Array Test: 10 ms
ArrayList Test: 55 ms
Array Test: 9 ms
ArrayList Test: 48 ms
 

0x7F800000

Top Contributor
In der "Praxis" habe ich aber in 99% der Fälle feststellen müssen, dass es wesentlich angenehmer ist, den faktor 5 in kauf zu nehmen, statt tagelang an einem Programm zu hocken, nur um dieses dann später wegzuwerfen... :bahnhof:

Wenn man mit solchen tests direkt an die Knochen rangeht, muss man auch im Hinterkopf behalten, dass solche Vorteile eh unter einer größeren Architektur vergraben werden könnten, dann hat man am ende eben Laufzeit von 510ms statt 550ms , und hat sich dafür dreimal so lange das Hirn zerbrochen... Und am Ende stellt sich auch noch heraus, dass diese ganzen Arrays auch draußen am Interface des Pakets zu sehen sind, und dann benutzt es kein Mensch^^
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Größter gemeinsamer Teiler: mein Code Java Basics - Anfänger-Themen 6
V Beliebige Dreistellige Zahl Teiler finden Java Basics - Anfänger-Themen 4
KogoroMori21 Größten gemeinsamen Teiler finden Java Basics - Anfänger-Themen 7
F Summe aller echten Teiler Java Basics - Anfänger-Themen 2
F Summe aller echten Teiler und Zahlen zurückgeben Java Basics - Anfänger-Themen 1
LikeManuel Anzahl der Teiler Java Basics - Anfänger-Themen 6
L Größter gemeinsamer Teiler Java Basics - Anfänger-Themen 9
B größter gemeinsamer teiler Java Basics - Anfänger-Themen 6
K größter gemeinsamer Teiler berrechnen, funktioniert nur bei bestimmten Zahlen Java Basics - Anfänger-Themen 2
X Perfekte Zahlen mit Teiler ausgeben! Java Basics - Anfänger-Themen 29
S Zahl mit maximaler Anzahl von Teiler Java Basics - Anfänger-Themen 2
U Aufgabe - Teiler Java Basics - Anfänger-Themen 12
B Teiler einer Zahl ermitteln Java Basics - Anfänger-Themen 12
0 Anzahl der (primen) Teiler einer Zahl? Java Basics - Anfänger-Themen 6
G Ganzzahligen Teiler einer Eingabezahl k Java Basics - Anfänger-Themen 12
D ist a teiler von b? mit a und b gebrochene zahlen. Java Basics - Anfänger-Themen 6
C Teiler einer ganzen Zahl Java Basics - Anfänger-Themen 2
Y alle teiler einer zahl ausgeben Java Basics - Anfänger-Themen 23
J Teiler einer beliebigen Zahl ermitteln. Java Basics - Anfänger-Themen 19
G Ganzzahl oder nicht + gemeinsamen Teiler finden Java Basics - Anfänger-Themen 9
B größten gemeins. Teiler m. Euklidischen Algorith. nachbilden Java Basics - Anfänger-Themen 2
F Primzaheln ermittlen Java Basics - Anfänger-Themen 2
T Array verkleinern Java Basics - Anfänger-Themen 2
J Array aus Numberfield Eingaben Java Basics - Anfänger-Themen 7
D Array List mit Objekten sortieren Java Basics - Anfänger-Themen 2
onlyxlia Anzahl Random Zahlen mit Scanner abfragen und in Array speichern Java Basics - Anfänger-Themen 10
Ü Java Array - Buchstaben als Zahlen ausgeben Java Basics - Anfänger-Themen 22
Ü Zweidimensionales Array in der ersten Zeile deklarieren Java Basics - Anfänger-Themen 13
Thomas Uppe 2D Array Reihenfolge vermischen Java Basics - Anfänger-Themen 4
T array auslesen Java Basics - Anfänger-Themen 2
Nitrogames Variablen Variable aus JOptionPane Abfrage in Array einfügen Java Basics - Anfänger-Themen 4
moini Auf Array aus Superklasse zugreifen? Java Basics - Anfänger-Themen 2
J ArrayList in 2D-Array konvertieren. Java Basics - Anfänger-Themen 48
M NullPointerException: Cannot read the array length because "this.Kinder" is null Java Basics - Anfänger-Themen 1
P Wieso kann ich als Index für einen Array einen Char angeben? Java Basics - Anfänger-Themen 3
Finn_lol Fehlermeldung bei Schleife mit Array Java Basics - Anfänger-Themen 4
Proxy Chars vor array übergabe toLowerUpcase Java Basics - Anfänger-Themen 14
iAmFaiinez Primzahlen Tester ohne Array Java Basics - Anfänger-Themen 4
S array 2 dimensional treppe Java Basics - Anfänger-Themen 3
S Array 2x2 Blöcke mit 0 und 1 Java Basics - Anfänger-Themen 10
C Array von Klassen Java Basics - Anfänger-Themen 2
julian0507 2Dim-Array Spaltensummen Java Basics - Anfänger-Themen 1
XWing Doppelte Zahlen im Array Java Basics - Anfänger-Themen 8
melisax Java 2D-Array Tabelle Java Basics - Anfänger-Themen 4
melisax Java Array Wert an bestimmtem Index angeben Java Basics - Anfänger-Themen 14
W Items löschen aus String Array vom Custom Base Adapter Java Basics - Anfänger-Themen 2
Proxy Stack erweitern mit neuem Array falls der alte voll ist!? Java Basics - Anfänger-Themen 5
E Array, nächste Zahl zur 5 ausgeben, wie? Java Basics - Anfänger-Themen 42
J Array.list vergleichen Java Basics - Anfänger-Themen 1
W Java-Code mit Array Java Basics - Anfänger-Themen 14
D Reflections & Generisches Array Java Basics - Anfänger-Themen 4
T Array Java Basics - Anfänger-Themen 2
T Array Java Basics - Anfänger-Themen 15
T Wörteranzahl im Array zählen Java Basics - Anfänger-Themen 9
Ostkreuz Zweidimensionaler Array Index Java Basics - Anfänger-Themen 2
S String Array Buchstaben um einen gewissen Wert verschieben Java Basics - Anfänger-Themen 4
R Images aus einem Array ausgeben Java Basics - Anfänger-Themen 3
R 2d Array individuell machen Java Basics - Anfänger-Themen 4
D 2D Char Array into String Java Basics - Anfänger-Themen 2
J Array Median bestimmen Java Basics - Anfänger-Themen 6
S Array Maximum bestimmen mit for und foreach Java Basics - Anfänger-Themen 7
S Prüfen ob ein zweidimensionales Array rechteckig ist Java Basics - Anfänger-Themen 4
N Array Java Basics - Anfänger-Themen 1
J Array Mittleren Wert bestimmen Java Basics - Anfänger-Themen 2
D OOP Array einem Objekt zuweisen Java Basics - Anfänger-Themen 2
O Zahlen aus einem char-array per char + Zeichen addieren Java Basics - Anfänger-Themen 2
S leeres Array statt Null Pointer Exception ausgeben Java Basics - Anfänger-Themen 20
S Inhalte aus Array vergleichen und Max ausgeben Java Basics - Anfänger-Themen 3
M 2d array ohne längen anlegen Java Basics - Anfänger-Themen 4
S Bestimmte werte aus einem Array löschen Java Basics - Anfänger-Themen 2
S Ausgeben wie oft ein Wert in einem Array vorkommt Java Basics - Anfänger-Themen 7
E Reihenfolge der Werte umdrehen (mittels statischem int-Array Java Basics - Anfänger-Themen 3
O 2 Dimensionales Array Java Basics - Anfänger-Themen 6
M Bubble Sort - Int[] Array sortieren Java Basics - Anfänger-Themen 2
javaBoon86 Array mehrere Dimensionen Java Basics - Anfänger-Themen 10
B Array nach Elementwerten sortieren? Java Basics - Anfänger-Themen 1
B Explizit Array definieren geht nicht? Java Basics - Anfänger-Themen 14
D Kleinste Zahl in Array finden die vorher noch errechnet werden müssen. Java Basics - Anfänger-Themen 4
L Gegebenes Array sortieren, indem zufällige Zahlenpaare aus Array ausgewählt werden Java Basics - Anfänger-Themen 14
Say 2-DIM Array Code lesen und verstehen Java Basics - Anfänger-Themen 5
N Array beim erstellen mit Werten füllen Java Basics - Anfänger-Themen 6
C Java Array Struktur, welche ist wann besser? Java Basics - Anfänger-Themen 12
Temsky34 Array IndexOf nicht verfügbar Java Basics - Anfänger-Themen 18
belana wie am besten 2D Array von String to Integer Java Basics - Anfänger-Themen 18
S Array mit Methode löschen Java Basics - Anfänger-Themen 2
J Java To String Methode, Array mit For-Schleife Java Basics - Anfänger-Themen 2
E Durch Muster in Array iterieren Java Basics - Anfänger-Themen 3
L Frage zum Array Java Basics - Anfänger-Themen 1
C 2D Array Ausgabe mit for-Schleife i,j Java Basics - Anfänger-Themen 4
D Methode: Array Reihenfolge tauschen Java Basics - Anfänger-Themen 3
julian0507 Array aus Methode in anderer Methode sichtbar machen Java Basics - Anfänger-Themen 10
P Array vom Typ Klasse Java Basics - Anfänger-Themen 18
Lion.King Array deklarieren und initialisieren Java Basics - Anfänger-Themen 5
P Array-Objekte-Aufruf Java Basics - Anfänger-Themen 22
A CSv.Datei einlesen und die werte in zweidemosional Int Array speichern Java Basics - Anfänger-Themen 9
M Methoden Zweidimensionaler Array mit Setter Methode ändern Java Basics - Anfänger-Themen 4
AkiJou Zeile in 2d Array löschen Java Basics - Anfänger-Themen 2
LilliCherry Array in einer Zeile ausgeben Java Basics - Anfänger-Themen 6
A Elemente in einem Array Java Basics - Anfänger-Themen 5
A Vorkommende Farben ermittel und als Array zurückgeben Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben