-2

是什么导致方法变为“非静态”?

我一直在努力让这个抛硬币工作。可悲的是,几十年(至少感觉是这样)过去了,我发现的是,如果(请随时纠正我)if 语句/开关在方法内部,它会使方法成为非静态的。那么如何解决这个错误。重要的事情要知道:p1Choose开始是真的。如果该人赢得掷硬币,我希望此方法返回 true(如果p1Choose为 true,则为玩家 1,如果为 false,则为玩家 2)。

public boolean cointoss() { 
  int toss = Random.nextInt(1); // Or is this random causeing it????
  String HorT;
  String callHorT;
  boolean returnMe = true;
  if ( toss == 0) {
    HorT = "Heads";
  } else {
    HorT = "Tails";
  }
  if ( p1Choose == true ) {
    System.out.println( p1Name + " choose Heads or Tails!");
    callHorT = scan.next();
    if( HorT != callHorT) {
      System.out.println("You lose!");
      returnMe = false;
    }
    if( HorT == callHorT) {
      System.out.println("You lose!");
      returnMe = true;
    }
  } else if ( p1Choose ==false ) {
    System.out.println( p2Name + " choose Heads or Tails!");
    callHorT = scan.next();
    if( HorT != callHorT) {
      System.out.println("You lose!");
      returnMe = false;
    }
    if( HorT == callHorT) {
      System.out.println("You lose!");
      returnMe = true;
    }
  }
  if (p1Choose == true ) {
    p1Choose = false;
  }
  if (p1Choose == false) {
    p1Choose = true;
  }
  return returnMe;
}

我收到这个错误,说非静态方法不能被静态上下文引用

4

3 回答 3

4

你找错树了。关键字的存在与否static是使方法静态与否的唯一因素。

于 2013-11-09T02:08:46.960 回答
0

我不明白你为什么会这样想。我在您的代码中看不到任何内容,这可能会迫使您这样想。
如果方法在其签名中具有静态修饰符,则它可以是静态的。否则它不能是静态的。静态或非静态不依赖于方法的内部结构。
但是,有一件事,您不能使用静态方法中的任何非静态方法或变量。这部分可能会让您像现在这样思考。当您使用 if-else 时,您可能会使用一些非静态变量,但在使用 switch 时,您可能不需要使用这些变量。
请您检查这部分。

于 2013-11-09T02:16:22.603 回答
0

我认为你误解了你的错误......

int 折腾 = Random.nextInt(1); // 或者这是随机导致的????

nextInt()不是上的静态方法Random。试试这个:

Random r = new Random();
int toss = r.nextInt(1);
于 2013-11-09T02:21:19.693 回答