在java中解析字符串数组 sNums=scanString.nextLine(); 字符串[]num=sNums.split(“”); 对于(int i=0;i
我试图将我拥有的字符串(在本例中为“num”)更改为一个double数组。我很确定这应该是可行的,但出于某种原因,它将“0.0”存储到输入的每个元素中,最后一个除外。例如,如果我输入“1 5 7 90 52[enter]”,输出应该是“1.0 5.0 7.0…等”,但我得到的是“0.0 0 0.0 0 0.0 52.0”您只需在每次迭代中创建一个新数组,循环中的大小将不断增加。您只需要创建一个新数组,并在循环中填充其中的值在java中解析字符串数组 sNums=scanString.nextLine(); 字符串[]num=sNums.split(“”); 对于(int i=0;i,java,arrays,string,parsing,double,Java,Arrays,String,Parsing,Double,我试图将我拥有的字符串(在本例中为“num”)更改为一个double数组。我很确定这应该是可行的,但出于某种原因,它将“0.0”存储到输入的每个元素中,最后一个除外。例如,如果我输入“1 5 7 90 52[enter]”,输出应该是“1.0 5.0 7.0…等”,但我得到的是“0.0 0 0.0 0 0.0 52.0”您只需在每次迭代中创建一个新数组,循环中的大小将不断增加。您只需要创建一个新数组,并在循环中填充其中的值 sNums = scanString.nextLine(); S
sNums = scanString.nextLine();
String[] num = sNums.split(" ");
for (int i = 0; i < num.length; ++i)
{
numbers = new double[i+1];
numbers[i] = Double.valueOf(num[i]);
}
for(double item: numbers)
out.print(item + " ");
numbers=新的双精度[num.length];
对于(int i=0;i
您遇到的问题是在循环中创建一个新数组。你应该把它拿出来初始化
numbers = new double[num.length];
for (int i = 0; i < num.length; ++i) {
// numbers = new double[i+1]; // Not needed
numbers[i] = Double.valueOf(num[i]);
}
String[]num=sNums.split(“”);
double[]number=新的double[num.length];//循环的有效位置
对于(int i=0;i
num
和number
之间命名错误时,都会创建一个新数组。而是将其从循环体中移除,并将其放置在loop
语句之前
String[] num = sNums.split(" ");
double[] numbers = new double[num.length]; // The valid place for loop
for (int i = 0; i < num.length; ++i)
{
numbers[i] = Double.valueOf(num[i]);
}
for(double item: numbers) {
out.print(item + " ");
}
而是直接用项打印
:
for(double item: numbers)
out.print(numbers[i] + " ");
// <-- i may already have the value of number.length
您每次都在for循环中重新创建数组。另外,您在第二次使用
表示每个
,而不是使用它,而是使用i
。这不会编译,因为i
从未在该范围内声明过。。无论如何,我建议您忘记Java中的数组,使用列表,它们更方便
for(double item: numbers)
out.print(item + " ");
sNums=scanString.nextLine();
最终字符串[]num=sNums.split(“”);
最终列表编号=新的ArrayList();
对于(最终字符串cur:num){
数字。添加(Double.valueOf(cur));
}
对于(最后一个双项目:数字){
打印(项目+“”);
}
使用命令行参数中的“args”,您可以使用:
sNums = scanString.nextLine();
final String[] num = sNums.split(" ");
final List<Double> numbers = new ArrayList<Double>();
for (final String cur: num) {
numbers.add(Double.valueOf(cur));
}
for(final Double item: numbers) {
out.print(item + " ");
}
List number=new ArrayList();
for(字符串a:args){
加上(a)的双倍数值;
}
系统输出打印项次(数字);
每次在side for循环中都要创建一个新数组。这太尴尬了。不过,谢谢你,我一直在考虑这个问题太久了,这是行不通的。out.print处的ArrrayIndexOutOfBoundsException(数字[i]+”)代码>@sᴜʀᴇsʜᴀᴛᴛᴀ, 它肯定不是完美的。如果使用数组列表,可以用foreach替换第一个循环。并且不需要引入列表和对象类型。在我看来,这是过度设计的。该代码不会抛出ArrayIndexOutOfBoundsException
它不会编译,因为没有定义i。OP更改了问题,因此您的答案对该问题无效。@Vash您是正确的,它将无法编译。关于问题被改变的事,对不起,我没有时间跟踪。这是OP问题。@Vash使用列表时,不需要显式分配数组大小。我没有在任何地方引入对象,OP已经在使用Double.valueOf()
。Double.valueOf()是类中的一个静态方法,返回原语Double,那里没有对象。我想说的是,因为您不分配数组。对于索引i
,您不需要这样做<代码>对于(字符串num:sNUms.split(“”){numbers.add(Double.valueOf(num));}
就足够了。
sNums = scanString.nextLine();
final String[] num = sNums.split(" ");
final List<Double> numbers = new ArrayList<Double>();
for (final String cur: num) {
numbers.add(Double.valueOf(cur));
}
for(final Double item: numbers) {
out.print(item + " ");
}
List<Double> numbers = new ArrayList<Double>();
for(String a:args){
numbers.add(Double.valueOf(a));
}
System.out.println(numbers);