如何编写一种方法,将单词从用户输入接收到的数组列表中向后存储,直到输入“完成”?

时间:2018-10-30 05:04:40

标签: java arrays arraylist

编写一种方法,该方法可以连续地从用户读取单词,直到输入的单词“完成”,然后按照输入顺序将每个拼错的单词存储在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);


}

}

2 个答案:

答案 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();
    }