微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用堆栈在 Java 中实现 Roll 函数

如何解决使用堆栈在 Java 中实现 Roll 函数

我的任务是创建一个名为“roll”的函数,该函数在指定的堆栈上实现 roll(n,k) 操作。我的函数应该检查 n 和 k 都是非负的,并且 n 不大于堆栈大小;如果违反这些条件中的任何一个,该函数应该抛出一个运行时异常,并显示消息“滚动:参数超出范围” 这是我目前所拥有的:

import java.util.Stack;
public class PostScript{
    public static void main(String [] args){
      int n = Integer.parseInt(args[0]);
      int k = Integer.parseInt(args[1]);
      Stack<String> s = new Stack<String>();
      s.push("A"); s.push("B"); s.push("C"); s.push("D");
      System.out.println("Initial : " + s);
      roll(s,n,k);
      System.out.println("after roll(" + n + "," + k + "): " + s);
    }
    public static void roll(Stack<String> stack,int n,int k){
    
    }
}

以下是一些测试运行示例:

$ java PostScript 4 1\
Initial : [A,B,C,D]\
after roll(4,1): [D,A,C]

$ java PostScript 3 2\
Initial : [A,D]\
after roll(3,2): [A,D,B]

$ java PostScript 2 4\
Initial : [A,D]\
after roll(2,4): [A,D]

应用 roll(n,k) 的效果是将堆栈的顶部 n 个元素旋转 k 个位置,其中旋转的一般方向是朝向堆栈的顶部。更具体地说,roll(n,k) 的作用是移除顶部 n 个元素,将顶部元素循环到最后一个位置 k 次,然后替换堆栈中重新排序的元素。例如,

滚(4,1) 滚(3,2) 滚(2,4)

| D | | C | | D | |乙 | | D | | D |
| C | |乙 | | C | | D | | C | | C |
|乙 | -> |一个 | |乙 | -> | C | |乙 | -> |乙|
|一个 | | D | |一个 | |一个 | |一个 | |一个 |

解决方法

看起来我明白了。这是我的代码,以防将来有人想要这个。 导入 java.util.Stack; 导入 java.util.ArrayList;

public class PostScript {

public static void main(String [] args){
    int n = Integer.parseInt(args[0]);
    int k = Integer.parseInt(args[1]);
    Stack<String> s = new Stack<String>();
    s.push("A"); s.push("B"); s.push("C"); s.push("D");
    System.out.println("Initial : " + s);
    roll(s,n,k);
    System.out.println("after roll(" + n + "," + k + "): " + s);
}

public static void roll(Stack<String> stack,int n,int k){

    if(n < 0 || k < 0 || n > stack.size()) throw new IllegalArgumentException("argument of of range");


    ArrayList<String> arr = new ArrayList<String>(n);
    for(int i = 0; i < n ; i++) arr.add(stack.pop());


    int track = 0;
    for(int i = 1; i < k; i++){
        track++;
        if(track == n) track = 0;
    }


    for(int i = 0; i < n; i++){
        stack.push(arr.get(track--));

        if(track < 0) track = n - 1;
    }

}

}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。