I'm a novice with Java. I took a class in C, so I'm trying to get myself out of that mode of thinking. The program I'm writing has a section in which the user enters an integer, n, and then n number of words afterwards. This section then searches through those words and finds the shortest one, then returns it to the user. For instance, an input might be:
INPUT: 4 JAVA PROGRAMMING IS FUN
OUTPUT: IS
The code I have currently seems to return the wrong word. In this instance, it returns "PROGRAMMING", when it should return "IS". I thought maybe you all could point me in the right direction.
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);
To give you an idea of what I was trying to do, I was attempting to enter the words into a string, "sentence," then break that string up into individual words in an array, "words[]," then run a for loop to compare the strings to each other by comparing the lengths to the entries in the array. Thank you for your assistance!
Here's a version that makes use of Java 8's Stream API:
You can also sort more complex objects by any of their attribute: If you have a couple of
Person
s and you wanted to sort them by theirlastName
, shortest first, the code becomes:You're almost there, but your comparison to detect the shortest word is reversed. It should be:
That is, if your current word's length is less than the length of your previous shortest word, overwrite it.
Also, instead of starting with an empty
String
, start with the first word, i.e.,words[0]
. Otherwise, the empty string will always be shorter than any string in your array:Your if statement is wrong. This should work.
Java 8 has made it simpler. Convert your
String
array to a list and usesorted()
to compare and sort your list in ascending order. Finally, usefindFirst()
to get the first value of your list (which is shortest after sorting).have a look,