не на статический метод нельзя сослаться от статического контекста [дубликат]

17
задан Mark Elliot 22 April 2010 в 21:27
поделиться

4 ответа

Вы вызываете nextInt статически, используя Random.nextInt .

Вместо этого создайте переменную Random r = new Random (); , а затем вызовите r.nextInt (10) .

Определенно стоит проверить:

Обновление:

Вы действительно должны заменить эту строку,

Random Random = new Random(); 

примерно так:

Random r = new Random();

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

27
ответ дан 30 November 2019 в 12:36
поделиться

Вы пытаетесь вызвать метод экземпляра для самого класса.

Вам следует сделать:

    Random rand = new Random();
    int a = 0 ; 
    while (!done) { 
        int a = rand.nextInt(10) ; 
    ....

Вместо

Как я уже говорил здесь stackoverflow.com/questions/2694470/whats-wrong ...

2
ответ дан 30 November 2019 в 12:36
поделиться

В В Java статические методы принадлежат классу, а не экземпляру. Это означает, что вы не можете вызывать другие методы экземпляра из статических методов, если они не вызываются в экземпляре, который вы инициализировали в этом методе.

Вот что вы, возможно, захотите сделать:

public class Foo
{
  public void fee()
  {
     //do stuff  
  }

  public static void main (String[]arg) 
  { 
     Foo foo = new Foo();
     foo.fee();
  } 
}

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

1
ответ дан 30 November 2019 в 12:36
поделиться

Нарушение соглашений об именах Java (имена переменных и имена методов начинаются с нижнего регистра, имена классов начинаются с верхнего регистра) вносит свой вклад в вашу путаницу.

Переменная Random находится только «в области действия» внутри метода main . Он недоступен для методов, вызываемых main . Когда вы возвращаетесь из main , переменная исчезает (это часть фрейма стека).

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

class MyObj {
  private final Random random = new Random();
  public void compTurn() {
    while (true) {
      int a = random.nextInt(10);
      if (possibles[a] == 1) 
        break;
    }
  }
}
0
ответ дан 30 November 2019 в 12:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: