我是编程新手,所以如果这个问题很简单,请接受我的道歉。
我的老师希望我们创建一个方法,在堆栈中搜索首先按字母顺序排列的名称并将其返回
例如:如果我的堆栈中有这些名称:
老虎伍兹,杰克尼古拉斯,阿诺德帕尔默,杰克尼古拉斯,吉米德梅里特,杰克尼古拉斯,萨姆斯内德,吉米德梅里特,本霍根,沃尔特哈根,汤米阿莫尔,鲍比琼斯该方法应该返回Arnold Palmer
这是我的代码:
public String findFirst() {
System.out.println("findFirst" );
Stack<String>temp = new Stack<String>();
char letter = 'A';
String name = null;
while(!names.isEmpty()) {
name = names.peek();
if(name.charAt(0) == letter) {
temp.push(name);
name = names.peek();
} else {
temp.push(name);
names.pop();
}
}
while(!temp.isEmpty()) {
names.push(temp.pop());
}
return name;
}
程序进入无限循环
请帮助我,因为我需要知道如何为我的程序修复它
提前谢谢
答案 0 :(得分:1)
对于无限循环:当你测试name.charAt(0) == letter
时,如果这是真的,你就不会从names
堆栈中弹出,所以你将继续运行到那个实例(并推动和推进temp
)。
请注意,单独修复它不会使它像您想要的那样工作。例如,您应该发现您永远不会更新letter
的值。
另外,你不应该指望只看第一个字母就足够了。如果您想根据字母顺序比较两个字符串,可以在.compareTo
s上使用String
方法。
答案 1 :(得分:0)
如果你需要保留堆栈,你应该先复制它,但这会找到字母最小的名称。
public String findFirst() {
String name = null;
while(!names.isEmpty()) {
if(names.peek().compareTo(name) < 0) {
name = names.pop();
} else {
names.pop();
}
}
return name;
}
答案 2 :(得分:0)
迭代集合并返回搜索元素。
for(String s:names)
{
if(s.startsWith("c")) // or if(s.charAt(0)==letter)
{
return s;
}
}
return null;
答案 3 :(得分:0)
可能是你误解了老师的意思。
参考代码:
import java.util.Collections;
import java.util.Comparator;
import java.util.Stack;
public class StackTest {
public static void main(String[] args) {
Stack<String> stack = new Stack<String>();
stack.push("Tiger Woods");
stack.push("Jack Nicholas");
stack.push("Arnold Palmer");
stack.push("Jack Nicholas");
stack.push("Jimmy Demerrit");
stack.push("Jack Nicholas");
stack.push("Sam Sneed");
stack.push("Jimmy Demerrit");
stack.push("Ben Hogan");
stack.push("Jimmy Demerrit");
stack.push("Walter Hagen");
stack.push("Tommy Armor");
stack.push("Bobby Jones");
Collections.sort(stack, new Comparator<String>() {
public int compare(String o1, String o2) {
// the method compareTo in String class
return o2.compareTo(o1);
}
});
//the sorted stack
System.out.println(stack);
System.out.println(stack.pop());
}
}
输出
// Last In First Out or First In Last Out
[Walter Hagen, Tommy Armor, Tiger Woods, Sam Sneed, Jimmy Demerrit, Jimmy Demerrit, Jimmy Demerrit, Jack Nicholas, Jack Nicholas, Jack Nicholas, Bobby Jones, Ben Hogan, Arnold Palmer]
Arnold Palmer