Java 如何编写一种方法,将从用户输入接收的单词向后存储在arraylist中,直到;“完成”;有人报名吗?

Java 如何编写一种方法,将从用户输入接收的单词向后存储在arraylist中,直到;“完成”;有人报名吗?,java,arrays,arraylist,Java,Arrays,Arraylist,编写一个方法,持续读取用户输入的单词,直到输入的单词“完成”,并按照输入的顺序在ArrayList中存储反向拼写的每个单词 这是我到目前为止的代码,但每当我试图在我的主类中调用它时,它总是失败。有人能帮我吗?我已经包括了创建方法的类和调用方法的主类。我无法组合这两个类,因此我需要能够在我的主类中从todo调用对象。提前谢谢 示例输入:香蕉赛车小狗完成 结果ArrayList:ananab racecar yppup import java.util.Scanner; import java.ut

编写一个方法,持续读取用户输入的单词,直到输入的单词“完成”,并按照输入的顺序在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;


        }
    }

这里是您的代码
String input=keyboard.next()
您正在调用
键盘。next()
只调用一次。因此,在读取第一个标记后,字符串变量
input
的值保持不变

所以它会导致无限循环,这就是你得到异常的原因

两个for循环中使用的循环变量都是
int i
,对嵌套for循环使用不同的变量,如
int 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;

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

    }
公共列表存储向后(扫描仪键盘){
ArrayList向后=新建ArrayList();
字符串输入=键盘.next();
而(!input.equalsIgnoreCase(“完成”)){
字符串back=“”;
对于(int j=input.length()-1;j>=0;j--){
后退=后退+输入字符(j);
}
向后。添加(向后);
back=“”;
输入=键盘。下一步();
}
倒退;
}

您还可以使用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();
    }
ArrayList向后=新建ArrayList();
扫描仪键盘=新扫描仪(System.in);
字符串输入=键盘.next();
StringBuffer a=新的StringBuffer(输入);
而(!input.equalsIgnoreCase(“完成”)){
a=新的StringBuffer(输入);
向后。添加(a.反向().toString());
输入=键盘。下一步();
}

为什么todo类从main扩展?提供示例输入和预期输出示例输入:香蕉赛车小狗完成结果数组列表:ananab赛车yppup