Java-Code für folgene Aufgabe?

RedGuardian

Mitglied
Abend allerseits,

ich sitze nun an der folgenden Aufgabe und komme wirklich nicht weiter. Die Aufgabe lautet:

- Ein Sportschütze schießt auf eine Zielscheibe mit fünf Felder (1 bis 5, wobei die Felder wie punkte Zählen). Die Treffer werden in eine Tabelle eingetragen.

- In diesem Array treffer soll beim Aufruf der Methode trefferEinfuegen(int pTreffer) die Anzahl der jeweiligen Treffer um 1 erhöht werden. Implementieren sie diese Methode.

Ich habe auch weitere Aufgaben, um diese zu lösen, muss ich aber die erst verstehen.

Mein Quelltext soweit:

Java:
public class sportschutze
{

  int treffer [] = { 2,4,5,2,3};
   
  /**
  * Constructor for objects of class sportschutze
  */
  public sportschutze()
  {

  }

  public void trefferEinfuegen(int pTreffer)
  {
  for(int i = 0; i < treffer.length; i++) {
  treffer[i]++;
  }
  }

}

Ich denke aber, dass mein Ansatz falsch ist und nicht der Aufgabe entspricht. Mir fällt auch nichts anderes ein.

Danke im Vorraus!
 
Ich verstehe die Aufgabe so.
Java:
int treffer [] = {0,0,0,0,0};

public void trefferEinfuegen(int pTreffer)
{
    // ich gehe davon aus, dass 1-5 für die Felder übergeben wird.
    if(pTreffer < 1 || pTreffer > treffer.length) {
        return;
    }
    pTreffer--;
    treffer[pTreffer]++;
}
 
Sieht schonmal plausiber aus. Ich verstehe den code aber nicht, ich habe den Code Zeilenweise mit wie ich es verstehe oder mit Fragen kommentiert

Eine weitere Aufgabe:

Nach zwanzig Schüssen werden alle Punkte des Durchgangs zusammengerechnet. Programmieren Sie eine solche Methode.

Meine Vorstellung plus zu den Kommentaren sehen dazu wiefolgt aus (funktioniert leider nicht ganz mit der sum... in der Konsole wird ein falscher Wert ausgegeben, wenn ich es allerdings inspect gehe dann stimmt der wert.
Java:
import java.util.stream.*;
public class sportschutze
{

    int treffer [] = {0,0,0,0,0};
    int sum = 0;

    public sportschutze()
    {

    }

    public void trefferEinfuegen(int pTreffer)
    {
        // ich gehe davon aus, dass 1-5 für die Felder übergeben wird.
        if(pTreffer < 1 || pTreffer > treffer.length) { //wenn pTreffer kleiner als 1 oder pTreffer größer als länge des treffer arrays
            return;                                     //dann gebe zurück (was?)
        }
        pTreffer--;                                     // reduziere pTreffer um 1 (wieso?)
        treffer[pTreffer]++;                            //erhöhe treffer um 1
    }

    public void datenLiefern()
    {
        for (int i : treffer)
            sum += i;
           
            System.out.println("The sum is " + sum);
    }
}
 
So nun habe ich die Stellen kommentiert, hoffe es wird klarer.
Java:
public void trefferEinfuegen(int pTreffer)
{
    // ich gehe davon aus, dass 1-5 für die Felder übergeben wird.
  
    // hier wird überprüft, ob der Wert im Array überhaupt existiert. Stichwort "array out of bounds"
    if(pTreffer < 1 || pTreffer > treffer.length) {
        return; // methode beenden ohne aktion. "Nichts zurück geben"
    }
    pTreffer--; // reduziere Array Index um 1 da ein Array bei 0 anfängt.
    treffer[pTreffer]++; // erhöhe den Treffer des übergebenen Feldes.
}

Man könnte die Index Überprüfung auch negieren und den Rest der Methode in die geschweiften klammern. Dann kann das return weg fallen.

Zur weiteren Aufgabe. Hier musst Du nun halt durch das Array iterieren und die einzelnen Werte im Array summieren. Du summierst im Moment nur 0-4 unabhängig dessen was im Array steht.
 
Und wie geht das genau? Diese Aufgabe ist komplettes Neuland für mich. Könntest du mir keine konkretere Hilfe oder einen Beispieltext geben um die Aufgabe zu lösen?

Das mit "sum" stimmt aber, oder? Denn eine Aufgabe mit "sum" hatten wir noch nie, deswegen bin ich etwas verwundert.
 
Hab mir gerade Deinen Code nochmal näher angesehen und siehe da, der stimmt ja.
Java:
public void datenLiefern()
    {
        for (int i : treffer)
            sum += i;
            System.out.println("The sum is " + sum);
    }

Das int i hat mich total aus der Bahn geworfen... hier würde ich Dir empfehlen auch für die Zukunft andere Namen zu verwenden. So gut wie jeder verwendet int i in der Schleife for(int i=0;i<lenght;i++) als Index, weswegen ich auch erst beim zweiten Mal hinsehen bemerkt habe, dass es bei Dir nicht der Index, sondern der Wert ist.
 
Hier nochmal der Code ein wenig aufgeräumt. ;-)

Java:
import java.util.stream.*;

public class sportschutze
{
    int felder [] = {0,0,0,0,0};

    public void trefferEinfuegen(int feld)
    {
        // ich gehe davon aus, dass 1-5 für die Felder übergeben wird.
        if(feld < 1 || feld > felder.length) { //wenn pTreffer kleiner als 1 oder pTreffer größer als länge des treffer arrays
            return;                                     //dann gebe zurück (was?)
        }
        feld--;                                     // reduziere pTreffer um 1 (wieso?)
        felder[feld]++;                            //erhöhe feld um 1 treffer
    }

    public int datenLiefern()
    {
        int sum = 0;
        for (int treffer: felder) {
            sum += treffer;
        }
        return sum;
    }
}
 

Neue Themen


Zurück
Oben