刷新我的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]
我在做什么错..
答案 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;
}