# Array_Int addieren part 2



## Thisor (13. Dez 2015)

Hallo, hab eine ähnliche Aufgabe zum davorigen.

Diesmal soll ich die Summe der Zahlen im Array zurück geben, allerdings soll ich alle Zahlen die nach einer 1 bis zu nächsten 9 stehen ignorieren. Nach jeder 1 kommt mindestens eine 9. Nach einer 9 können weitere Zahlen folgen, auch wieder mit 1.
Mein bisheriger Code:



```
public static int sum19(int[]  nums){

int sum = 0;
for (int i = 0; i < nums.length - 1; i++) {
       if (nums[i] != 1) {
         sum = nums[i];

      } if (nums[i] == 9) {
         sum = nums[i];

       }
     }

     return sum;
   }
}
```

Ich bekomme es nicht richtig implementiert.
nach der ersten if-abfrage hätte ich geschrieben :

```
if (nums[i] == 1){
do{
i++;
}while(nums[i] != 9)
if(nums[i] == 9){
//und hier weiß ich nicht weiter, wenn ich sum = nums[i]; schreibe, bekomme ich //OutOfBounds. Hab´s bereits versucht nur mit do-While zu schreiben, aber vergebens.
//Und ich weiß auch nicht wie es danach gehen soll, da ja wieder eine 1 vorkommen kann
```


----------



## JStein52 (13. Dez 2015)

Definiere dir eine  boolean ignore=false;
immer wenn eine 1 gelesen wird setzt du sie auf true. Und wenn eine 9 kommt und ignore ist true setzt du es wieder auf false. Und aufaddiert wird immer wenn ignore = false ist.


----------



## Thisor (13. Dez 2015)

Habe es jetzt umgeschrieben:

```
boolean ignore = false;
        int sum = 0;

        for (int i = 0; i < nums.length; i++) {
            if (nums[i] == 1) {
                ignore = true;
            }
            if (nums[i] == 9 && ignore == true) {
                ignore = false;
                if (ignore = false) {
                    sum = sum + nums[i];
                }
            }

        }

        return sum;
    }
}
```
Funktioniert aber noch nicht ganz.
Bei:
- int[] array1 = {1,9};
soll und kommt 0 raus.
- int[] array2 = {1,2,9};
soll auch 0 raus kommen, kommt 0 raus.
-int[] array3 = {2,1,2,3,9,3};
sollte 5 rauskommen, kommt aber 0 raus

Also bei allen Testfällen wo eine 0 raus kommen soll, dies kommt aber überall.
Hab die letzte if-Anweißung woanders platziert, also nicht als geschachtelte if-Anweißung, ändert aber nichts.


----------



## JStein52 (13. Dez 2015)

Ich hätte es so gemacht:


```
public static int sum19(int[] nums) {

        int sum = 0;
        boolean ignore = false;
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] == 9 && ignore) {
                ignore = false;
            }
            if (!ignore)
                sum += nums[i];
        
            if (nums[i] == 1) {
                ignore = true;
            }
        }

        return sum;
    }
```

Edit: ich habe gerade gesehen, die 1 und die 9 selber sollen nicht mitaddiert werden ???? Das steht aber so nicht in der Anforderung.

In dem Fall musst du es so machen:


```
public static int sum19(int[] nums) {

        int sum = 0;
        boolean ignore = false;
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] == 1) {
                ignore = true;
            }
            if (!ignore)
                sum += nums[i];
            if (nums[i] == 9 && ignore) {
                ignore = false;
            }
           
        }

        return sum;
    }
```


----------



## Thisor (13. Dez 2015)

Hab mir die Aufgabe nochmals durchgelesen, da steht es auch nicht drin das 1 und 9 nicht mit addiert werden dürfen.
Funktioniert zwar jetzt, allerdings versteh ich nicht wieso die letzten zwei if-Anweißungen so sein müssen und wieso es nicht funktioniert wenn ich sie vertausche, also die Reihenfolge?


----------



## JStein52 (13. Dez 2015)

Weil das hier falsch war:

if (ignore = false) {

Das muss if (ignore == false) {  heissen. Und dann war es natürlich an der falschen Stelle.


----------



## Thisor (13. Dez 2015)

versteh immer noch nicht wieso es was ausmacht wenn ich 

if (ignore == false) {
         sum = sum + nums_; 
zum schluss schreibe, vor dem
if (nums == 9 && ignore == true) {
         ignore = false;_


----------



## JStein52 (13. Dez 2015)

Ja, sorry, meine Antwort passte auch nicht zu deiner Frage. Ich dachte du willst was zu deiner Lösung wissen.

Also die Reihenfolge ist deshalb wichtig damit der Wechsel von 1 auf irgendwas bzw. von irgendwas auf 9 klappt. Spiele doch einfach mal eins deiner Testbeispiele per Hand durch. Einmal mit meiner Reighenfolge und einmal mit anderer. Dann wirst du den Unterschied schnell merken. Und du hast ja bei meinen beiden Lösungen gesehen dass die Abfragen selber gleich sind aber die Reihenfolge darüber entscheidet ob die 1er und 9er mitaddiert werden sollen.


----------



## Thisor (14. Dez 2015)

Ich bin zwar noch nicht durch mit dem debuggen, aber hab schonmal eine Frage:
-Was ist 
ERROR: JDWP Unable to get JNI 1.2 environment, jvm->GetEnv() return code = -2
JDWP exit error AGENT_ERROR_NO_JNI_ENV(183):  [util.c:840]
//Bekomme das wenn ich es ausführe, das Ergebniss wird mir dennoch angezeigt vorher
-Und wieso bekomme ich das mit System.exit(0); gefixed?
Was genau macht das System.exit(0);? //Und wieso 0 ? Oo


----------



## VfL_Freak (14. Dez 2015)

Moin,



Thisor hat gesagt.:


> Was genau macht das System.exit(0);? //Und wieso 0 ? Oo


Ist Google kaputt ??? 

http://stackoverflow.com/questions/...stem-exit0-system-exit-1-system-exit1-in-java

Gruß Klaus


----------



## Thisor (14. Dez 2015)

Oh, danke  
Ich versteh nicht wieso der Fehler mir angezeigt wurde. 
Wenn ich den Parameter frei angeben kann/soll, also ob System.exit(0), 1, -1  etc drin steht, dann kann ich doch quasi dem Programm sagen, dass es richtig lief, obwohl es nicht tat..ist das nicht etwas sinnfrei?


----------



## VfL_Freak (14. Dez 2015)

Zu dem Fehler hatte auch nichts gesagt, nur zur zweiten Frage 
Aber "Unable to get JNI 1.2 environment" sollte doch wohl sich sprechen ...

Gruß Klaus


----------



## Joose (14. Dez 2015)

Es steht nirgends geschrieben was man zurückgeben muss, bzw gibt es keinen allgemeinen Standard das -1 bedeutet das ein Fehler passiert ist. Das hängt von Programm zu Programm ab und daher ist dieser Wert frei wählbar.


----------



## Thisor (14. Dez 2015)

Was will es denn mit JNI 1.2, bzw wo benutze ich denn native Methoden?
Ich kann mir noch nicht viel unter all dem vorstellen.
By the way, ich studiere Wirtschaftsinformatik und habe so das Gefühl, dass ich noch ziemlich unsicher bin oder komme nicht von selbst auf die Methoden bzw Lösungswege, und erst wenn es mir jemand sagt kommt dieses "ach sags doch gleich - ich kanns nachvollziehen-hätte ich auch von allein drauf kommen können"-  Gefühl (letzteres tu ich aber nicht und das nervt mich). Vielleicht bin ich auch einfach nur langsam mit lernen und verstehen. Mathe ist leider ebenfalls nicht wirklich meine Stärke. Das Studium mag ich allerdings durchziehen. Habt ihr denn Vorschläge wo bzw wie ich am besten üben kann?

sorry für´s Offtopic


----------



## VfL_Freak (14. Dez 2015)

Moin,

dies mal zu JNI:
https://de.wikipedia.org/wiki/Java_Native_Interface
Scheinbar soll nativer Code aufgerufen werden ...

Gruß Klaus


----------

