我读了一个带有数字列表的字符串。然后,我创建了一个长度为3的数组。我的问题是,如何将字符串中的数字放入数组中(如果多于或少于3个数字> 11没关系)。
我尝试按顺序遍历字符串并将值放入输出数组,但这没有用。我也曾尝试将输出数组设置为String数组,但这也被证明是不正确的。
public int[] findNums(String line)
{
int[] array = new int[3];
list = line;
String[] parts = array.split(" ");
int index = 0;
for(int spot=0; spot<parts.length();spot++)
{
if(parts[spot] > 11)
{
array[index] = spot;
index++;
}
}
return array;
}
据我所知,这是我所拥有的方法,我有一个遍历字符串和if语句的循环,以检查数字的值。 可能有一些语法错误(对不起,请提前对不起)我是Java数组的新手。 这是我要导入的DAT文件的示例。
-99 1 2 3 4 5 6 7 8 9 10 12345
10 9 8 7 6 5 4 3 2 1 -99
10 20 30 40 50 -11818 40 30 21 10
32767
250 19 17 15 13 11 10 9 6 3 2 1 -455
255 255
新数组的输出应为
[12345,0,0]
因为只有一个数字大于11。
这是第一行的输出,但是DAT文件中所有行的格式都相同。
有人可以告诉我如何解决我的方法吗?
答案 0 :(得分:2)
这是一个不错的解决方案:
public int[] getNumsFromString (String text) {
String[] individNums = text.split(" ");
int[] nums = new int[3];
int counter = 0;
for (int i = 0; i < individNums.length; i++) {
int currentValue = Integer.parseInt(individNums[i]);
if (currentValue > 11 && counter < 3) {
nums[counter++] = currentValue;
}
}
return nums;
}
希望有帮助!
答案 1 :(得分:0)
我需要确认您的目标是否是从传入的列表中提取所有值大于11的数字?您似乎在混淆索引的值。如果您真正想要的是所有条目11个或更多,请尝试此操作。您没有正确实例化list变量,如果它是一个逗号分隔的列表,则需要使用上面评论者提到的split函数。
public ArrayList<Integer> findNums(String line)
{
ArrayList<Integer> twelvePlus = new ArrayList<Integer>();
String[] numbers = line.split(" ");
for(int index=0; index<numbers.length;index++)
{
if(Integer.valueOf(numbers[index]) > 11)
{
twelvePlus.add(new Integer(Integer.valueOf(numbers[index])));
index++;
}
}
return twelvePlus;
}
...它返回可变数量的数字,表示传入的列表中所有大于11的数字。如果要强制执行上限,则可以根据条件的大小在条件内添加break语句数组列表。你真的想要零吗?它必须是整数数组的返回值吗?我的示例说明了泛型的使用。另外,猜测您从未遇到过这种情况,因为您遇到类型不匹配错误...