public Track chooseTrack(Random random) { Track[] tracks = getTracks(); float[] probs = new float[tracks.length]; float totalProb = 0; for (int i = 0; i < tracks.length; i++) { totalProb += getProbability(tracks[i]); probs[i] = totalProb; // System.out.println(Float.toString(totalProb) + " " + getProbability(tracks[i]) + " " + // tracks[i]); } if (totalProb == 0) return null; while (true) { float rand = Math.abs(random.nextFloat()) * totalProb; // System.out.println("r=" + Float.toString(rand)); for (int i = 0; i < tracks.length; i++) if (rand <= probs[i]) return tracks[i]; } }