Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何对字符串执行撤消和重做操作?_Java_String - Fatal编程技术网

Java 如何对字符串执行撤消和重做操作?

Java 如何对字符串执行撤消和重做操作?,java,string,Java,String,这是一个面试问题。它需要创建一个由用户提供的字符串池。然后,他应该能够对输入的字符串执行撤消删除最后输入的字符串和重新获取最后删除的字符串操作。这应该只使用核心Java数据结构来完成。如何做到这一点?这个问题太宽泛,可能有许多不同的方法。我想,这很容易 import java.util.HashMap; import java.util.Map; import java.util.Scanner; import java.util.Stack; public class RedoUndo {

这是一个面试问题。它需要创建一个由用户提供的字符串池。然后,他应该能够对输入的字符串执行撤消删除最后输入的字符串和重新获取最后删除的字符串操作。这应该只使用核心Java数据结构来完成。如何做到这一点?

这个问题太宽泛,可能有许多不同的方法。我想,这很容易

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.Stack;

public class RedoUndo {

    static Map<Integer, String> m = new HashMap<>();
    static Stack<String> stack = new Stack<>();
    static int size = 0;

    public static void main(String arg[]) {

        Scanner in = new Scanner(System.in);
        System.out.println("Numer of string you need");
        int n = in.nextInt();
        System.out.println("Enter Strings");
        for (int i = 0; i < n; i++) {
            size++;
            m.put(i, in.next());
        }
        size = size - 1;
        System.out.println("orignal : " + m); // 1
        undo();
        undo();
        redo();
        redo();
    }

    private static void undo() {
        // TODO Auto-generated method stub
        removeMy();
        System.out.println("undo : " + m);// 2
    }

    private static void redo() {
        // TODO Auto-generated method stub
        addMy();
        System.out.println("redo : " + m);// 3
    }

    public static void addMy() {
        String s = stack.pop();
        // TODO Auto-generated method stub
        size++;
        m.put(size, s);

    }

    public static void removeMy() {

        // TODO Auto-generated method stub

        String str = m.get(size);
        m.remove(size);
        stack.add(str);
        size--;

    }

}
import java.util.Scanner;
import java.util.Stack;
import java.util.Arrays;

public class RedoUndo {
    static Stack<String> stack1 = new Stack<>(); // your current data
    static Stack<String> stack2 = new Stack<>(); // contains strings that you "undo"

    public static void main(String arg[])
    {
        Scanner in = new Scanner(System.in);
        while(true)
        {
            System.out.println("press 1:enter new  2:undo  3:redo");
            switch(in.nextInt())
            {
                case 1:
                System.out.println("enter it:");
                stack1.push(in.next());
                break;

                case 2:
                stack2.push(stack1.pop());
                break;

                case 3:
                stack1.push(stack2.pop());
                break;
            }

            System.out.println("current data:" + Arrays.toString(stack1.toArray()));
            System.out.println("data for redo:" + Arrays.toString(stack2.toArray()));
        }
    }
}

如果答案太宽泛,不要回答。@Makoto我已经编辑了它,等待审查。我试图缩小范围。我也没有发现类似的问题。值得回答。