2

私はJavaの初心者です。私はCで授業を受けたので、その考え方から抜け出そうとしています。私が書いているプログラムには、ユーザーが整数nを入力し、その後にn個の単語を入力するセクションがあります。次に、このセクションではそれらの単語を検索して最短の単語を見つけ、それをユーザーに返します。たとえば、入力は次のようになります。

入力: 4つのJavaプログラミングは楽しいです

出力: IS

私が現在持っているコードは間違った単語を返すようです。この場合、「IS」を返す必要があるときに「PROGRAMMING」を返します。多分あなた方全員が私を正しい方向に向けることができると思いました。

int numwords = scan.nextInt();
    String sentence = scan.nextLine();
    String shortestword = new String();
    String[] words = sentence.split(" ");
    for (int i = 0; i < numwords; i++){
        if (shortestword.length() < words[i].length()){
            shortestword = words[i];
    
        }
    }
    System.out.printf(shortestword);

私が何をしようとしていたかを理解するために、単語を文字列「sentence」に入力し、その文字列を配列「words []」内の個々の単語に分割して、forを実行しようとしました。ループして、長さを配列のエントリと比較することにより、文字列を相互に比較します。ご協力いただきありがとうございます!

4

4 に答える 4

5

ほぼそこにいますが、最短の単語を検出するための比較が逆になっています。そのはず:

if (words[i].length() < shortestword.length()) {

つまり、現在の単語の長さが前の最短の単語の長さよりも短い場合は、それを上書きします。

また、空Stringで開始する代わりに、最初の単語、つまり。で開始しwords[0]ます。それ以外の場合、空の文字列は常に配列内のどの文字列よりも短くなります。

String[] words = sentence.split(" ");
String shortestword = words[0];
for (int i = 1; i < numwords; i++) { // start with 1, because you already have words[0]
于 2012-09-08T00:15:36.207 に答える
2

ifステートメントが間違っています。これは機能するはずです。

int numwords = scan.nextInt();
    String sentence = scan.nextLine();
    String shortestword = new String();
    String[] words = sentence.split(" ");
    for (int i = 0; i < numwords; i++){
        if (shortestword.length() > words[i].length()){
            shortestword = words[i];

        }
    }
    System.out.printf(shortestword);
于 2012-09-08T00:16:30.340 に答える
0

Java8のStreamAPIを利用するバージョンはのとおりです。

String sentence = "PROGRAMMING IS FUN";
List<String> words = Arrays.asList(sentence.split(" "));

String shortestWord = words.stream().min(
                                     Comparator.comparing(
                                     word -> word.length()))
                                    .get();

System.out.println(shortestWord);

より複雑なオブジェクトをそれらの属性のいずれかで並べ替えることもできます。いくつかのPersonsがあり、それらlastNameを最短で最初に並べ替えたい場合、コードは次のようになります。

Person personWithShortestName = persons.stream().min(
                                                 Comparator.comparing(
                                                 person -> person.lastName.length()))
                                                .get();
于 2014-12-27T23:37:54.360 に答える
0

Java8はそれをより簡単にしました。String配列をリストに変換し、を使用sorted()してリストを昇順で比較およびソートします。最後に、を使用findFirst()してリストの最初の値を取得します(これは並べ替え後に最短になります)。

見てください、

String[] words = new String[]{"Hello", "name", "is", "Bob"};
String shortest = Arrays.asList(words).stream()
      .sorted((e2, e1) -> e1.length() > e2.length() ? -1 : 1)
      .findFirst().get();

System.out.println(shortest);
于 2015-02-03T20:54:54.370 に答える