# Punkte Spiel



## Kirby.exe (26. Nov 2019)

Ich habe das Gefühl ich bin blind  Aus irgendeinem Grund ist das Counter Array immer 0, woran liegt dass?


```
import java.util.Arrays;
import java.util.Scanner;

public class Zaehler {

        @SuppressWarnings("resource")
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);  
            int [] counter = new int[args.length]; //Zähler-Array
            String nameInput = "a";
           
            while(nameInput == "") {
                nameInput = sc.nextLine();
                int pointInput = sc.nextInt();
                int find = findIndex(args, nameInput);
                counter[find]+= pointInput;
                }

            System.out.print(Arrays.toString(counter));
            for(int i=0; i < args.length; i++) {
                System.out.println(args[i] + ":" + counter[i]);
            }
        }
       
        // Function to find the index of an element
        public static int findIndex(String arr[], String t)
        {
            for (int i = 0; i < arr.length; i++) {
            if (arr[i] == t) { // ist das (i+1)-te Element aus arr gleich t?
                return i;      // dann gib den Index i zurück
            }
        }
        return -1; // t nicht gefunden -> -1 zurück.
        }

    }
```


----------



## mihe7 (26. Nov 2019)

Kirby_Sike hat gesagt.:


> Aus irgendeinem Grund ist das Counter Array immer 0, woran liegt dass?


Übergibst Du denn ein Argument beim Programmaufruf?



Kirby_Sike hat gesagt.:


> ```
> if (arr[i] == t) {
> ```


Objekte (wie Strings) vergleicht man mit equals, sofern man nicht die Identität prüfen will.


----------



## fhoffmann (26. Nov 2019)

Kirby_Sike hat gesagt.:


> String nameInput = "a";
> while(nameInput == "") {


Die while-Schleife wird nie betreten.


----------



## Kirby.exe (26. Nov 2019)

Also ich habe mal meinen Code etwas angepasst, jedoch wird bis jetzt nur ein Wert korrekt ausgegeben:



Hier der Code:

```
import java.util.Arrays;
import java.util.Scanner;

public class Zaehler {

        @SuppressWarnings("resource")
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);  
            int [] counter = new int[args.length]; //Zähler-Array
            String nameInput = "a";
           
            while(nameInput.equals("") == false) {
                nameInput = sc.nextLine();
                if(nameInput.equals("")) {
                    break;
                }else {
                int pointInput = sc.nextInt();
                int find = findIndex(args, nameInput);
                counter[find]+= pointInput;
                }
                }

            System.out.print(Arrays.toString(counter));
            for(int i=0; i < args.length; i++) {
                System.out.println(args[i] + ":" + counter[i]);
            }
        }
       
        // Function to find the index of an element
        public static int findIndex(String arr[], String t)
        {
            for (int i = 0; i < arr.length; i++) {
            if (arr[i].equals(t)) { // ist das (i+1)-te Element aus arr gleich t?
                return i;      // dann gib den Index i zurück
            }
        }
        return -1; // t nicht gefunden -> -1 zurück.
        }

    }
```


----------



## mihe7 (26. Nov 2019)

Nimm 

```
while (!nameInput.isEmpty()) {
```
Das liest sich schöner. 

Zum Problem: sollst Du das mit nextLine() lösen? Wenn ja: Scanner#nextInt() belässt das Zeilenende im Puffer, so dass das darauffolgende nextLine() einen leeren String zurückgibt.


----------



## mihe7 (26. Nov 2019)

Und was soll das: String nameInput = "a"; ? Warum machst Du nicht gleich ein String nameInput = sc.nextLine(); ?


----------



## Kirby.exe (26. Nov 2019)

> Zum Problem: sollst Du das mit nextLine() lösen? Wenn ja: Scanner#nextInt() belässt das Zeilenende im Puffer, so dass das darauffolgende nextLine() einen leeren String zurückgibt.


Nicht umbedingt ich hatte mir das so überlegt, oder soll ich es lieber nur mit sc.next() machen?



mihe7 hat gesagt.:


> Und was soll das: String nameInput = "a"; ? Warum machst Du nicht gleich ein String nameInput = sc.nextLine(); ?


Weil ich dachte wenn ich es so mache, dann betritt das Programm doch die Schleife und der Wert wird erneut eingelesen


----------



## mihe7 (26. Nov 2019)

Kirby_Sike hat gesagt.:


> dann betritt das Programm doch die Schleife und der Wert wird erneut eingelesen


Ja, wenn Du zu Beginn einer Iteration liest, schon...


----------



## Kirby.exe (26. Nov 2019)

Ich verstehe nicht ganz xD Also wenn ich doch den String for der Schleife mit " " initialisiere ist es doch ok in der Schleife dann dafür einen Wert einzulesen? Was ich nicht ganz nachvollziehen kann, ist warum die Schleife nur 1 mal durchlaufen wird und die restlichen Werte im Array somit = 0 sind


----------



## Kirby.exe (26. Nov 2019)

Hab das Problem gelöst, mit Integer.parseInt(sc.nextLine());


----------

