主方法中的调用方法

时间:2013-09-17 08:12:52

标签: java

我希望此代码生成1到5之间的随机数,然后使用该数字从我的arraylist中选择一个符号并打印出来。每当我尝试调用printSymbol()方法时,它会告诉我将其更改为arraylist为静态。当我这样做时,在我的main方法中的方法调用行上给出了两个错误,并且它说明String y = list.get(x);我希望知道如何创建它的行所以我可以调用此方法并让它打印String y对我来说。

import java.util.*;
import java.lang.Math;
public class study {
public static void main(String[] args) {
    printSymbol();
}
ArrayList<String> list = new ArrayList<String>();
public void addSymbols(){
    list.add("あ");
    list.add("い");
    list.add("う");
    list.add("え");
    list.add("お");
}
public String printSymbol(){
    int x=(int) Math.floor(Math.random()*5)+1;
    String y = list.get(x);
    return y;
}

}

6 个答案:

答案 0 :(得分:3)

混淆静态和非静态上下文让你搞砸了。

printSymbol()方法是类study的一部分。 (使用Study代替,这是正确的约定。有关这些约定的更多信息,请查看here)。

主要方法是在静态上下文中。这意味着您需要创建类Study的对象,然后在该对象上调用printSymbol方法。

public static void main(String[] args)
{
    Study study = new Study(); // create a new object of the class Study
    study.printSymbol();       // call the printSymbol method on this object
}

你也可以使printSymbol()方法和ArrayList静态,但这是一种面向对象语言的Java不好的做法。

答案 1 :(得分:1)

您的main方法是静态的,这意味着可以在不创建对象的情况下调用它。主要方法必须是静态的,因为在程序启动时你还没有对象。

关于静态方法的问题是,除非你创建一个你使用的对象,否则你只能从中访问其他静态成员。

您有两种可能的解决方案:

让其他成员保持静态,我不建议您使用字段,或使用对象:

public static void main(String[] args) {
    study myObject = new study();
    study.printSymbol();
}

答案 2 :(得分:1)

import java.util.*;
import java.lang.Math;
public class study {
public static void main(String[] args) {
   study newStudy = new study();
   newStudy.addSymbols();
   newStudy.printSymbol();
}
ArrayList<String> list = new ArrayList<String>();
public void addSymbols(){
   list.add("a");
   list.add("b");
   list.add("c");
   list.add("d");
   list.add("e");
}

public String printSymbol(){
    int x=(int) Math.floor(Math.random()*4)+1;
    String y = list.get(x);
    return y;
}
}

你的随机也是错的,它需要是Math.random()* 4。 我只是用ASCII替换你的符号,让我的机器理解。

答案 3 :(得分:1)

与每个建议的一样,避免静态方法并创建一个对象然后调用您的方法。

并且不要忘记将符号添加到arraylist中,您可以在创建对象之后和调用printSymbol()之前在构造函数或main方法中执行此操作

public static void main(String[] args) {
    new study().printSymbol();
}
public study() {
    // add symbols to the array list
    addSymbols();
}

或者

public static void main(String[] args) {
    study s = new study();
    // add symbols to the array list
    s.addSymbols();
    s.printSymbol();
}

同样由convention Classnames应该以更大的案例开头。

答案 4 :(得分:0)

main是一个静态方法,你可以从中调用静态方法,或者你必须创建一个类的实例并调用它的实例方法。同样在你的情况下list是一个实例变量,因此无法从静态方法访问它。

我认为最好的选择是做一些事情:

public static void main(String[] args) {
    study s = new study();
    s.printSymbol();
}

另请使用资本名称。

答案 5 :(得分:0)

 public `static` String printSymbol(){

 public `static` void addSymbols(){

main方法在静态上下文中,因此其调用所需的所有其他方法也必须如此。