我希望此代码生成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;
}
}
答案 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
方法在静态上下文中,因此其调用所需的所有其他方法也必须如此。