繁体   English   中英

如何在Java程序中实现“ this”?

[英]How do I implement “this” into my Java program?

我的学校作业要求在以下程序中使用“ this”。 但是,我不太清楚该放在哪里。 我不断收到“无法从静态上下文引用的非静态变量”错误。

import java.util.Scanner;
public class PrimeNumber
{
    public static void main(String args[]) 
    {
      System.out.println("Enter the upper limit for the prime numbers computation: ");
      int upperLimit = new Scanner(System.in).nextInt();
      int count = 0;
      for(int number = 2; number<=upperLimit; number++)
      {
          if(isPrime(number))
          {
              System.out.println(number);
              count++;
          }
      }
      System.out.println("Number of primes generated: " + count);
    }
    public static boolean isPrime(int number)
    {
        for(int i=2; i<number; i++)
        {
           if(number%i == 0)
           {
               return false; 
           }
        }
        return true; 
    }
}

Java关键字this是指调用的实例方法的类的实例。 静态方法是该类的常规方法,因此您不能在其中引用任何实例(非静态)变量。 您只能从实例方法(即未定义为static的方法)内访问this实例变量。

因此,您需要创建一个实例方法(类中没有实例方法)才能使用this

This是对调用该方法的对象的引用。 另一方面, Static方法甚至可以在不存在任何类实例的情况下运行,因此它们不能引用任何对象。 这就是为什么你不能使用thisstatic方法。 如果确实需要this ,则必须从函数中删除static关键字,并以任何方式在这些函数中使用实例变量。

public class PrimeNumber
{
    public int count = 0;
    public int upperLimit;
    public static void main(String args[])
    {
        PrimeNumber pn = new PrimeNumber();
        System.out.println("Enter the upper limit for the prime numbers computation: ");
        pn.upperLimit = new Scanner(System.in).nextInt();
        pn.doCheck();
        System.out.println("Number of primes generated: " + pn.count);
    }

    public void doCheck() {
        for (int number = 2; number <= this.upperLimit; number++)
        {
            if (this.isPrime(number))
            {
                System.out.println(number);
                count++;
            }
        }
    }
    public boolean isPrime(int number)
    {
        for (int i = 2; i < number; i++)
        {
            if (number % i == 0)
            {
                return false;
            }
        }
        return true;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM