需要一点帮助!我要知道我在做什么

时间:2018-08-12 07:54:56

标签: java

我是Java的初学者,我正在创建此程序以输出字符串中最大的单词。这是我的程序;

public static void main(String[] args) {
    int largest=0; 

    String Banana= new String("It is my phone");
    System.out.println("Results are;");
    for (String retval: Banana.split(" "))
    {
        for(int i=0; i<retval.length(); i++)
        {
            if(i>largest);
            {
                largest=i;
                System.out.println(retval);
            }
        }
    }
}

当我调试程序时,它会给我输出

It It is is my my Phone Phone Phone Phone Phone

有人可以告诉我我需要解决什么吗?我不希望它打印“ it”,“ is”和“ Phone”应该只打印一次。

3 个答案:

答案 0 :(得分:2)

您不需要嵌套循环。

只需使用first循环(遍历所有单词)并存储到目前为止在每次迭代中找到的最长单词即可。

要更高级地使用Java,请尝试使用Stream API:

    Optional<String> longestWord= Arrays.stream("It is my phone".split(" "))
            .max(Comparator.comparing(String::length));

答案 1 :(得分:0)

您需要将最大的单词保留在变量中并在循环外打印。您还需要从;

中删除if(i > largest)
public static void main(String []args) {
    int largest = 0; 
    String largestWord = "";
    String banana = new String("It is my phone");
    System.out.println("Results are;");
    for (String retval: banana.split(" ")) {
        for(int i = 0 ; i < retval.length() ; i++) {
            if(i > largest) {
                largest = i;
                largestWord = retval;
            }
        }
    }
    System.out.println(largestWord);
}

请注意,变量应以小写Banana-> banana

开头

答案 2 :(得分:0)

第一个问题是,您有一个分号终止了if主体if(i>largest);{,使该块旁边的那个未连接。接下来,您只需要在拆分String所得的数组中存储最大String的索引。 Java变量名称以小写字母(banana而非Banana)开头。接下来,我将在正则表达式中使用\\s+(以消耗输入中的任何连续空白)。而且,在完成循环后, 之后,我将使用格式化的io打印结果。喜欢,

int largest = 0;
String banana = "It is my phone";
String[] words = banana.split("\\s+");
for (int i = 1; i < words.length; i++) {
    if (words[i].length() > words[largest].length()) {
        largest = i;
    }
}
System.out.printf("Results are %s.%n", words[largest]);

哪个输出

Results are phone.