有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在java中按字母顺序确定没有数组的最高单词

我一直在尝试编写一个程序,它可以做两件事,在用户生成的字符串中查找最长的单词,并按字母顺序查找最高的单词。我有最长的单词“工作正常”,但我无法找出字母顺序问题来挽救我的生命。我遇到的问题是如何比较for循环中运行的单词。任何帮助都将不胜感激

/*
CSC 190
Hw7
Ryan Burchfield
10/19/17
Purpose: Take a string and return both the Longest and largest words in the String.
 */
package hw7;
import java.util.Scanner;
class MyString{
    String s;

    MyString( String s1 ){
        s=s1;

    }
    void setString(String s1){
        s=s1;

    }
    String getLongest(String s1){
        s1 = s1 +" ";
        int length = s1.length();
        String temp="", longestw="";
        char ltr;
        int templ, longest=0;

        for(int i=0; i<length;i++){

            ltr = s1.charAt(i);
            if(ltr!=' ' && ltr!=',' && ltr!='.'){
                temp=temp+ltr;
            }
            else{
                templ=temp.length();

                if(templ>longest){
                    longest=templ;
                    longestw=temp;
                }
                temp="";
            }
        }
        return longestw;
    }
    String getLargest(String s1){
        s1= s1 + " ";
        String temp="", curWord="",largestW="";
        char ltr;
        for(int i=0; i<s1.length(); i++){
            ltr = s1.charAt(i);
            if(ltr!=' ' && ltr!=',' && ltr!='.'){
                temp= temp + ltr; 

            }else{


                char ltr1;    
                for(int j=0; j<s1.length(); j++){
                    ltr1 = s1.charAt(j);
                    if(ltr1!=' ' && ltr1!=',' && ltr1!='.'){
                        curWord= curWord + ltr1; 
                    }
                    else{   

                        int largest = temp.compareToIgnoreCase(curWord);
                        System.out.println(temp+","+curWord+","+temp.compareToIgnoreCase(curWord));
                        System.out.println(largest);
                        if(largest > 0){

                            largestW=curWord;
                        }else{
                            largestW=temp;
                        }
                        curWord="";    
                        temp="";  
                    }
                }
            }
        }
        return largestW;
    }

}


public class Hw7 {


    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.println("Please enter a series of words: ");
        String s = in.nextLine();
        MyString s1 = new MyString(s);
        System.out.println("The longest word is: " + s1.getLongest(s));
        System.out.println("The largest word is: " + s1.getLargest(s));
    }

}

共 (4) 个答案

  1. # 1 楼答案

    那里有很多代码,几乎所有的代码都是不必要的

    试试这个:

    String longest = Arrays.stream(s.split(" +")).sort(comparing(String::length).reversed()).findFirst().get();
    String highest = Arrays.stream(s.split(" +")).sort().reduce((a,b) -> b).get();
    

    注意:在提交作业之前,请仔细阅读并理解代码

    免责声明:代码可能无法编译,甚至无法在我的手机上使用(但它很有可能会工作)

  2. # 2 楼答案

    作为你的帖子,你可以得到最长的单词。我将向您展示如何按照最长单词的字母顺序获取最高字母

    • 有一个方法调用toCharArray(),您可以使用这个方法来生成给定单词的字母数组

    • 然后可以使用强制转换来获取给定字符值的整数值

    • 然后您可以比较该整数值以获得最高整数值

    • 一旦你有了最高的整数值,就把这个int值转换成char来表示字母

    以下链接可获得更多信息

    https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#toCharArray()

    http://javaseeeedu.blogspot.com/2015/12/casting-part-1.html

    我已经更改了你的代码,试试看

    import java.util.Scanner;
    class MyString{
        String s;
    
        MyString( String s1 ){
            s=s1;
    
        }
        void setString(String s1){
            s=s1;
    
        }
        String getLongest(String s1){
            s1 = s1 +" ";
            int length = s1.length();
            String temp="", longestw="";
            char ltr;
            int templ, longest=0;
    
            for(int i=0; i<length;i++){
    
                ltr = s1.charAt(i);
                if(ltr!=' ' && ltr!=',' && ltr!='.'){
                    temp=temp+ltr;
                }
                else{
                    templ=temp.length();
    
                    if(templ>longest){
                        longest=templ;
                        longestw=temp;
                    }
                    temp="";
                }
            }
            return longestw;
        }
        char getLargest(String s1){
    
            int max = 0;
    
            char []arr = s1.toCharArray();
    
            int temp[] = new int[arr.length];
    
            for(int i=0;i<arr.length;i++){  
    
                temp[i] = (int)arr[i];
                if(i!=0){
    
                    if(temp[i-1] < temp[i]){
                            max = temp[i];
                    }else{
    
                     max = temp[i-1];   
    
                    }
                }                   
            }   
    
            return (char)max;
        }
    
    }
    
    
    class Demo {
        public static void main(String[] args) {
            Scanner in = new Scanner(System.in);
            System.out.println("Please enter a series of words: ");
            String s = in.nextLine();
            MyString s1 = new MyString(s);
            System.out.println("The longest word is: " + s1.getLongest(s));
            System.out.println("The largest letter is: " + s1.getLargest(s1.getLongest(s)));
        }
    }
    

    enter image description here

  3. # 3 楼答案

    if(largest > 0){
        largestW=curWord;
    }else{
        largestW=temp;
    }
    

    这就是程序出错的地方。您没有将currWord/templargestW进行比较

    写入getLargest()的更好方法是使用与getLongest()相同的方法,即使用一个循环,每次将largestWtemp进行比较(如果largestW为空,则只需设置largestW = temp

  4. # 4 楼答案

    我会用一个方法来解决这个问题,这个方法需要Comparator<String>和输入String;使用^{}构造函数构造Scanner,并使用^{}修改分隔符以使用空格、逗号和文字'.'。然后使用提供的Comparator来比较通过Scanner可用的令牌。比如

    static String findWord(Comparator<String> comp, String s1) {
        Scanner sc = new Scanner(s1);
        sc.useDelimiter("[\\s,\\.]+");
        String max = null;
        while (sc.hasNext()) {
            String token = sc.next();
            if (max == null || comp.compare(max, token) < 0) {
                max = token;
            }
        }
        return max;
    }
    

    然后,假设您使用的是Java 8+,main可以使用Comparator编写,比如——

    Comparator<String> stringLengthComparator = Comparator.comparingInt(
            String::length);
    Comparator<String> stringAlphaComparator = Comparator.naturalOrder();
    Scanner in = new Scanner(System.in);
    System.out.println("Please enter a series of words: ");
    String sentence = in.nextLine();
    System.out.printf("Longest: %s%n", findWord(stringLengthComparator, sentence));
    System.out.printf("Lexically: %s%n", findWord(stringAlphaComparator, sentence));
    

    但是,如果您使用的是较早的版本,或者您想更好地理解它的功能,那么如果您用等效的代码替换这两个Comparator则完全相同的代码将起作用,比如

    Comparator<String> stringLengthComparator = new Comparator<String>() {
        public int compare(String a, String b) {
            return Integer.compare(a.length(), b.length());
        }
    };
    Comparator<String> stringAlphaComparator = new Comparator<String>() {
        public int compare(String a, String b) {
            return a.compareTo(b);
        }
    };