【问题标题】:I have a problem with methods on Java could I have some advice?我对 Java 的方法有疑问,可以给我一些建议吗?
【发布时间】:2021-02-14 08:41:31
【问题描述】:

我的任务是将输出句子中最长单词的程序拆分为同一类中的多个方法。我不断尝试不同的方法,但似乎都没有奏效。有人可以帮我吗? 这是程序:

import java.util.Scanner;
public class Test{
    
    public static str getUserInput(Scanner sc) {
        System.out.print("Enter a string or sentence: ");
        // Return the string inputted by the user
        return sc.nextLine();
        return str;
    }

    public static void getlongestWord(str) { 
        Scanner str2 = new Scanner(str);  
        //Initialise longestWord with the first word in str
        String longestWord = str2.next();
        //Initiaise maxlen with length of first word in str
        int maxlen = longestWord.length();
        while(str2.hasNext())  //This loop will keep running till words are present
        {
            String word = str2.next(); //Storing next word in variable
            int len = word.length();    //Storing word's length
            if(len>maxlen)  //If this length is more than maxlen, longestWord and maxlen are changed
            {

                longestWord = word;  
                maxlen = len;
            }
        }
        return longestWord;
        return maxlen;
    }
    int longestWord;
    int maxlen;
    public static void getOutput (int longestWord) {
        System.out.println("The longest word is '" + longestWord );
    }

    public static void getOuput2 (int maxlen){
        System.out.println ("of length "+maxlen+" characters.");
    }
}

【问题讨论】:

  • return longestWord; return maxlen; 如果您已经返回了最长的单词,那么尝试返回单词长度有什么意义?每个字符串都知道它的长度,所以当你返回一个字符串时,客户端也可以通过str.length() 方法读取它的长度。
  • 顺便说一句,如果您希望方法返回任何您需要在方法声明中指定的内容。现在你的getlongestWord 声明为void 返回类型而不是String。它还需要为其参数指定类型,所以getlongestWord(str) 应该是getlongestWord(String str)
  • 似乎没有任何效果。你这是什么意思?有例外吗?是不是输出了不正确的数据?

标签: java methods bluej


【解决方案1】:

我在你的代码中留下了一些 cmets:

import java.util.Scanner;

public class Test {

    public static str getUserInput(Scanner sc) { // The return type should be of type String and not str.
        System.out.print("Enter a string or sentence: ");
        return sc.nextLine();
        return str; // you can't have a return statement immediately after another return statement :)
    }

    public static void getlongestWord(str) { // The method parameter is not of a valid type (it is not String)
        Scanner str2 = new Scanner(str);  
        String longestWord = str2.next();
        int maxlen = longestWord.length();
        while(str2.hasNext())
        {
            String word = str2.next(); 
            int len = word.length();    
            if(len>maxlen)
            {

                longestWord = word;  
                maxlen = len;
            }
        }
        return longestWord;
        return maxlen; // you can't have a return statement immediately after another return statement :)
    }
    int longestWord; // Instance variables should be declared at the top of the class
    int maxlen;

    public static void getOutput(int longestWord) { // Methods named {getSomething()} should return that something. This method returns void.
        System.out.println("The longest word is '" + longestWord);
    }

    public static void getOuput2(int maxlen) { // Focus on proper naming.
        System.out.println("of length " + maxlen + " characters.");
    }
}

我还写了我自己的版本:

import java.util.Scanner;

public class Test {

    public static void main(String[] args) {
        System.out.print("Enter a string or sentence: ");
        Scanner sc = new Scanner(System.in);
        processInput(sc);
    }

    public static void processInput(Scanner sc) {
        String sentence = sc.nextLine();
        String longestWord = findLongestWord(sentence);
        printInfo(longestWord);
    }

    public static String findLongestWord(String sentence) {
        String longest = "";
        for (String currentWord : sentence.split(" ")) {
            if (longest.length() < currentWord.length())
                longest = currentWord;
        }
        return longest;
    }

    public static void printInfo(String longestWord) {
        System.out.println("The longest word is '" + longestWord);
        System.out.println("of length " + longestWord.length() + " characters.");
    }

}

我的解决方案绝不是完美的解决方案,因此您可以继续了解我所做的更改,然后实施您自己的更改。 请记住:每个类和方法都应该只负责一件事。

【讨论】:

    【解决方案2】:

    一个简单的方法是在空格上分割字符串,然后迭代结果数组以找到最长的单词。要找到最长的单词,您可以假设第一个单词是最长的,并将其存储在一个变量中(例如String longestWord),并且每当遇到比这更长的单词时,将存储的单词替换为该单词。

    public class Main {
        public static void main(String[] args) {
            // Test string
            String str = "Stack Overflow is the largest, most trusted online community for developers to learn, share​ ​their programming ​knowledge, and build their careers.";
            System.out.println("The longest word in the sentence: " + getLongestWord(str));
        }
    
        static String getLongestWord(String str) {
            // Split the string on whitespace
            String[] arr = str.split("\\s+");
    
            // Start with the assumption that the first word is longest
            String longestWord = arr[0];
            int maxLen = longestWord.length();
    
            for (String s : arr) {
                if (s.length() > maxLen) {
                    maxLen = s.length();
                    longestWord = s;
                }
            }
    
            return longestWord;
        }
    }
    

    输出:

    The longest word in the sentence: programming
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-17
      • 2021-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-01
      • 1970-01-01
      相关资源
      最近更新 更多