# Skispringer-Programm



## philip93 (17. Dez 2009)

Ich möchte gerne die Werte halt1 -5 ordnen, wo der höchste und der niedrigste wert herausfällt. 
Ein Skispringer darf in einem Ort nur einmal springen. 
Es werden die Punkte aus allen Orten zusammengezählt.
Wenn alle Skispringer in allen Orten gesprungen sind, soll eine Gesamtwertung kommen und die Springer nach der Punktezahl geordnet sein:

Derzeitiges Programm:


```
import java.util.*;
import java.io.*;
public class Skisprung
{


public static String [] arrSkispringer = {"Ahonen","Ammann","Bodmer","Loitzl","Schlierenzauer"};
public static String [] arrSprungort = {"Bischofshofen","Garmisch","Innsbruck","Obersdorf","Planica"};
public static double [] arrWeite = {137.00,140.00,130.00,140.00,215.00};
public static double weite;
public static double halt1;
public static double halt2;
public static double halt3;
public static double halt4;
public static double halt5;
public static double faktor = 1.8;
public static double gesamtpunkte = 0;
public static String name;
public static double K;
public static double gesamtpunkteW=0;

public static void main (String[]args)
	{



berechnung();





	}


	public static void berechnung()
	{
		while (true)
		{


	try
			{
				BufferedReader eingabe;
	eingabe = new BufferedReader (new InputStreamReader(System.in));




for(int x = 0; x < arrSkispringer.length; x++) {
						System.out.println(arrSkispringer[x]);
			}

System.out.println("Springer auswählen auswählen:");
	name = eingabe.readLine();






int index = Arrays.binarySearch(arrSkispringer,name);




if((index < 0) || (index > arrSkispringer.length))
{
	System.out.println("Springer nicht vorhanden");



	for (int x = 0; x < arrSkispringer.length;x++)
	{
		System.out.println(arrSkispringer[x]);
	}
}

System.out.println(" ");


for (int y = 0; y<arrSprungort.length;y++)
{

System.out.println(arrSprungort[y]);
}


System.out.println("Ort auswählen: ");

String Ort = eingabe.readLine();


int index2 = Arrays.binarySearch(arrSprungort, Ort);







System.out.println(arrWeite[index2]);

System.out.println("Weite angeben");


weite = Double.parseDouble(eingabe.readLine());




System.out.println("Punkte Richter1");
halt1 = Double.parseDouble(eingabe.readLine());

System.out.println("Punkte Richter2");
halt2 = Double.parseDouble(eingabe.readLine());

System.out.println("Punkte Richter3");
halt3 = Double.parseDouble(eingabe.readLine());

System.out.println("Punkte Richter4");
halt4 = Double.parseDouble(eingabe.readLine());


System.out.println("Punkte Richter5");
halt5 = Double.parseDouble(eingabe.readLine());


if (weite>arrWeite[index])
{

	K = 60.0;

}


else
{
	K  = 0;
}


gesamtpunkte = ((K+(arrWeite[index2]-weite))+halt1+halt2+halt3+halt4+halt5);







System.out.println("Gesamtpunkte: " + gesamtpunkte);


gesamtpunkteW += gesamtpunkte;

System.out.println("Gesamtpunkte Springen: " + gesamtpunkteW);

System.out.println(" ");


	}




	catch(IOException e)
	{
		System.out.println("Eingabefehler");
	}
	catch (NumberFormatException e)
	{
		System.out.println("Bitte nur Zahlen eingeben");
}







}
}


	}
```


----------



## Michael... (17. Dez 2009)

Zunächst mal ein Hinweis auf einen Fehler:

```
if (weite>arrWeite[index])
```
hier muss index2 verwendet werden

Dann macht es keinen Sinn bei jedem Schleifendurchlauf einen neuen BufferedReader auf System.in zu erzeugen --> vor der while Schleife einmal erzeugen (ausserdem gibt es mittlerweile in Java die Klasse Scanner, die das lesen von Konsole erleichtert)

Nutze die Möglichkeiten der objektorientierten Programmierung. Da Du die erzielten Punkte und weitere Informationen "speichern" willst, um u.a. zum Schluss eine Gesamtwertung auszugeben: Definiere die Skispringer und evtl. auch die Sprungorte als eigene Objekte. Anderfalls tust Du Dich schwer und das ganze wird in ganz schön wüstem Code enden.


----------



## philip93 (17. Dez 2009)

Wir müssen mit Arrays arbeiten.

Gibt es trotzdem eine Möglichkeit, meine Punkte zu erfüllen

Bitte um rasche Antwort


----------



## Michael... (17. Dez 2009)

philip93 hat gesagt.:


> Wir müssen mit Arrays arbeiten.


Das wiederspricht sich doch nicht, Du kannst ja Deine Objekte in einem Array speichern (in irgendeiner Liste musst sie ja eh speichern)
Aber ohne eigene Objekte brauchst Du noch ein Array zum speichern der Punkte der Springer und für jeden Springer ein (verschachteltes) Array zum speichern der Sprungorte.


----------



## philip93 (17. Dez 2009)

Michael... hat gesagt.:


> Das wiederspricht sich doch nicht, Du kannst ja Deine Objekte in einem Array speichern (in irgendeiner Liste musst sie ja eh speichern)
> Aber ohne eigene Objekte brauchst Du noch ein Array zum speichern der Punkte der Springer und für jeden Springer ein (verschachteltes) Array zum speichern der Sprungorte.




Es wäre sehr nett, wenn jemand mir die Programmcodes geben könnte, somit mein Programm so funktioniert, wie beschrieben. Mein derzeitiges Programm ist ja schon vorgegeben


----------



## Michael... (17. Dez 2009)

Hier mal ein Ansatz. Es werden zwar Listen verwendet, aber man kann das ja auf Arrays umbauen.

```
import java.util.*;

public class Skisprung {

	public static void main(String[] args) {
		List<SkiSpringer> springer = new ArrayList<SkiSpringer>();
		List<SprungOrt> schanzen = new ArrayList<SprungOrt>();
		
		springer.add(new SkiSpringer("Ahonen"));
		springer.add(new SkiSpringer("Ammann"));
		//springer.add(new SkiSpringer("Bodmer"));
		//springer.add(new SkiSpringer("Loithl"));
		//springer.add(new SkiSpringer("Schlierenzauer"));
		
		schanzen.add(new SprungOrt("Bischofshofen", 137));
		schanzen.add(new SprungOrt("Garmisch", 140));
		//schanzen.add(new SprungOrt("Innsbruck", 130));
		//schanzen.add(new SprungOrt("Obersdorf", 140));
		//schanzen.add(new SprungOrt("Planica", 215));
		
		Scanner sc = new Scanner(System.in);
		
		while(!isTurnierBeendet(springer, schanzen)) {
			int springerNr, schanzenNr;
			double weite;
			
			System.out.println();
			for (int i=0; i<springer.size(); i++) 
				System.out.println((i+1) + ": " + springer.get(i).getName());
			
			System.out.print("Nr des Springers auswählen: ");
			springerNr = sc.nextInt()-1;
			
			System.out.println();
			for (int i=0; i<schanzen.size(); i++) 
				System.out.println((i+1) + ": " + schanzen.get(i).getName());
			
			System.out.print("Nr des Austragungsorts auswählen: ");
			schanzenNr = sc.nextInt()-1;
			
			System.out.println();
			System.out.println(springer.get(springerNr).getName() + " springt in " + schanzen.get(schanzenNr).getName());
			System.out.println();
			System.out.print("Sprungweite eingeben: ");
			weite = sc.nextDouble();
			
			springer.get(springerNr).addSprung(schanzen.get(schanzenNr), weite);
		}
		
		System.out.println();
		for (int i=0; i<springer.size(); i++) 
			System.out.println(springer.get(i).getName() + " hat insgesamt " + springer.get(i).getPunkte() + " Punkte.");
	}
	
	public static boolean isTurnierBeendet(List<SkiSpringer> springerListe, List<SprungOrt> schanzen) {
		boolean ende = true;
		
		for (int i=0; i<springerListe.size(); i++) {
			if (!springerListe.get(i).isDone(schanzen))
				ende = false;
		}
		return ende;
	}
}

class SkiSpringer {
	private String name;
	private List<SprungOrt> sprungOrt;
	private double punkte;

	public SkiSpringer(String name) {
		this.name = name;
		sprungOrt = new ArrayList<SprungOrt>();
		punkte = 0;
	}

	public String getName() {
		return name;
	}

	public void addSprung(SprungOrt ort, double punkte) {
		if (!this.sprungOrt.contains(ort)) {
			this.sprungOrt.add(ort);
			this.punkte += punkte;
		}
	}

	public double getPunkte() {
		return punkte;
	}

	public boolean isDone(List<SprungOrt> ortsList) {
		return this.sprungOrt.containsAll(ortsList);
	}
}

class SprungOrt {
	private String name;
	private double weite;

	public SprungOrt(String name, double weite) {
		this.name = name;
		this.weite = weite;
	}

	public String getName() {
		return name;
	}

	public double getWeite() {
		return weite;
	}
}
```


----------



## philip93 (17. Dez 2009)

Michael... hat gesagt.:


> Hier mal ein Ansatz. Es werden zwar Listen verwendet, aber man kann das ja auf Arrays umbauen.
> 
> ```
> import java.util.*;
> ...



Das Programm lässt sich leider nicht starten (38 Errors). Ich verwende Textpad 5.2


----------



## Michael... (17. Dez 2009)

Was für Meldungen kommen denn so? Das ganze funktioniert erst ab Java 1.5 (wegen der Generics)


----------



## philip93 (17. Dez 2009)

Michael... hat gesagt.:


> Was für Meldungen kommen denn so? Das ganze funktioniert erst ab Java 1.5 (wegen der Generics)





```
C:\Users\philip\Desktop\Skisprung2.java:6: '(' or '[' expected
        List<SkiSpringer> springer = new ArrayList<SkiSpringer>();
                                                  ^
C:\Users\philip\Desktop\Skisprung2.java:7: '(' or '[' expected
        List<SprungOrt> schanzen = new ArrayList<SprungOrt>();
                                                ^
C:\Users\philip\Desktop\Skisprung2.java:55: <identifier> expected
    public static boolean isTurnierBeendet(List<SkiSpringer> springerListe, List<SprungOrt> schanzen) {
                                               ^
C:\Users\philip\Desktop\Skisprung2.java:63: ')' expected
    }
     ^
C:\Users\philip\Desktop\Skisprung2.java:68: <identifier> expected
    private List<SprungOrt> sprungOrt;
                ^
C:\Users\philip\Desktop\Skisprung2.java:73: '(' or '[' expected
        sprungOrt = new ArrayList<SprungOrt>();
                                 ^
C:\Users\philip\Desktop\Skisprung2.java:92: <identifier> expected
    public boolean isDone(List<SprungOrt> ortsList) {
                              ^
C:\Users\philip\Desktop\Skisprung2.java:94: ')' expected
    }
     ^
C:\Users\philip\Desktop\Skisprung2.java:6: cannot resolve symbol
symbol  : variable List  
location: class Skisprung2
        List<SkiSpringer> springer = new ArrayList<SkiSpringer>();
        ^
C:\Users\philip\Desktop\Skisprung2.java:6: cannot resolve symbol
symbol  : variable SkiSpringer  
location: class Skisprung2
        List<SkiSpringer> springer = new ArrayList<SkiSpringer>();
             ^
C:\Users\philip\Desktop\Skisprung2.java:6: cannot resolve symbol
symbol  : variable springer  
location: class Skisprung2
        List<SkiSpringer> springer = new ArrayList<SkiSpringer>();
                          ^
C:\Users\philip\Desktop\Skisprung2.java:7: cannot resolve symbol
symbol  : variable List  
location: class Skisprung2
        List<SprungOrt> schanzen = new ArrayList<SprungOrt>();
        ^
C:\Users\philip\Desktop\Skisprung2.java:7: cannot resolve symbol
symbol  : variable SprungOrt  
location: class Skisprung2
        List<SprungOrt> schanzen = new ArrayList<SprungOrt>();
             ^
C:\Users\philip\Desktop\Skisprung2.java:7: cannot resolve symbol
symbol  : variable schanzen  
location: class Skisprung2
        List<SprungOrt> schanzen = new ArrayList<SprungOrt>();
                        ^
C:\Users\philip\Desktop\Skisprung2.java:9: cannot resolve symbol
symbol  : variable springer  
location: class Skisprung2
        springer.add(new SkiSpringer("Ahonen"));
        ^
C:\Users\philip\Desktop\Skisprung2.java:10: cannot resolve symbol
symbol  : variable springer  
location: class Skisprung2
        springer.add(new SkiSpringer("Ammann"));
        ^
C:\Users\philip\Desktop\Skisprung2.java:15: cannot resolve symbol
symbol  : variable schanzen  
location: class Skisprung2
        schanzen.add(new SprungOrt("Bischofshofen", 137));
        ^
C:\Users\philip\Desktop\Skisprung2.java:16: cannot resolve symbol
symbol  : variable schanzen  
location: class Skisprung2
        schanzen.add(new SprungOrt("Garmisch", 140));
        ^
C:\Users\philip\Desktop\Skisprung2.java:21: cannot resolve symbol
symbol  : class Scanner  
location: class Skisprung2
        Scanner sc = new Scanner(System.in);
        ^
C:\Users\philip\Desktop\Skisprung2.java:21: cannot resolve symbol
symbol  : class Scanner  
location: class Skisprung2
        Scanner sc = new Scanner(System.in);
                         ^
C:\Users\philip\Desktop\Skisprung2.java:23: cannot resolve symbol
symbol  : variable springer  
location: class Skisprung2
        while(!isTurnierBeendet(springer, schanzen)) {
                                ^
C:\Users\philip\Desktop\Skisprung2.java:23: cannot resolve symbol
symbol  : variable schanzen  
location: class Skisprung2
        while(!isTurnierBeendet(springer, schanzen)) {
                                          ^
C:\Users\philip\Desktop\Skisprung2.java:28: cannot resolve symbol
symbol  : variable springer  
location: class Skisprung2
            for (int i=0; i<springer.size(); i++)
                            ^
C:\Users\philip\Desktop\Skisprung2.java:29: cannot resolve symbol
symbol  : variable springer  
location: class Skisprung2
                System.out.println((i+1) + ": " + springer.get(i).getName());
                                                  ^
C:\Users\philip\Desktop\Skisprung2.java:35: cannot resolve symbol
symbol  : variable schanzen  
location: class Skisprung2
            for (int i=0; i<schanzen.size(); i++)
                            ^
C:\Users\philip\Desktop\Skisprung2.java:36: cannot resolve symbol
symbol  : variable schanzen  
location: class Skisprung2
                System.out.println((i+1) + ": " + schanzen.get(i).getName());
                                                  ^
C:\Users\philip\Desktop\Skisprung2.java:42: cannot resolve symbol
symbol  : variable springer  
location: class Skisprung2
            System.out.println(springer.get(springerNr).getName() + " springt in " + schanzen.get(schanzenNr).getName());
                               ^
C:\Users\philip\Desktop\Skisprung2.java:42: cannot resolve symbol
symbol  : variable schanzen  
location: class Skisprung2
            System.out.println(springer.get(springerNr).getName() + " springt in " + schanzen.get(schanzenNr).getName());
                                                                                     ^
C:\Users\philip\Desktop\Skisprung2.java:47: cannot resolve symbol
symbol  : variable schanzen  
location: class Skisprung2
            springer.get(springerNr).addSprung(schanzen.get(schanzenNr), weite);
                                               ^
C:\Users\philip\Desktop\Skisprung2.java:47: cannot resolve symbol
symbol  : variable springer  
location: class Skisprung2
            springer.get(springerNr).addSprung(schanzen.get(schanzenNr), weite);
            ^
C:\Users\philip\Desktop\Skisprung2.java:51: cannot resolve symbol
symbol  : variable springer  
location: class Skisprung2
        for (int i=0; i<springer.size(); i++)
                        ^
C:\Users\philip\Desktop\Skisprung2.java:52: cannot resolve symbol
symbol  : variable springer  
location: class Skisprung2
            System.out.println(springer.get(i).getName() + " hat insgesamt " + springer.get(i).getPunkte() + " Punkte.");
                               ^
C:\Users\philip\Desktop\Skisprung2.java:52: cannot resolve symbol
symbol  : variable springer  
location: class Skisprung2
            System.out.println(springer.get(i).getName() + " hat insgesamt " + springer.get(i).getPunkte() + " Punkte.");
                                                                               ^
C:\Users\philip\Desktop\Skisprung2.java:55: missing method body, or declare abstract
    public static boolean isTurnierBeendet(List<SkiSpringer> springerListe, List<SprungOrt> schanzen) {
                          ^
C:\Users\philip\Desktop\Skisprung2.java:73: cannot resolve symbol
symbol  : variable sprungOrt  
location: class SkiSpringer
        sprungOrt = new ArrayList<SprungOrt>();
        ^
C:\Users\philip\Desktop\Skisprung2.java:82: cannot resolve symbol
symbol  : variable sprungOrt  
location: class SkiSpringer
        if (!this.sprungOrt.contains(ort)) {
             ^
C:\Users\philip\Desktop\Skisprung2.java:83: cannot resolve symbol
symbol  : variable sprungOrt  
location: class SkiSpringer
            this.sprungOrt.add(ort);
            ^
C:\Users\philip\Desktop\Skisprung2.java:92: missing method body, or declare abstract
    public boolean isDone(List<SprungOrt> ortsList) {
                   ^
38 errors

Prozess beendet mit Exit-Code 1
```


----------



## Michael... (17. Dez 2009)

Du verwendest einen JDK kleiner als Version 1.5 der kann keine generischen Ausdrücke, aber da Du ja sowieso Arrays anstelle von Listen verwenden sollst, kannst Du Dich ja gleich im Umbau probieren.


----------



## philip93 (17. Dez 2009)

Es wäre sehr nett, wenn jemand deinen Code mit Arrays mir geben könnte


----------



## Sonecc (17. Dez 2009)

hausaufgaben sollte man immer selbst machen...
und die listen mit arrays auszutauschen ist jetzt auch nicht sonderlich schwierig


----------



## philip93 (17. Dez 2009)

Sonecc hat gesagt.:


> hausaufgaben sollte man immer selbst machen...
> und die listen mit arrays auszutauschen ist jetzt auch nicht sonderlich schwierig




Es ist keine Hausaufgabe, sondern es geht darum, dass ich zwischen 3-4 steh und wenn ich auf das Projekt einen 1er bekomm, bekomm ich einen 1


Könntet ihr nicht die Lösung mit Arrays mir geben, ich kenn mich in java nicht so gut aus


----------



## philip93 (17. Dez 2009)

Ich bräuchte nur den Code, dass jeder Springer nur einmal in einem Ort springen kann


----------



## philip93 (18. Dez 2009)

[Java]

// Jeder Springer darf in jedem Ort nur einmal springen
// Wenn jeder Springer in jedem Ort gesprungen ist, soll eine Gesamtwertung kommen, wo der Name und die Gesamtpunktezahl steht
import java.util.*;
import java.io.*;
public class Skisprung
{
public static String [] arrSkispringer = {"Ahonen","Ammann","Bodmer","Loitzl","Schlierenzauer"};
public static String [] arrSprungort = {"Bischofshofen","Garmisch","Innsbruck","Obersdorf","Planica"};
public static double [] arrWeite = {137.00,140.00,130.00,140.00,215.00};
public static double [] arrPunkte = {0,0,0,0,0};
public static int [] arrVersuche = {0,0,0,0,0};
public static double weite;
public static double halt1;
public static double halt2;
public static double halt3;
public static double halt4;
public static double halt5;
public static double faktor = 1.8;
public static double gesamtpunkte = 0;
public static String name;
public static double K;
public static double gesamtpunkteW=0;
public static int versuche;
public static void main (String[]args)
	{


berechnung();




}

public static void berechnung()
	{
		while (true)
		{
try
			{
				BufferedReader eingabe;
	eingabe = new BufferedReader (new InputStreamReader(System.in));
for(int x = 0; x < arrSkispringer.length; x++) {
						System.out.println(arrSkispringer[x]);
			}
System.out.println("Springer auswählen auswählen:");
	name = eingabe.readLine();
int index = Arrays.binarySearch(arrSkispringer,name);
if((index < 0) || (index > arrSkispringer.length))
{
	System.out.println("Springer nicht vorhanden");
versuche++;
for (int x = 0; x < arrSkispringer.length;x++)
	{
		System.out.println(arrSkispringer[x]);
	}
}
System.out.println(" ");
for (int y = 0; y<arrSprungort.length;y++)
{
System.out.println(arrSprungort[y]);
}
System.out.println("Ort auswählen: ");
String Ort = eingabe.readLine();
int index2 = Arrays.binarySearch(arrSprungort, Ort);

if ((arrSkispringer[index] == arrSkispringer[0]) && (arrSprungort[index2] == arrSkispringer[0]))
{
	arrVersuche[0]++;
}

if ((arrSkispringer[index] == arrSkispringer[1]) && (arrSprungort[index2] == arrSprungort[1]))
{
	arrVersuche[1]++;
}

if ((arrSkispringer[index] == arrSkispringer[2]) && (arrSprungort[index2] == arrSprungort[2]))
{
	arrVersuche[2]++;
}

if ((arrSkispringer[index] == arrSkispringer[3]) && (arrSprungort[index2] ==arrSprungort[3]))
{
	arrVersuche[3]++;
}

if ((arrSkispringer[index] == arrSkispringer[4]) && (arrSprungort[index2] == arrSprungort[4]))
{
	arrVersuche[4]++;
}


System.out.println(arrWeite[index2]);
System.out.println("Weite angeben");
weite = Double.parseDouble(eingabe.readLine());
System.out.println("Punkte Richter1");
halt1 = Double.parseDouble(eingabe.readLine());
System.out.println("Punkte Richter2");
halt2 = Double.parseDouble(eingabe.readLine());
System.out.println("Punkte Richter3");
halt3 = Double.parseDouble(eingabe.readLine());
System.out.println("Punkte Richter4");
halt4 = Double.parseDouble(eingabe.readLine());
System.out.println("Punkte Richter5");
halt5 = Double.parseDouble(eingabe.readLine());

if ((arrVersuche[0] == 2) && (arrVersuche[1] == 2) && (arrVersuche[2] == 2) && (arrVersuche[3] == 2) && (arrVersuche[4] == 2))
{


break;


}


else if (weite>arrWeite[index2])
{
K = 60.0;
arrPunkte[index]+= ((K+(weite-arrWeite[index2])*faktor)+halt1+halt2+halt3+halt4+halt5);
}
else
{
	K  = 0;
	arrPunkte[index] = ((K+(weite-arrWeite[index2])*faktor)+halt1+halt2+halt3+halt4+halt5);
}
for (int x = 0;x<arrSkispringer.length;x++)
{
System.out.println(arrSkispringer[x] + " hat " + arrPunkte[x] + "Punkte");
}



System.out.println(" ");
}
catch(IOException e)
	{
		System.out.println("Eingabefehler");
	}
	catch (NumberFormatException e)
	{
		System.out.println("Bitte nur Zahlen eingeben");
}
}
}
}
[/Java]

Ich hab mein Programm ausgebessert. Könntet ihr mir helfen, dass wenn der Springer zweimal im Ort gesprungen ist, beim dritten mal der letzte wert für den springer ausgegeben wird. mit meinem code, wenns geht bitte


----------

