Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中解析字符串数组 sNums=scanString.nextLine(); 字符串[]num=sNums.split(“”); 对于(int i=0;i_Java_Arrays_String_Parsing_Double - Fatal编程技术网

在java中解析字符串数组 sNums=scanString.nextLine(); 字符串[]num=sNums.split(“”); 对于(int i=0;i

在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

我试图将我拥有的字符串(在本例中为“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();    
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);