Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.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 - Fatal编程技术网

Java 在堆栈中搜索按字母顺序排在第一位的名称

Java 在堆栈中搜索按字母顺序排在第一位的名称,java,Java,我是编程新手,如果这个问题很简单,请接受我的道歉 我的老师希望我们创建一个方法,在堆栈中搜索按字母顺序排在第一位的名称并返回它 例如:如果堆栈中有以下名称: 泰格·伍兹、杰克·尼古拉斯、阿诺德·帕尔默、杰克·尼古拉斯、吉米·德莫里特、杰克·尼古拉斯、山姆·斯奈德、吉米·德莫里特、本·霍根、沃尔特·哈根、汤米·阿莫尔、博比·琼斯 该方法应返回Arnold Palmer 这是我的密码: public String findFirst() { System.out.println("f

我是编程新手,如果这个问题很简单,请接受我的道歉

我的老师希望我们创建一个方法,在堆栈中搜索按字母顺序排在第一位的名称并返回它

例如:如果堆栈中有以下名称:

泰格·伍兹、杰克·尼古拉斯、阿诺德·帕尔默、杰克·尼古拉斯、吉米·德莫里特、杰克·尼古拉斯、山姆·斯奈德、吉米·德莫里特、本·霍根、沃尔特·哈根、汤米·阿莫尔、博比·琼斯

该方法应返回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;
}
公共字符串findFirst(){
System.out.println(“findFirst”);
Stacktemp=新堆栈();
字符字母='A';
字符串名称=null;
而(!names.isEmpty()){
name=names.peek();
if(name.charAt(0)=字母){
临时推送(名称);
name=names.peek();
}否则{
临时推送(名称);
name.pop();
}
}
而(!temp.isEmpty()){
name.push(temp.pop());
}
返回名称;
}
程序进入无限循环

请帮助我,因为我需要知道如何为我的程序修复它


提前感谢您的无限循环:当您测试
name.charAt(0)=letter
,如果这是真的,您不会从
name
堆栈中弹出,因此您将继续运行到该实例中(并不断推到
temp

请注意,单独解决这个问题并不能使它像您希望的那样工作。例如,您应该发现您从未更新
字母
的值是可疑的


此外,你不应该指望只看第一个字母就足够了。如果您想比较两个字符串的字母顺序,可以使用
字符串
s上的
.compareTo
方法。

用于无限循环:当您测试
name.charAt(0)=letter
时,如果这是真的,您不会从
名称
堆栈中弹出,因此您将继续运行到该实例中(以及推入并推入
temp

请注意,单独解决此问题并不能使其正常工作。例如,您应该发现您从未更新
字母的值是可疑的


另外,你不应该指望只看第一个字母就足够了。如果你想比较两个字符串的字母顺序,你可以使用
.compareTo
方法对
String
s.

如果你需要保留堆栈,你应该先复制它,但这会找到字母顺序最小的e

public String findFirst() {

        String name = null;
        while(!names.isEmpty()) {
            if(names.peek().compareTo(name) < 0) {
                name = names.pop();
            } else {
                names.pop();
            }
        }
        return name;
}
公共字符串findFirst(){
字符串名称=null;
而(!names.isEmpty()){
if(names.peek().compareTo(name)<0){
name=names.pop();
}否则{
name.pop();
}
}
返回名称;
}

如果需要保留堆栈,应先复制它,但这将找到按字母顺序排列的最小名称

public String findFirst() {

        String name = null;
        while(!names.isEmpty()) {
            if(names.peek().compareTo(name) < 0) {
                name = names.pop();
            } else {
                names.pop();
            }
        }
        return name;
}
公共字符串findFirst(){
字符串名称=null;
而(!names.isEmpty()){
if(names.peek().compareTo(name)<0){
name=names.pop();
}否则{
name.pop();
}
}
返回名称;
}

迭代集合并返回搜索元素

 for(String s:names)
 {
  if(s.startsWith("c")) // or if(s.charAt(0)==letter)
     {
      return s;
      }
 }
 return null;

迭代集合并返回搜索元素

 for(String s:names)
 {
  if(s.startsWith("c")) // or if(s.charAt(0)==letter)
     {
      return s;
      }
 }
 return null;

也许你误解了你老师的意思

参考代码:

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

也许你误解了你老师的意思

参考代码:

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

谢谢,我在我的程序中插入了这段代码,它工作正常非常感谢,我在我的程序中插入了这段代码,它工作正常非常感谢