填充输入后打印int数组内容仅显示0

时间:2017-08-28 13:29:40

标签: java arrays

首先,我向数组输入值,并正确存储值。

稍后,当我在第二个循环上打印数组的值时,它会显示所有值的零。我不知道为什么?

Animals

这是输出:

   import java.util.*;

    class SumOfInt{
    public static void main(String args[]){ 
    int n=1,i=0,sum=0,k;
    Scanner sc=new Scanner(System.in);      

    for(i=0,n=1;i<n;i++,n++){
        int numarr[]=new int[n];
        System.out.println("Enter a number: ");
        numarr[i]=sc.nextInt();
        System.out.println("numarr["+i+"]: " +numarr[i]);               
            if(numarr[i]==(-999)){                  
                for(k=0;k<n-1;k++){
                    System.out.println("numarr["+k+"]: " +numarr[k]);  \\it shows zero even after i gave it a value above
                    sum=sum+numarr[k];
                }                   
                System.out.println(sum);
                break;
            }
    }       
  } 
}

1 个答案:

答案 0 :(得分:4)

下面:

for(i=0,n=1;i<n;i++,n++){
    int numarr[]=new int[n];

每次重新进入该循环时,都会创建一个完全数组!

相反,你应该选择这样的东西:

  • 询问用户他想输入多少个号码(比如 n
  • 使用 n 插槽
  • 创建适当大小的数组
  • 迭代那些 n 个插槽并询问用户输入
  • 存储输入,计算总和
  • 打印总和并且可能再次迭代数组以打印数字

如果你拥有来支持可变数量的条目 - 创建一个前面有1000个空插槽的数组。 一旦

除此之外:分开关注点。将第二个循环放入第一个循环是没有意义的。相反:让一个循环收集输入;和输出的第二个 disjunct 循环。你的解决方案要比它应该的复杂得多。

当OP要求真正增长数组时,解决方案看起来有点不同:

  • 从一个初始数组开始,可能大小为10
  • 每当用户添加新号码时:检查阵列中是否还有空闲插槽。如果不是:a)创建一个新的更大的数组b)将所有条目复制到新数组中c)继续使用新数组