我一直在编写一个基本方法来获取字符串数组,找到最大长度并返回一个字符串数组,其中包含的值等于数组的最大长度。我一直得到一个空指针异常,我不知道为什么。代码是:
String[] allLongestStrings(String[] inputArray) {
int compare = 0;
int k = 0;
String[] use = new String[20];
for (int i = 0; i < inputArray.length; i++) {
if (inputArray[i].length() > compare)
compare = inputArray[i].length();
}
for (int j = 0; j < 20; j++) {
if (inputArray[j].length() - compare == 0) {
use[k] = inputArray[j];
k++;
}
}
return use;
}
答案 0 :(得分:1)
from django.contrib.auth.models import User
仅当for (int j = 0; j < 20; j++) {
if (inputArray[j].length() - compare == 0) {
use[k] = inputArray[j];
k++;
}
}
至少有20个元素时才会有效。在上面的代码中,您正在做正确的事情:inputArray
。我认为你只需要将第二个语句更改为20的较小者或inputArray的长度。
答案 1 :(得分:0)
inputArray 不包含20个元素。不要只是抛出并硬编码你要返回的数组的长度值。实际上确定真正的长度将是什么,因为你可能在这个值上太低,如果不是那么你可能最终得到一堆空元素。
如果允许,请使用 ArrayList 或字符串 List 对象,该对象不需要预设长度(大小)而不是1D字符串需要长度初始化的数组:List<String> list = new ArrayList<>();
。您只需使用 List.add() 方法添加即可。
如果必须使用单维数组,则使用另一个 for 循环来确定实际长度与 compare 整数变量中保持的长度相同的字符串元素数量。始终遍历原始数组( inputArray )。这个 for 循环非常类似于你的第二个 for 循环,除非你在所有元素长度等于时增加一个整数计数器变量在比较变量中。
删除第二个 for 循环中包含的 if 语句条件中的公式。我认为(恕我直言):if (inputArray[i].length() == compare) {...}
应该足够了,它在眼睛上更容易。 ;)
只是想一想pizazz ....也许将实际的Array索引添加到添加到名为 used 的1D String数组的字符串中。使用某种分隔符将两者分开。