-1

我试图开发一个程序,其中随机数生成器将生成一个数字,然后根据选择的数字,将打印预定义数组的成员之一。(我希望在数组内部调用该方法索引号)

import java.util.Random;
import java.util.Scanner;


public class Testing{
public static void main(String args[]){
public static int calculatew () {
    Random generator = new Random();  
    int number1 = generator.nextInt(3);
}
String array1 [] = new String[4];
array1[1]="Tom";
array1[2]="Jerry";
array1[3]="Mike";
array1[0]="Dustin";
System.out.println("the very first name is "+array1[calculatew]+" The second name is "+array1[calculatew]+" the third accodental name is "+array1[calculatew]+" and the final random name is "+array1[calculatew]+".");

}
}

编译程序时,它会返回以下错误:

Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
Syntax error on token(s), misplaced construct(s)
Syntax error on token "int", @ expected
calculatew cannot be resolved to a variable
calculatew cannot be resolved to a variable
calculatew cannot be resolved to a variable
calculatew cannot be resolved to a variable

at Testing.main(Testing.java:7)

有人可以告诉我这个程序的主要问题是什么。

非常感谢您提前回答

4

6 回答 6

2

一个问题是:

public static void main(String args[]){
public static int calculatew () {
    Random generator = new Random();  
    int number1 = generator.nextInt(3);
}

将方法移到 main 之外

public static void main(String args[]){
 int calcResults = calculatew ();
....
}
public static int calculatew () {
    Random generator = new Random();  
    int number1 = generator.nextInt(3);
    return number1;
}
于 2012-12-09T18:01:45.937 回答
1

除了已经发布的关于如何调用方法的答案之外,calculatew 每次调用时都会创建一个新的 Random 实例。Random 在一天中的某个时间进行初始化,因此您可能会得到几个相同的结果。

最好将生成器设为类中的静态字段,在加载类时初始化一次。那么这一系列的 nextInt 调用实际上会得到一系列由其算法生成的数字。

于 2012-12-09T18:32:54.123 回答
0

编译器只是告诉您 calculatew 不是变量。如果您希望将其用作方法(就像您一样),您必须键入 calcualatew()。括号告诉编译器,输入的内容是必须调用的方法。如果删除括号,编译器会将其视为变量,并且无法在变量堆栈中找到它,也无法将其视为对象句柄,因此它会告诉您无法找到它

- 编辑

尝试使用像Eclipse这样的 IDE,它会在您请求编译之前告诉您语法上是否有问题,并直接指向该行并提供有关如何解决问题的建议如果您需要有关使用 Eclipse 的帮助,请在评论中告诉我

于 2012-12-09T18:22:36.103 回答
0

您不能在方法中定义方法。您应该在 main() 方法之外定义 calculatew() 方法。您的代码必须是:

import java.util.Random;
import java.util.Scanner;


public class Testing {
  public static void main(String args[]){
    String array1 [] = new String[4];
    array1[1]="Tom";
    array1[2]="Jerry";
    array1[3]="Mike";
    array1[0]="Dustin";
    System.out.println("the very first name is "+array1[calculatew()]+" The second name is "+array1[calculatew()]+" the third accodental name is "+array1[calculatew()]+" and the final random name is "+array1[calculatew()]+".");
  }

  public static int calculatew () {
    Random generator = new Random();  
    int number1 = generator.nextInt(3);
  }
}
于 2012-12-09T18:02:52.300 回答
0

您将计算方法定义放在主方法定义中,您不能在 java 中执行此操作。把它们并排放置,你应该没问题。

于 2012-12-09T18:02:53.037 回答
0

旅游问题正是编译器告诉你的。在括号内更改为“calculatew()”,并将方法定义移到主方法之外。

于 2012-12-09T18:05:07.430 回答