2013-09-17 3 views
0

Я хочу, чтобы этот код генерировал случайное число от одного до пяти, а затем, используя это число, выбрал символ из моего 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; 
} 

} 
+1

Вы не можете использовать методы экземпляра/экземпляра внутри статического контекста. –

ответ

0

main статический метод и от него можно либо вызывать статические методы, или вы должны создать экземпляр класса и вызывать методы экземпляра этого. Также в вашем случае list является переменной экземпляра и, следовательно, к нему нельзя получить доступ со статических методов.

Я считаю, что лучший вариант для вас, чтобы сделать что-то вроде:

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

Также, пожалуйста, используйте имена капитала для классов.

1

Ваш основной метод - статический, что означает, что он может быть вызван без создания объекта. Основные методы всегда должны быть статичными, потому что при запуске программы у вас пока нет объекта.

Что касается статических методов, вы можете получить доступ только к другим статическим членам, если вы не создадите объект, с которым работаете.

У вас есть два возможных решения:

делают другие члены статичны, которые я бы не рекомендовал, как вы уже используете поле, или использовать объект:

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

public `static` void addSymbols(){ 

Метод main находится в статическом контексте, поэтому все остальные методы должны быть также вызваны.

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
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 для моей машины, чтобы понять.

+0

+1 для добавления символов! – A4L

1

Как и каждый предложенный, избегайте статического метода и создайте объект, затем вызовите свои методы.

И не забудьте добавить символы в ArrayList, вы можете сделать это в конструкторе или в главном методе после создания объекта и перед вызовом 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(); 
} 

Также по convention Classnames следует начинать с буквы будильника.

Смежные вопросы