给定2个数字,构建一个包含所有数字的数组

时间:2019-01-08 04:08:29

标签: java

刷新我的Java,以2个数字作为用户输入,我试图显示其间的所有数字。我的代码使用不同的类型,类似的字符串,String builder和Java8来工作。但是不知何故,“数组”部分无法正常工作。

这是我的代码。

System.out.println("Enter the first number :");
            Scanner key = new Scanner(System.in);

            int num1 = key.nextInt();
            int num2 =0;
            System.out.println("Enter the Second number :");
            try{
                  num2 = key.nextInt();
                do {
                    if (num2 < num1) {
                        System.out.println("Second number " + num2 + " is  less than " + num1);
                        System.out.println("Enter the Second number :");
                        num2 = key.nextInt();
                    }

                  } while(num2 <num1);
                }

            catch (ArithmeticException e) {

                if (num2 <num1)
                {
                    System.out.println("Second number " +num2 + "cannot be less than " + num1);

                }
            }

int length = (num2 - num1) +1;
            int [] numOfIntegers = new int [length];

            System.out.println("Now the length of numOfInteger is : " + numOfIntegers.length);

           // TimeUnit.SECONDS.sleep(2);
            //int counter = num1;

            for(int i=num1;i<length; i++)
            {

                 numOfIntegers[i] = i ;
            }

结果是这样的: 使用数组在2和8范围内的数字是[0,0,2,3,4,5,6]

我在做什么错..

5 个答案:

答案 0 :(得分:3)

Java 8 允许使用IntStream一行完成该操作 DOCUMENTATION

public static void main(String[] args) {
        int[] a = IntStream.range(num1, num2+1).toArray();

        for(int aa:a)
        {
            System.out.println(aa);
        }
    }
  

示例::如果您用Num1 = 2和Num2 = 8代替,输出将为2 3 4 5 6 7 8

答案 1 :(得分:2)

填充数组时,将从索引num1开始。您应该从索引0开始。那是

for(int i=num1;i<length; i++)
{
     numOfIntegers[i] = i ;
}

应该是

for(int i=0; i < length; i++)
{
     numOfIntegers[i] = num1 + i;
}

答案 2 :(得分:2)

您需要添加一个变量以使数组索引从第0个位置循环到数组长度。由于您的for循环首先指向中间的索引。即在这里它是2并且它向前扩展到数组长度。您可以如下进行更改。

for ( int i = num1, k = 0; k < length; i++ )
{
    numOfInteger[k++] = i;
}

答案 3 :(得分:1)

在此循环中:

for(int i=num1;i<length; i++)
{
      numOfIntegers[i] = i ;
}

您从索引num1开始添加,这就是Array中前几个插槽仍为默认值的原因。您想从零开始索引:

for(int i = num1, j = 0; j < length; i++) {
     numOfInteger[j++] = i;
}

哪个会产生:

[2, 3, 4, 5, 6, 7, 8]

答案 4 :(得分:0)

在最后一个循环中:

for(int i = num1 ; i < length; i++)
{
numOfIntegers[i] = i ;
}

您基本上是从num1到长度进行计数,即正在为循环计数器分配值(2,3,4,5,6),并且将数组的0,1位置保留为0作为默认值。

调整循环以从0到长度进行迭代,如下所示:

for(int i = 0 ;  i < length ; i++)
{
numOfIntegers[i] = num1 + i;
}