在下面显示的代码中,我硬编码返回在for循环中找到的最高int值。
在for循环中,它返回来自"的每个字母数。 myName是popy"如
6
2
它应该打印出来" MyName"因为它在每个单词中具有最多的特征。我遇到的问题,我硬编码到maxNo == 6.我应该使用嵌套的forloop还是有一种简化的方法?
public static void main(String[] args) {
String[] name = "myName is popy".split(" ");
int maxNo = 0;
int storeLargestNo = 0;
String longestWord = "";
for(int i = 0; i < name.length; i++){
maxNo = name[i].length();
System.out.println("Number of each " + maxNo);
//-- **HardCoded** --
if(maxNo== 6){
longestWord = name[i];
}
}
System.out.println("longest Name found is " + longestWord);
}
----------------------的解决 ----------------- -----
我已经提出了一个解决方案,我使用ArrayList代替了Collections.max()。通过这样做,它更清洁。
public String longestWord() {
@SuppressWarnings("all")
Scanner scanner = new Scanner(System.in);
System.out.print("Write in a sentence : ");
String[] userInput = scanner.nextLine().split(" ");
ArrayList<String> wordsArr2 = new ArrayList<String>();
String longestWord = "";
for(int i = 0; i < userInput.length;i++){
wordsArr2.add(userInput[i]);
}
longestWord = Collections.max(wordsArr2);
return longestWord;
}
答案 0 :(得分:2)
更正后的代码:
public static void main(String[] args) {
String[] name = "myName is popy".split(" ");
int maxNo = 0;
int storeLargestNo = 0;
String longestWord = "";
for(int i = 0; i < name.length; i++){
int temp = name[i].length();
System.out.println("Number of each " + temp);
if(maxNo < temp){
maxNo = temp;
longestWord = name[i];
}
}
System.out.println("longest Name found is " + longestWord);
}
不要使用任何嵌套循环,如果要存储值并将其与单词的前一个长度进行比较,可以使用临时变量,如果它更大,则更改值maxNo
并更改longestWord
值。
答案 1 :(得分:1)
而不是跟踪最高单词的长度,为什么不保留最长的字符串呢?
public static void main(String[] args) {
String[] name = "myName is popy".split(" ");
String longestWord = "";
for(int i = 0; i < name.length; i++){
System.out.println("and its length is " + longestWord.length());
if(name[i].length() > longestWord.length()){
longestWord = name[i];
}
}
System.out.println("longest Name found is " + longestWord);
}
此处对if语句的更改可确保更新最长的单词,而不是跟踪实际长度,因为每个单词大小都是未知的。
唯一的问题是没有处理两个相等长度的单词。
答案 2 :(得分:0)
要获得没有硬编码的结果,您可以遵循以下算法:
maxNo = 0
和longestWord = ""
current
中的每个字符串name[]
,请执行以下操作
一个。 currentLength = current.length()
currentLength > maxNo
,请设置maxNo = currentLength
和longestWord = current
这样,您可以避免硬编码。
答案 3 :(得分:0)
你可以尝试类似的东西,
无需在变量中存储最长名称的长度,您可以直接将当前单词的长度与前一个单词进行比较。
public static void main(String[] args) {
String[] name = "myName is popy".split(" ");
String longestWord = "";
for(int i = 0; i < name.length; i++){
if(longestWord.length() < name[i].length()){
longestWord = name[i];
}
}
System.out.println("longest Name is :" + longestWord);
}
答案 4 :(得分:0)
<div id="app">
<table>
<tbody>
<tr v-for="cat in categories" @click="selectCat(cat)">
<td><input type="checkbox" :value="cat" v-model="selected" name="" id=""></td>
<td>{{ cat.code}}</td>
<td>{{ cat.name }}</td>
</tr>
</tbody>
</table>
<button @click="checkData()">Check</button>
</div>