我正在尝试创建一个Java程序,它可以在1-20之间生成n个随机值,并将它们放在一个数组中。到目前为止,我的计划是:
public class bias{
public static void main(String[] as){
for (int n = 10; 0 < n; n--){
int[] values;
values = new int[n];
int b = (int)(Math.random()*20) + 1;
values[n--] = b;
}
System.out.println(values.length);
}
}
但是我在编译时遇到错误:
C:\javas>javac bias.java
bias.java:9 error: cannot find symbol
System.out.printLn<values.length>;
symbol: variable values
location: class bias
1 error
我似乎无法理解和调试,我的问题是什么?
答案 0 :(得分:3)
int[] values;
应该在for循环之外。
如下所示
int[] values = new int[10];
for (int n = 10; 0 < n; n--){
int b = (int)(Math.random()*20) + 1;
values[n] =b;
}
从for循环中删除int[] values; values = new int[n];
。它将为每次迭代创建新数组。
答案 1 :(得分:2)
您在for
循环内声明了您的值对象,因此它只在其中可用。
将它移到循环之外。
我建议您查看变量范围:http://www.java-made-easy.com/variable-scope.html
我认为你想要的是:
int[] values = new int[10];
for (int n = 10; 0 < n; n--){
values[n] = (int)(Math.random()*20) + 1;
}
System.out.println(values.length);
答案 2 :(得分:1)
当您尝试打印其长度时,values
数组只是超出范围。其范围仅限于for
代码块。
答案 3 :(得分:0)
在循环外声明变量
因为你已经在循环中声明了变量int[] values;
所以这个变量在循环中有范围,并且在循环外部不可见,所以在外面声明它,这样它的范围就变成了完整的程序。
答案 4 :(得分:0)
这是您需要做的解决方案,从控制台读取数字n 创建一个这个大小的数组,然后继续添加数字。 然后你可以遍历数组以获得所有值。
public class bias{
public static void main(String[] as){
DataInputStream dis=new DataInputStream (System.in);
System.out.println ("Enter number n: ");
String s1=dis.readLine ();
int num = int n1=Integer.parseInt (s1);
int[] values = new int[num];
for (int n = 0; n < num; n++){
int b = (int)(Math.random()*20) + 1;
values[n] = b;
}
System.out.println(values.length);
for (int n = 0; n < num; n++){
System.out.println(values[n]);
}
}
}