【问题标题】:Non-static reference to static in Java (but I'm only using static) [duplicate]Java中对静态的非静态引用(但我只使用静态)[重复]
【发布时间】:2014-11-11 16:29:57
【问题描述】:

运行此代码时出现以下错误: 错误:无法对非静态字段 c 进行静态引用 错误:无法对非静态字段 d 进行静态引用 代码总共发生了 11 次:

import java.util.Scanner;
class problemStatement
{
  int c = 0, d = 0;
  public static void main(String [] args)
  {
    Scanner in = new Scanner(System.in);
    System.out.println("Please enters two integers - 0 0 to end program");
    do
    {
      c = in.nextInt();
      d = in.nextInt();
      System.out.print("User input: " + c + " " + d + " " + displayValues);
      if (isFinished(c,d))
      {
        System.out.println("End of Program.");
      }
      else
      {
        displayValues (c,d);
      }
    }while(!isFinished(c,d));
  }
  public static int min ( int a, int b)
  {
    if ( a >=b)
    {
      return b;
    }
    else
    {
      return a;
    }
  }
  public static int max ( int a, int b)
  {
    if ( a >=b)
    {
      return a;
    }
    else
    {
      return b;
    }
  }
  public static boolean isFinished ( int a, int b )
  {
    if (a==0&&b==0)
    {
      return true;
    }
    else
    {
      return false;
    }
  }
    public static void displayValues ( int a, int b )
    {
      int e = min(a,b);
      int f = max(a,b);
      System.out.print("Max value: " + e + " Min value: " + f);
    }
  }

我同意某些代码是多余的,但是,我是新手,这是为了让我可以了解更多有关 Java 的信息。 任何帮助表示赞赏。

【问题讨论】:

  • 您是否尝试将错误文本放入搜索引擎并阅读结果?
  • cd 是什么?
  • @SotiriosDelimanolis 是的,我做到了,但我找不到与我的具体问题相关的任何内容,它们都与使用非静态实际引用静态有关,但我所有的方法都是静态的
  • @Mr_Wizerman69 你所有的方法可能都是静态的,但你调用的变量不是。
  • 这是因为cd 只能用于实例,不能用于类。使它们成为静态的,它将起作用。或者执行s = new problemStatement() 并访问s.c

标签: java methods static non-static


【解决方案1】:

您的变量 cd 是实例变量(非静态)。为了访问它们,您需要有一个 problemStatement 类的实例。因此,要么创建static,要么创建instance = new problemStatement() 并通过instance.cinstance.d 访问它们。

在你的情况下,我会做一切static

【讨论】:

  • 请允许我不同意:变量 c 和 d 只在 main() 中使用,所以它们应该在 main 中声明!让它们成为静态有点邪恶......
  • 你是对的。代码不是面向对象的,所以在这里使用类变量没有多大意义。使用局部变量是更好的解决方案。
  • 谢谢西蒙。所以你的建议是类型 c = new questionStatment() 和 d = new questionStatment()?
  • 什么是普通变量?你是说类变量吗?
  • 查看user1879313的回答。
【解决方案2】:

西蒙是正确的。另一种方法是在 main 中定义 c 和 d。类似的东西

  int c = in.nextInt();
  int d = in.nextInt();

这提供了更好的范围。

【讨论】:

  • 我一定会试试这个,在这里很有意义,所以我会告诉你它是否有效,谢谢!
猜你喜欢
  • 1970-01-01
  • 2021-08-31
  • 2014-11-19
  • 1970-01-01
  • 1970-01-01
  • 2014-02-02
  • 1970-01-01
  • 2011-02-28
  • 2011-06-02
相关资源
最近更新 更多