我正在编写一个程序,通过创建一个数组,填充用户输入的字符串的单个单词,然后浏览每个单词并将其更改为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();
}
}
请提供我的代码应该的代码块,因为我不是一位经验丰富的程序员。
答案 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++
移到循环的末尾。