【问题标题】:How to find shortest word in a java string without using arrays?java - 如何在不使用数组的情况下找到java字符串中的最短单词?
【发布时间】:2020-02-12 07:42:47
【问题描述】:

我正在尝试使用与教程相同的代码格式。它将打印最长的单词以及最长单词的长度。导师告诉我,要找到最短的单词,我必须将 if 语句翻转为小于 ('

"最短单词:"",长度:0"

我不知道如何解决这个问题,所以它会寻找一个实际的单词而不是一个空字符。我想在这里遵循相同的逻辑,而不使用数组。

Scanner in = new Scanner(System.in);

System.out.println("Please enter a phrase: ");
String phrase = in.nextLine();


String w = "";
String lw = "";       
int l;
char ch;


phrase = phrase + " ";
l = phrase.length();
int i;
for (i=0; i < l; i++) {
    ch = phrase.charAt(i);
    if(ch != ' ') {
        w = w + ch;
    } else {
        if(w.length() > lw.length()) {
            lw = w;
        }
        w = "";
    }
}

System.out.println("Longest Word: \"" + lw + "\", length: "+ lw.length());

【问题讨论】:

  • 你显示的代码不可能返回你显示的输出。
  • 我忘了添加,用户输入他们选择的任何短语
  • 尽管如此,您显示的代码无法生成“最短单词:”,长度:0”作为输出
  • 首先,将lw.length() 存储在一个变量中,而不是总是计算它。然后你有一张支票w.length() &gt; lwLength。如果你把它弄错了,这是一个很好的第一步——但为了让它发挥作用,最长的单词需要以短的开头并随着你找到更好的候选者而变长,而最短的单词需要以 long 开头并且剪短。以lwLength = Integer.MAX_VALUE开头。
  • 我同意@Stultuske。 System.out.println("Longest Word: \"" + lw + "\", length: "+ lw.length());怎么会突然产生"Shortest Word: "", length: 0"的输出?

标签: java string loops if-statement


【解决方案1】:

你必须做的一件事就是改变

if(w.length() > lw.length())

if(w.length() < lw.length())

然而,这还不够,因为lw 被初始化为一个空的String,所以条件永远是falsew.length() 永远不会是

因此您还必须检查lw是否仍然为空:

if(w.length() < lw.length() || lw.isEmpty ()) {
    lw = w;
}

完整代码:

Scanner in = new Scanner(System.in);

System.out.println("Please enter a phrase: ");
String phrase = in.nextLine();

String w = "";
String lw = "";       
int l;
char ch;

phrase = phrase + " ";
l = phrase.length();
int i;
for (i=0; i < l; i++) {
    ch = phrase.charAt(i);
    if(ch != ' ') {
        w = w + ch;
    } else {
        if(w.length() < lw.length() || lw.isEmpty ()) {
            lw = w;
        }
        w = "";
    }
}

System.out.println("Shortest Word: \"" + lw + "\", length: "+ lw.length());

【讨论】:

  • 这太棒了,我真的很感激这个提示.. 此外,如果两个或多个单词的长度相同,我如何让后一个(最后一个)最短的单词打印而不是第一个
  • @gingerhaus38 您可以通过将&lt; 更改为&lt;= 来做到这一点
  • 知道了,我之前犯了一个错误,现在由于某种原因,代码仍然产生“”作为最短字符,尽管我特意改变了这个应该如何
  • @gingerhaus38 我尝试了我发布的代码,它工作正常。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多