2016-04-05 13 views
1

ちょっと私は、ユーザーからの入力を元に戻すプログラムを作っています。 現在、私のコードは「例外スレッド」のJavaエラー

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); 
     } 
    } 
} 

である。しかし、それはすべてのヘルプは非常に感謝をいただければ幸いです

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)* 

言うところ私はエラーを取得しています!

+0

アレイの長さとサイズについて読む必要があります。配列のインデックスは0から始まります。したがって、3つの要素がある場合、インデックスは0,1,2となります。同時に、配列のサイズは3です。あなたはequalOrGreaterの比較によるエラーです。私はあなたの将来のいくつかのトラブルを節約するforeachループについて読むことをお勧めします!がんばろう! – hovanessyan

答えて

2

変更あなたのforループの境界:Listへのアクセス

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); 
} 

はゼロベースであるので、あなたの外側のループでは、大きさ3のリストについては、xインデックスの希​​望の最大値であります2.

+0

ありがとうございます! – Lummii

0

最後のiteratonで "x"はinput.size()と等しいので、2番目の "for"ループにelement.get(x)が存在しません。

0
input.size() >= x 

最後の反復で、xはリストのサイズに等しい。リストインデックスは0から始まるので、これは無効なインデックスです。

Javaでインデックスでループの慣用的な方法は、あなたがこの慣用的な方法を使用する必要があります

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

です。リストのどんなタイプの効率的であることが保証

for (String s : input) { 

この方法がより安全である、:

しかし、あなたは、インデックスを必要としないようなループのために、あなたのために、各ループ使用する必要がありますまた、より読みやすくなっています。

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

これは、各ステップの明確なビューを提供します。 – VALARMATHI

+1

コメントと説明はさらに明確になります! :) – CubeJockey

関連する問題