关于调试:查找字符串数组中最短的单词java

finding the shortest word in an array of strings java

我正在尝试编写一个代码来接收一组单词,并返回字符长度最小的单词。非常简单,由于某种原因,当其中有一个较短的单词(例如"不")时,它会返回"再见"。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class function2 {

    public static void main(String [] args) {
        String [] SA = {"hello","goodbye","jack","bye","yes","no","yoo"};
        smallest(SA);
        System.out.println("The shortest word is" + smallest(SA));
    }

    public static String smallest(String SA[]) {
        String first = SA[0];
        for (int i = 1 ; i < SA.length ; i++) {
            if ((SA[i].compareTo(first)) < 0) {
                first = SA[i];
            } // if
        } // for
        return first;
    }// smallest
}// lab1b


compareTo 不比较字符串的长度,而是比较它们的字母顺序。

您应该将您的条件更改为 if (SA[i].length()<first.length()).


你的方法很接近,但是你的变量名有点难以阅读开始你只需要调用你的方法一次来打印最短的名字(调用它两次搜索两次,并丢弃第一个结果),

1
2
3
4
public static void main(String[] args) {
    String[] SA = {"hello","goodbye","jack","bye","yes","no","yoo" };
    System.out.println("The shortest word is" + smallest(SA));
}

接下来,测试您的输入是否有效(不是 null 和至少一个元素)通常是一个好主意。您还应该决定如何处理这些情况,我在下面选择了 return"";。最后,您需要检查 length() 字符串以获得最短的单词。类似的东西,

1
2
3
4
5
6
7
8
9
10
11
12
public static String smallest(String words[]) {
    if (words == null || words.length < 1) {
        return"";
    }
    String smallest = words[0];
    for (int i = 1; i < words.length; i++) {
        if (words[i].length() < smallest.length()) {
            smallest = words[i];
        }
    }
    return smallest;
}// smallest

在 Java 8 中,您创建一个 Comparator 来检查字符串的长度,这将使数组升序,将该列表转换为流,并使用 sorted 对数组进行排序,最终使用 findFirst返回第一个元素和 get() 将其转换为 String.

1
2
3
4
String[] words = new String[]{"Hello","aadsads","adssadsadads","aaa"};
String shortest = Arrays.asList(words).stream()
        .sorted((e2, e1) -> e1.length() > e2.length() ? -1 : 1)
        .findFirst().get();


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import java.util.Comparator;
import java.util.function.Function;

import static java.util.Arrays.asList;

public class Foo {

    public static void main(String[] args) {
        String[] words =
            {"hello","goodbye","jack","bye","yes","no","yoo"};
        System.out.println(shortestWord(words));
    }

    static String shortestWord(String[] words) {
        return asList(words).stream().min(compareBy(String::length)).get();
    }

    static <A, B extends Comparable> Comparator<A> compareBy(
            Function<A, B> f) {
        return (A x, A y) -> f.apply(x).compareTo(f.apply(y));
    }
}

我不确定你想用方法 compareTo() 做什么,但是如果你想继续查找字符串的长度,你可以使用 length() 方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class function 2
{

    public static void main(String[] args) {
        String [] SA = {"hello" ,"goodbye"  ,"jack" ,"bye" ,"yes" ,"no" ,"yoo"};

        System.out.println("The shortest word is" + smallest(SA));
    }

    public static String smallest(String SA[]) {
        //Keep track of the shortest word by index and length
        int index = 0, minLength = SA[0].length();
        for (int i = 1; i < SA.length; i++){
            //if the next string is smaller in length then we save that index and length in our variables
            if(SA[i].length() < minLength){
                index = i;
                minLength = SA[i].length();  
            }          
        }
        //returns the smallest word
        return SA[index];
    }

}