编写一种方法,该方法可以连续地从用户读取单词,直到输入的单词“完成”,然后按照输入顺序将每个拼错的单词存储在ArrayList中。
这是我到目前为止的代码,但是每当我尝试在主类中调用它时,它始终会失败。有人可以帮帮我吗?我既包括创建方法的类,又包括调用方法的主类。我不能将这两个类组合在一起,所以我需要能够在主类中从todo调用对象。提前致谢!
样品输入:香蕉赛车小狗完成 产生的ArrayList:ananab racecar yppup
import java.util.Scanner;
import java.util.ArrayList;
public class todo extends main{
public ArrayList <String>storeBackwards (Scanner keyboard) {
ArrayList<String> words=new ArrayList ();
ArrayList<String> backwards=new ArrayList();
String input=keyboard.next();
while(!input.equalsIgnoreCase("done")) {
words.add(input);
String get="";
String back="";
for(int i=0; i<words.size();++i) {
get=words.get(i);
for(i=get.length()-1; i>=0; i--) {
back=back+get.charAt(i); }
backwards.add(back);
}
}
return backwards;
}
}
这是主要课程
import java.util.Scanner;
public class main {
public static void main(String[] args) {
Scanner keyboard=new Scanner(System.in);
todo x=new todo();
x.storeBackwards(keyboard);
}
}
答案 0 :(得分:1)
在您的代码String input=keyboard.next();
中,您仅调用一次keyboard.next()
。因此,在读取第一个标记后,字符串变量input
的值保持不变。
所以它会导致无限循环,这就是您获取异常的原因
两个for循环中使用的循环变量为int i
,对于嵌套的for循环
int j
之类的其他变量
for(int j=get.length()-1; j>=0; j--) {
back=back+get.charAt(j);
}
按如下所示修改代码后,您的测试用例已清除
public List<String> storeBackwards (Scanner keyboard) {
ArrayList<String> backwards=new ArrayList<String>();
String input=keyboard.next();
while(!input.equalsIgnoreCase("done")) {
String back="";
for(int j=input.length()-1; j>=0; j--) {
back=back+input.charAt(j);
}
backwards.add(back);
back="";
input=keyboard.next();
}
return backwards;
}
答案 1 :(得分:0)
您还可以使用StringBuffer的预定义的reverse()函数,如下代码片段所示:
ArrayList<String> backwards = new ArrayList();
Scanner keyboard = new Scanner(System.in);
String input = keyboard.next();
StringBuffer a = new StringBuffer(input);
while (!input.equalsIgnoreCase("done")) {
a = new StringBuffer(input);
backwards.add(a.reverse().toString());
input = keyboard.next();
}