Laufzeitfehler bei Übungsaufgabe

Abstract90

Neues Mitglied
Guten Tag!

Ich bin neu im Forum und habe eine Frage zu folgender Übungsaufgabe:

Eine Folge von ganzen Zahlen soll eingelesen und in der Form wieder ausgegeben werden, daß
jeweils drei Zahlenpaare nebeneinander in einer Zeile stehen. Nach jeweils zwei Zeilen soll eine
Leerzeile gedruckt werden.

Nun habe ich folgendes programmiert:

Java:
package test1;

public class Main {

  public static void main(String[] args) {
  int i=0;
  int d=0;
  int e=0;
  int[] array={6,9,5,6,3,5,6,4,9,6,3,4,3,6,7,8};
   while(d<array.length-2){
  
     e=0;
     while(e<2){
       i=0;
       while(i<3){
         System.out.print(array[d]);
         System.out.print(array[d+1]);
         d=d+2;
         i=i+1;
         System.out.print("\t");
        
        
       }
       System.out.println("");
       e=e+1;
     }
     System.out.println("");
   }
  
  }
}

Warum bekomme ich eine Out of Bounds Exception?

Ich danke im vorraus!
 
In Deinem Array sind 16 Zahlen (So Ich mich nicht verzählt habe).
Innerhalb Deiner while Schleife gibst Du immer 6 Zahlen aus. (2 * 3 Zahlen)

Also wird geschaut:
d ist 0 und daher < 14
-> 6 Zahlen werden ausgegeben (0..5)
d ist 6 und daher < 14
-> 6 Zahlen werden ausgegeben (6..11)
d ist 12 und daher < 14
-> Es sollen 6 Zahlen ausgegeben werden, also Index 12..18
Mit 16 Zahlen hast Du aber nur die Indices 0..15

Beim Zugriff auf Element 16 kommt daher eine IndexOutOfBoundsException.
 
Es gibt da mehrere Herangehensweisen und so hätte ich es wahrscheinlich gemacht:

Java:
    public static void print(int[] a) {
        PrimitiveIterator.OfInt iterator = Arrays.stream(a).iterator();
        for (int i = 0; iterator.hasNext(); i++) {
            for (int j = 0; j < 2; j++) {
                for (int k = 0; k < 3; k++) {
                    if (iterator.hasNext()) {
                        System.out.print(iterator.nextInt() + " ");
                    }
                }
                System.out.println();
            }
            System.out.println();
        }
    }

    public static void print_b(int[] a) {
        for (int i = 0; ; ) {
            for (int j = 0; j < 2; j++) {
                for (int k = 0; k < 3; k++) {
                    if (i >= a.length) {
                        return;
                    }
                    System.out.print(a[i++] + " ");
                }
                System.out.println();
            }
            System.out.println();
        }
    }

    public static void main(String[] args) {
        int[] array = {6, 9, 5, 6, 3, 5, 6, 4, 9, 6, 3, 4, 3, 6, 7, 8};
        print(array);
        print_b(array);
    }

wobei mir print etwas besser gefällt als print_b ...
 
Hier ruft ja schon der Modulo Operator von der Weite:
Java:
for (int i = 1; i <= array.length; i++) {
  System.out.print(array[i-1]);
  if (i % 3 == 0) {
    System.out.println();
  } else {
    System.out.print(" ");
  }
  if (i % 6 == 0) {
    System.out.println();
  }
}
 
Ich habe es am Ende so gelöst:

Java:
package test1;

public class Main {

  public static void main(String[] args) {
  int i=0;
  int d=0;
  int e=0;
  int[] array={6,9,5,6,3,5,6,4,9,6,3,5,3,9,3,4,3,6,7,8,3};
   while(d<array.length-2){
 
     e=0;
     while(e<2){
       i=0;;
       while(i<3){
         System.out.print(array[d]);
         if(d<array.length-1){
          System.out.print(array[d+1]);
          }
         System.out.print("\t");
         d=d+2;
         if(d>=array.length-2){
           break;
         }
         i=i+1;
        
        
       }
       if(d!=array.length-1){
        
        System.out.println("");
        }
       e=e+1;
     }
     System.out.println("");
   }
 
  }
}

Ist zwar nicht so elegant wie eure Beispiele, aber es funktioniert. Trotzdem danke für eure Antworten!
 

Zurück
Oben