我的程序给了我java.lang.ArrayIndexOutOfBoundsException:1

时间:2014-03-01 22:08:27

标签: java

我正在编写一个程序,通过创建一个数组,填充用户输入的字符串的单个单词,然后浏览每个单词并将其更改为pig latin,然后将其打印到安慰。在我的方法的while()循环中,我通常会得到上面的错误:

    package UpGAMING;

    public class Methods {

public void Translator(String s, String[] index, int location) {

    while (index[location].length() > 0) {

        location++;

        if(index.length > 0)s = s + index[location].substring(1) + index[location].substring(0,1).toLowerCase() + "ay";

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

如果我将条件更改为 while(true),我会在此行中收到java.lang.ArrayIndexOutOfBounds:2的错误:

        if(index.length > 0)s = s + index[location].substring(1) + index[location].substring(0,1).toLowerCase() + "ay";

这是我的课程,其中包含 main()方法:

    package UpGAMING;

import java.util.Scanner;

public class Basic {

public static void main(String[] args) {

    Methods method = new Methods();
    Scanner keyboard = new Scanner(System.in);
    String input;
    int indexer = 1;
    String ss = "";

    System.out.println("Enter the word or phrase you want to translate to Pig Latin:");
    input = keyboard.next();

    String[] output = input.split("\\s+");

    method.Translator(input, output, indexer);

    System.out.println();

}
}

请提供我的代码应该的代码块,因为我不是一位经验丰富的程序员。

2 个答案:

答案 0 :(得分:1)

试试这个,也许你会明白你的代码有什么问题

public class Methods {
    public void Translator(String s, String[] index, int location) {
        System.out.println("Index Length: " + index.length);
        System.out.println("Location: " + location);
        if (location >= index.length)
            System.out.println("Uppss.. ArrayIndexOutOfBoundException :((( ");
        while (index[location].length() > 0) { 
          location++; 
          if(index.length > 0) {
              s = s + index[location].substring(1) 
                    + index[location].substring(0,1).toLowerCase() 
                    + "ay";
          }
          System.out.println(s);
       } 
   }
}

试试这个..

public void Translator(String s, String l, String[] index)
{
  for (String word : index) {
    String s1=s, l1=l;
    if (word.length()> 0) {
      s1 = l1 + word.substring(1) + word.substring(0, 1).toLowerCase() + "ay";
      l1 = s1;
    }
    System.out.println(s1);
  }
}

答案 1 :(得分:0)

在main中,您使用Scanner.next()读取输入,然后将其拆分为空白。但默认情况下,扫描仪已经在空格上分割,next()只能为您输入下一个字。所以我会在循环中用next()读取输入,直到遇到约定的终止符(例如,单词END)。或者,您可以使用nextLine()而不是next()阅读,然后按照您的方式进行拆分。

然后在Translator中处理数组。我会采取诸如location < index.length之类的警卫并将location++移到循环的末尾。