【发布时间】:2021-06-06 15:59:48
【问题描述】:
我的任务是创建一个名为“roll”的函数,它在指定的堆栈上实现 roll(n,k) 操作。我的函数应该检查 n 和 k 都是非负的并且 n 不大于堆栈大小;如果违反了这些条件中的任何一个,则该函数应抛出运行时异常,并显示消息“roll:argument out of range” 这是我目前所拥有的:
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, B, C]
$ java PostScript 3 2\
Initial : [A, B, C, D]\
after roll(3, 2): [A, C, D, B]
$ java PostScript 2 4\
Initial : [A, B, C, D]\
after roll(2, 4): [A, B, C, 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 | |一个 | |一个 | |一个 | |一个 |
【问题讨论】:
-
您的作业模板基本上已经发布,请我们为您解决。你在哪方面有问题?
-
嗯,对我来说,问题是我不知道如何解决这个问题,这就是为什么我要求指点。
-
分解成小问题,一一解决。例如,验证就是其中之一。首先实现这一点。顺便说一句,您并不是说 roll 函数实际上必须做什么。您只是在说什么是输入验证规则。
-
在这里看看我的回答:stackoverflow.com/questions/15997536/… 有很多方法可以概念化
roll运算符。有些可能更容易或更有效地实施。例如,它可以通过分成 3 个子数组然后以不同的顺序附加来完成。根据用例,这可能比 for 循环更有效。另外,请注意 PostScript 允许k为负数。
标签: java stack postscript