ERLEDIGT
NEIN
NEIN
ANTWORTEN
3
3
ZUGRIFFE
270
270
EMPFEHLEN
-
Hallo ich habe folgenden Code:
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package Quickselect; import java.util.Random; /** * * @author ich */ public class Quickselect2 { private int[] array; private int numb; private int [] low; private int [] middle; private int [] high; public void select(int[] values, int k) { if (values == null || values.length == 0) { return; } this.array = values; numb = values.length; quickselect(array,k); } private int quickselect(int[] array, int k) { Random rnd = new Random(); int a = rnd.nextInt(array.length-1); int j = 0; int l = 0; int m = 0; for(int i=0; i<=array.length; i++){ if (array[i] < a){ low[j] = array[i]; j++; } else if (array[i] > a){ high[l] = array[i]; l++; } else { middle[m] = array[i]; m++; } } if (k <= low.length-1){ return quickselect(low,k); } else if(k >= low.length-1 + middle.length){ return quickselect(high,k); } else return a; } public void random(int [] array){ for(int k=0; k<array.length; k++){ Random r =new Random(); int rand = r.nextInt(); array[k] = rand; } } public static void main(String[] args) { int k = 3; int [] array; array = new int [10]; Quickselect2 quick = new Quickselect2(); quick.random(array); quick.select(array,k); } }
Das Program berechnet rekursiv, das k-größte Element. Nun bekomme ich, wenn ich mein Array in die drei Teilarrays aufspalte eine Nullpointerexception zurückgeworfen und ich verstehe nicht so ganz wieso. Ich hoffe mir kann da vieleicht jemand helfen:
Code :1 2 3 4 5
Exception in thread "main" java.lang.NullPointerException at Quickselect.Quickselect2.quickselect(Quickselect2.java:39) at Quickselect.Quickselect2.select(Quickselect2.java:27) at Quickselect.Quickselect2.main(Quickselect2.java:80) Java Result: 1
-
10.11.11 09:03 #2
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Hi.
Du solltest in der random Funktion nur 1 Random Objekt kreieren (vor der Schleife) nicht ständig in der Schleife.
Bitte stelle das nächste Mal sicher, dass die Zeilenangaben auch zu deinem Code passen.
Dein Fehler: die Arrays low, middle, high sind nicht initialisiert, also null.
GrußIf at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
1. Schreibe ich die Erzeugung des Random Objekts außerhalb der rekursiven Funktion produziert er bei mir dort nur Fehler
2. Ich habe es auch schon gesucht aber wie initialisiere ich schlau ein Array dessen Größe ich vorher nicht genau sagen kann.
3. Produzier ich bei random wenn ich meine Arrays mit Testwerten initialisiere folgenden Fehler
Ich habe mir zu Random auch die Javadoc durchgelesen und theoretisch müsste ich so einen Wert aus dem Array randommäßig zuweisen könnenCode :1 2 3 4 5
Exception in thread "main" java.lang.StackOverflowError at java.lang.Number.<init>(Number.java:32) at java.util.concurrent.atomic.AtomicLong.<init>(AtomicLong.java:59) at java.util.Random.<init>(Random.java:79) at java.util.Random.<init>(Random.java:62)
-
10.11.11 09:45 #4
Hi,
zu 1.
Das Random-Object kannst du natürlich außen hinschreiben. Das machst schon Sinn, damit nicht bei jedem Durchlauf ein neues Object erzeugt werden muss.
Code java:
zu 2.
Wenn du nicht weißt, wie groß ein Array wird, ist es am sinnvollsten eine List<Integer> zu verwenden. Diese List<Integer> kannst du, wenn alle Werte ermittelt sind, wieder in ein Array umwandeln.
Code java:1
int[] array = list.toArray(new int[list.size()]);
zu 3.
Das wird wahrscheinlich deshalb eine StackOverflowError-Exception geschmissen, weil - wie bei 1. schon erklärt - bei jedem Durchlauf ein Random-Object erzeugt und im Speicher gehalten wird.
Gruß
FabioBitte die Code-Tags verwenden. Bei Java-Code: [java]...[/java]
Tutorials:
Automatisches erzeugen eines Inhaltsverzeichnisses (Javascript)
JAnimationPanel - Animationen für Swing/AWT
SWTRatingBar (Bewertungs-Composite) selbst programmieren
____________________________________________________________________________
Über eine Bewertung (Stern links unter dem Beitrag) oder ein Danke freue ich mich sehr.
Ähnliche Themen
-
NullPointerException?
Von Maik20 im Forum JavaAntworten: 1Letzter Beitrag: 08.12.08, 23:06 -
NullPointerException
Von Teufelslama im Forum JavaAntworten: 2Letzter Beitrag: 18.06.08, 23:44 -
NullPointerException
Von Cherry07 im Forum Java GrundlagenAntworten: 4Letzter Beitrag: 07.06.08, 13:00 -
NullPointerException
Von Wyatt im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 10Letzter Beitrag: 15.11.07, 19:52 -
NullPointerException
Von savvo im Forum JavaAntworten: 3Letzter Beitrag: 30.12.04, 14:39





Zitieren
Login





