0

我希望这段代码生成一个介于 1 到 5 之间的随机数,然后使用该数字从我的代码中选择一个符号arraylist并打印它。每当我尝试调用该printSymbol()方法时,它都会告诉我将其更改arraylist为静态。当我这样做时,它在我的主要方法中的方法调用行和它说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;
}

}
4

6 回答 6

3

通过混合静态和非静态上下文,您搞砸了。

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

主要方法是在静态上下文中。这意味着您需要创建该类的一个对象,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 中是不好的做法,Java 是一种面向对象的语言。

于 2013-09-17T08:19:04.497 回答
1

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

并且不要忘记将符号添加到数组列表中,您可以在创建对象之后和调用之前在构造函数或主方法中进行printSymbol()

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();
}

同样按照惯例,类名应该以大写字母开头。

于 2013-09-17T08:30:38.323 回答
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 替换了你的符号,以便我的机器理解。

于 2013-09-17T08:26:02.680 回答
1

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

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

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

将其他成员设为静态,我不建议您这样做,因为您已经在使用字段或使用对象:

public static void main(String[] args) {
    study myObject = new study();
    study.printSymbol();
}
于 2013-09-17T08:18:31.480 回答
0

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

我相信对您来说最好的选择是执行以下操作:

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

也请使用大写的类名。

于 2013-09-17T08:18:10.960 回答
0
 public `static` String printSymbol(){

 public `static` void addSymbols(){

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

于 2013-09-17T08:18:35.313 回答