我需要一个java程序来查找句子中第二个最长的单词(不使用数组)。
请帮帮我。
这是我到目前为止的代码:
import java.io.*;
class Second_longest_Trial
{
public static void main(String args[])throws IOException {
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
System.out.println("Enter the sentence");
String s=in.readLine();
s=s.trim()+" ";
String longest=s.substring(0,s.indexOf(' '));
String sec=longest;
int l=s.length();
String temp=" ",str=" ";
for(int i=s.indexOf(' ')+1;i<l;i++){
char ch=s.charAt(i);
if(ch!=' ')
temp=temp+ch;
else{
if(temp.length()>longest.length()){
sec=longest;
longest=temp;
}
else if(temp.length()>sec.length()){
sec=temp;
}
temp=" ";
}
}
System.out.println("Longest word is "+longest);
System.out.println("Second Longest word is "+sec);
}
}
当我提供输入时 -
Sayan回家了。
此输出 -
最长的词是Sayan 第二长词是Sayan
我应该得到如下输出 -
最长的词是Sayan 第二个最长的词是
答案 0 :(得分:1)
删除您longest
和sec
的初始设置。按以下方式创建它们并temp
:
String longest="";
String sec="";
String temp="";
for(int i = 0; i < l; i++) {
...
为什么要将longest
和sec
都设置为第一个单词 - 如果第一个单词在句子中最长,会发生什么?
然后你的代码产生输出:
最长的词是Sayan
第二个最长的词是家。
这比你现在的更正确,但仍然不是你所期望的......因为句子末尾有.
你需要照顾 - 可能会检查{ {1}}稍微复杂一点,并检查ch!=' '
。我留下让你弄清楚如何正确地做到这一点。
答案 1 :(得分:0)
这种情况正在发生,因为您已将最长的元素初始化为第一个单词,而sec也将其初始化为最长的元素( Sayan 本身)。现在最长=“Sayan”和sec =“Sayan”,你进入阵列,但你从未发现任何大于最长或秒的单词。
答案 2 :(得分:-1)
这是找到第二个最长单词的基本代码:
class Second
{
public static void main(String str)//str has the required sentence
{
String m="",q="";
int lar=0;
str=str+" ";
for(int i=1;i<=2;i++)
{
for(int k=0;k<str.length();k++)
{
char ch=str.charAt(k);
if(ch!=' ')
m=m+ch;
else
{
if(m.length()>lar)
{
q=m;
lar=q.length();
}
m="";
}
}
if(i==1)
{
System.out.println("The longest word is: "+q);
str=str.replace(q," ");
lar=0;
}
}
System.out.println("The second longest word is: "+q);
}
}