您好我有这段代码来获取字符串中最短的单词: -
import java.util.Arrays;
public class Kata {
public static int findShort(String s) {
int shortestLocation = null;
String[] words = s.split("");
int shortestLength=(words[0]).length();
for(int i=1;i<words.length;i++){
if ((words[i]).length() < shortestLength) {
shortestLength=(words[i]).length();
shortestLocation=shortestLength;
}
}
int p = shortestLocation;
return p;
}
}
它返回错误,即变量shortestLocation无法转换为int: -
java:6: error: incompatible types: <null> cannot be converted to int
int shortestLocation = null;
我的问题是你如何访问变量的范围,就像在这种情况下我知道什么是错的。变量最短位置是在if语句的范围之外定义的,因此它只考虑初始化它的值。
如何创建它以便将初始值更改为if-statement值。这是一个范围问题,请帮助我初学者。
答案 0 :(得分:0)
import java.util.Arrays;
public class Kata {
public static int findShort(String s) {
int shortestLocation = null;
这个^^行需要初始化为一个整数...不是&#39; null&#39; 0很好
String[] words = s.split("");
int shortestLength=(words[0]).length();
for(int i=1;i<words.length;i++){
你的问题从这里开始^^你永远不会遍历所有单词,因为你停在i<words.length
问题是你从i = 1开始。 for循环就像这样工作(从这里开始; 直到不满足;每次都这样做)i=words.length
条件不再满足。
if ((words[i]).length() < shortestLength) {
shortestLength=(words[i]).length();
shortestLocation=shortestLength;
}
}
int p= shortestLocation;
无需在此初始化p ...只返回最短的位置。
return p;
}
}
这样留下最终的代码
import java.util.Arrays;
public class Kata {
public static int findShort(String s) {
int shortestLocation = 0;
String[] words = s.split("");
int shortestLength=(words[0]).length();
for(int i=0;i<words.length;i++){
if ((words[i]).length() < shortestLength) {
shortestLength=(words[i]).length();
shortestLocation=shortestLength;
}
}
return shortestLocation;
}
}
请记住,要获得一个好的&#39;结果它重点单词列表
正如评论中所指出的,初始化你原来的&#39; int p&#39;可以帮助调试。