我希望这段代码生成一个介于1和5之间的随机数,然后使用这个数字,从我的arraylist中选择一个符号并打印出来。每当我尝试调用printSymbol()方法时,它都会告诉我要将其和arraylist更改为static。当我这样做时,它会在我的main方法的方法调用行上给我两个错误,还有一行是String y = list.get(x);,我想知道怎么做,所以我可以调用这个方法,让它为我打印字符串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;
}
}发布于 2013-09-17 16:19:04
将静态和非静态上下文混合在一起会造成混乱。
printSymbol()方法是类study的一部分。(请改用Study,这是正确的约定。有关这些约定的更多信息,请查看here)。
main方法位于静态上下文中。这意味着您需要创建一个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中不是好做法。
发布于 2013-09-17 16:18:31
您的main方法是静态的,这意味着无需创建对象就可以调用它。Main方法必须始终是静态的,因为在程序启动时,您还没有对象。
关于静态方法的事情是,你只能从它访问其他静态成员,除非你创建一个你使用的对象。
您有两种可能的解决方案:
将其他成员设置为静态的,我不推荐这样做,因为您已经在使用一个字段,或者使用一个对象:
public static void main(String[] args) {
    study myObject = new study();
    study.printSymbol();
}发布于 2013-09-17 16:26:03
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码替换了你的符号,以便我的机器能理解。
https://stackoverflow.com/questions/18844613
复制相似问题