Array_Int addieren part 2

Thisor

Bekanntes Mitglied
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:


Java:
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 :
Java:
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

Top Contributor
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

Bekanntes Mitglied
Habe es jetzt umgeschrieben:
Code:
        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

Top Contributor
Ich hätte es so gemacht:

Code:
    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:

Java:
    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;
    }
 
Zuletzt bearbeitet:

Thisor

Bekanntes Mitglied
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

Top Contributor
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

Bekanntes Mitglied
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

Top Contributor
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

Bekanntes Mitglied
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
 

Thisor

Bekanntes Mitglied
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? :p
 

VfL_Freak

Top Contributor
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

Top Contributor
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

Bekanntes Mitglied
:confused: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
 

Neue Themen


Oben