2016-04-05 8 views
1

Hey Leute, ich mache gerade ein Programm, wo es die Eingabe vom Benutzer umkehren wird. Derzeit ist mein CodeJava-Fehler mit "Ausnahme im Thread"

import java.util.*; 

public class Reverse { 
    public static void main(String[] args) { 
     Scanner in = new Scanner(System.in); 

     List<String> input = new ArrayList<>(); 
     while (in.hasNextLine()) 
      input.add(in.nextLine()); 
     for (int x = 0; input.size() >= x; x++) { 
      String reverse = ""; 
      for (int z = input.get(x).length(); z > 0; z--) { 
       reverse += input.get(x).charAt(z - 1); 
      } 

      System.out.println(reverse); 
     } 
    } 
} 

Aber ich bin immer den Fehler, wo es heißt

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 3, Size: 3 
at java.util.ArrayList.rangeCheck(ArrayList.java:653) 
at java.util.ArrayList.get(ArrayList.java:429) 
at Reverse.main(Reverse.java:12)* 

Jede Hilfe wäre sehr Dank geschätzt!

+0

Sie müssen über Länge und Größe des Arrays lesen. Der Index des Arrays beginnt bei 0; Wenn Sie also 3 Elemente haben, werden sie mit 0,1,2 indexiert; Zur gleichen Zeit ist die Größe des Arrays 3; Ihr Fehler ist auf den Vergleich von equalOrGreater zurückzuführen. Ich empfehle Ihnen, über die foreach-Schleife zu lesen, die Ihnen in der Zukunft einige Probleme ersparen wird! Viel Glück! – hovanessyan

Antwort

2

Ändern Sie die Grenzen Ihrer for Schleife:

for (int x=0; x < input.size(); x++) { 
    String reverse = ""; 
    for (int z=input.get(x).length(); z > 0; z--) { 
     reverse += input.get(x).charAt(z - 1); 
    } 

    System.out.println(reverse); 
} 

Zugriff auf ein List Null-basiert, so dass in der äußeren Schleife, um eine Liste der Größe 3, der größte Wert, den Sie für den x Index wollen, ist 2.

+0

Vielen Dank! – Lummii

0

Bei der letzten Iteration ist "x" gleich input.size(), so dass das Element input.get (x) in der zweiten "for" -Schleife nicht existiert.

0
input.size() >= x 

Bei der letzten Iteration entspricht x der Größe der Liste. Da Listenindizes bei 0 beginnen, ist dies ein ungültiger Index.

Der idiomatische Weg nach Index in Java Looping ist

for (int x = 0; x < size; x++) 

Sie diese idiomatische Weise verwenden sollten.

Aber für eine solche Schleife, in dem Sie eine for-Schleife jede der Index nicht benötigen, sollten Sie verwenden:

for (String s : input) { 

Auf diese Weise ist sicherer, garantiert effizient sein unabhängig von der Art der Liste ist, und ist auch lesbarer.

0
package com.stackwork; 

    import java.util.*; 

    public class Reverse { 
     public static void main(String[] args) { 
      Scanner in = new Scanner(System.in); 
      List<String> input = new ArrayList<String>(); 
      while (in.hasNextLine()) 
       input.add(in.nextLine()); 
// prints the size of array 
      System.out.println("the array size :" + input.size()); 
      for (int x = 0; input.size() > x; x++) { 
//Prints the incremented x value at each step 
       System.out.println("the x value inside the for loop :" + x); 
       String reverse = ""; 
       for (int z = input.get(x).length(); z > 0; z--) { 
//prints the length of each string in the array 
        System.out.println("the value of z is :" + z); 
        reverse += input.get(x).charAt(z - 1); 
//prints the value in each step of reverse 
        System.out.println("each step of reverse " + reverse); 
       } 

       System.out.println(reverse); 
      } 
     } 
    } 
+0

Dies gibt den Überblick über jeden einzelnen Schritt. – VALARMATHI

+1

Kommentare und eine Erklärung würden es noch deutlicher machen! :) – CubeJockey

Verwandte Themen