?
mein erstes java programm is fertig;-)
was sagt ihr?
import java.io.*;
import java.util.*;
/* Laufwettbewerb.java */
public class Laufwettbewerb
{
public static void main(String[] args)
{
/* für Textdatei schreiben */
FileWriter f1;
int anzahlDerLaufer_input = 0; // es soll ja die Anzahl der Läufer eingegeben werden
Random r = new Random();
System.out.println("Laufwettbewerb\n");
System.out.println("Wie viele Laufer: ");
/* Anzahl der Läufer von der Konsole einlesen */
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
try
{
anzahlDerLaufer_input = Integer.parseInt(in.readLine());
} catch (IOException e) {
System.out.println("Fehler beim Einlesen");
}
/* Spalte 0: Startnummer */
/* Spalten 1-4: Zwischenzeiten */
/* Spalte 5: Gesamtzeit */
/* Spate 6: Durschnittsgeschwindigkeit */
/* Spalte 7: Maximalgeschwindigkeit */
int [][] times = new int [anzahlDerLaufer_input][1+5+2];
/* Die Zufallszahl für time1 soll im Bereich 300 bis 600 Sekunden liegen. */
/* Bei jeder weiteren Zeitmessung erhöht sich die Zwischenzeit im Bereich von 300 bis 900 Sekunden. */
/* Es werden 4 Zwischenzeiten gemessen */
int spalte = 0;
int endzeit = 0;
int geschwindigkeit = 0;
int geschwindigkeit_max = 0;
int geschwindigkeit_durchschnitt = 0;
for (int i=0; i < anzahlDerLaufer_input; i++)
{
/* Startnummer speichern */
spalte = 0;
times[i][spalte] = i+1;
spalte++;
endzeit = 0;
geschwindigkeit = 0;
geschwindigkeit_max = 0;
int max = 600;
int min = 300;
/* 4 Zwischenzeiten für jeden Läufer*/
while (spalte < 5)
{
if (spalte == 2) max = 900;
times[i][spalte] = min + Math.abs(r.nextInt()) % (max-min+1);
/* Endzeit aufsummieren */
endzeit += times[i][spalte];
/* Geschwindigkeit_max ermitteln */
geschwindigkeit = (int)(200000 / (times[i][spalte]));
if (geschwindigkeit >= geschwindigkeit_max)
geschwindigkeit_max = geschwindigkeit;
/* Zwischenzeit + 1 */
spalte++;
}
/* Endzeit berechnen */
times[i][spalte++] = endzeit;
/* Durschschnittsgeschwingkeit berechnen */
geschwindigkeit_durchschnitt = (4*200000) / endzeit;
times[i][spalte++] = geschwindigkeit_durchschnitt;
/* Geschwindigkeit_max in Array schreiben */
times[i][spalte++] = geschwindigkeit_max;
}
/* nach durchschnittlicher Laufgeschwindigkeit sortieren */
/* die Laufgeschwindigkeit ist im Array in Spalte 7 */
sort(times);
System.out.println("\nLaufer wurden sortiert");
/* In die Textdatei schreiben */
try {
f1 = new FileWriter("Ausgabe.txt");
/* Tabellenkopf schreiben */
f1.write("NR.\tT1\tT2\tT3\tT4\tTGes.\tvAvg.\tvMax\r\n");
/* Tabellenkopf auf Konsole ausgeben*/
System.out.println("\nNR.\tT1\tT2\tT3\tT4\tTGes.\tvAvg.\tvMax\r");
/* Schreiben aller Läufer in Textdatei */
for (int i=0; i < anzahlDerLaufer_input; i++)
{
spalte = 0;
/* Das Array hat 8 Spalten */
while (spalte < 8)
{
/* Ausgabe auf Konsole */
System.out.print(times[i][spalte]+"\t");
/* In Textdatei schreiben */
f1.write(times[i][spalte++]+"\t");
}
f1.write("\r\n");
System.out.println("\r");
}
f1.close();
} catch (IOException e) {
System.out.println("Fehler beim Erstellen der Datei");
}
System.out.println("\nDie Tabelle erfolgreich in die Textdatei: Ausgabe.txt gespeichert");
}
/* Quicksort: */
/* Im Folgenden sind die wichtigsten Schritte des Quicksort Algorithmus aufgelistet: */
/* 1. Man wähle ein willkürliches (!) Element aus dem Array (wird Pivot, oder Partition Element genannt) */
/* 2. Man sortiere das Array so, dass alle Werte, die kleiner als das Partition Element sind links */
/* davon stehen und alle die größer sind, rechts davon. (Vorausgesetzt, wir sortieren aufsteigend) */
/* 3. Das Array ist nun in 2 Hälften geteilt. Das Partition Element steht dabei schon an seiner finalen */
/* Position (schließlich wurde das Array ja nach ihm sortiert) */
/* 4. Für jede der beiden so entstandenen Hälften werden nun Schritte 1 - 4 ausgeführt. */
public static void sort (int [][] array)
{
quickSort (array,0,array.length - 1);
}
private static void quickSort(int in_array[][], int left, int right)
{
int current, last;
if (left >= right) return;
swap(in_array, left, (left+right)/2);
last = left;
for (current = left + 1; current <= right; current++)
{
if (in_array[current][5] < in_array[left][5])
swap(in_array, ++last, current);
}
swap(in_array, left, last);
quickSort(in_array, left, last-1);
quickSort(in_array, last+1, right);
}
private static void swap(int in_array[][], int i, int j)
{
int[] temp; // "unter"-array vertauschen
temp = in_array[i];
in_array[i] = in_array[j];
in_array[j] = temp;
}
}
nur ein fehler is!!!
} catch (IOException e) {
System.out.println("Fehler beim Erstellen der Datei");
}
System.out.println("\nDie Tabelle erfolgreich in die Textdatei: Ausgabe.txt gespeichert");
wenn ich keine rechte hab eine textdatei zu erstellen dann wird auch geschrieben textfile wurde erfolgreich erstellt, wie kann man das umgehen??? helft mir!!!
cu