我正在尝试编写此代码以获取第一个initialCapacity质数,然后使用java按顺序打印它们。它不起作用有两个原因,首先是我得到了错误
41:不能从静态上下文中引用非静态变量listOfPrimeNumbers
当我尝试运行程序时,即使将变量更改为static并运行程序,它也只会打印出“
1”。因此,仅在构造函数Primes中迭代一次while循环,然后停止,无论我多么努力,我都根本找不到问题!任何人都可以帮助我,即使您可以快速浏览一下并告诉我可能出了什么问题,我也非常感谢。
此外,关于非静态和静态变量与方法的故事是什么?使用这些的最佳实践是什么?如果有人可以将我链接到描述此内容的页面(我用谷歌搜索都无济于事!),我很想读:)
非常感谢大家!
import java.util.*;
public class Primes {
private ArrayList<Integer> listOfPrimeNumbers;
public static void main(String[] args) {
ArrayList<Integer> listOfPrimeNumbers;
Primes generator=new Primes(50);
print();
}
public Primes( int initialCapacity) {
listOfPrimeNumbers = new ArrayList<Integer>(initialCapacity);
int index=0;
int counter=0;
while (counter != initialCapacity ) {
if (isPrime(index)) {
listOfPrimeNumbers.add(index);
counter++;
System.out.println(counter);
index++;
}
else {
index++;
}
}
}
public boolean isPrime(int candidateNo) {
Iterator<Integer> iter = listOfPrimeNumbers.iterator( );
//in here ! ?
int i=2;
while ( iter.hasNext( ) ) {
int next = iter.next( );
if (next%i==0 && i!=1) {
return false;
}
}
return true;
}
public static void print( ) {
int n = listOfPrimeNumbers.size();
for(int i = 0; i <= n ; i++)
System.out.println( listOfPrimeNumbers.get( i ) );
}
}
我现在已经编辑了代码,以使所有内容都是静态的(意味着我可以有多个实例?)。我现在有了这个,问题是它只打印出前51个数字,然后出现堆栈溢出,有人可以帮忙吗?谢谢
:) :
import java.util.*;
public class Primes {
private static ArrayList<Integer> listOfPrimeNumbers;
public static void main(String[] args) {
ArrayList<Integer> listOfPrimeNumbers;
Primes generator=new Primes(50);
print();
}
public Primes( int initialCapacity) {
listOfPrimeNumbers = new ArrayList<Integer>(initialCapacity);
int index=2;
int counter=0;
while (counter != initialCapacity ) {
if (isPrime(index)) {
listOfPrimeNumbers.add(index);
counter++;
System.out.println(counter);
index++;
}
else {
index++;
}
}
}
public boolean isPrime(int candidateNo) {
Iterator<Integer> iter = listOfPrimeNumbers.iterator( );
while ( iter.hasNext( ) ) {
int next = iter.next( );
if (next%candidateNo==0 && candidateNo!=1) {
return false;
}
}
return true;
}
public static void print( ) {
int n = listOfPrimeNumbers.size();
for(int i = 0; i <= n ; i++)
System.out.println( listOfPrimeNumbers.get( i ) );
}
}
listOfPrimeNumbers
是您的类的成员,这意味着的每个实例Primes
都有其自己的副本listOfPrimeNumbers
。
print
是一个静态函数,这意味着它与的实例无关Primes
,因此,它无法访问其中的任何listOfPrimeNumbers
变量(每个类实例一个)。
因此listOfPrimeNumbers
必须是静态的(即整个世界中只有一个副本),或者print
不能是静态的。
我正在尝试编写一段代码,当我选中两个复选框中的一个复选框时,它将更改我选择按钮时显示的消息。 我收到的错误消息是: "FirstWindow.java:12:错误:不能从静态上下文消息中引用非静态变量消息="good job\n";" 对于第12、37、53、57行。我已尝试在main中声明字符串变量,但我只会收到错误: “FirstWindow。java:38:错误:从内部类引用的局部变量必须是
我在阅读Kathy and Bert SCJP1.6时遇到了以下代码: 虽然是在跟踪变量的主题下,但我无法理解如何在main()方法(static)中引用非静态变量myBar?
我尝试使用网络豆IDE在java中创建一个简单的类。每当我试图执行这个命令时,它都会发出这样的警告。从静态上下文引用的非静态变量“。谁能告诉我为什么会发生这种情况以及如何解决它。提前感恩节。
问题内容: 我有一个非常简单的类,想用作另一个类的子类。但是,当我将其代码放入父类时,我得到: 非静态变量,不能从静态上下文中引用 另一方面,当我将sublass 的类代码放在“父母的”类代码之外时,我不会收到此错误。 为什么会这样呢? 问题答案: 嵌套类(顺便说一下,它 不是 子类)没有被标记为静态的,因此它是一个 内部 类,需要构造一个编码类(JavaApp1)的实例。 选项: 使嵌套类静态
问题内容: 我是Java新手,我正在尝试通过递归函数部署斐波那契跟踪,然后计算运行时间。这是我设法编写的代码: 问题是,当我尝试将其转换为字节码时,出现以下错误: 我想知道是什么问题?! 问题答案: 更改 至 并使该方法静态。 或者,改变 至
错误来自此行板状态 addme = 新板状态(); 由于某种原因,它所指向的非静态变量是“新”的。我不清楚如何修复这个错误,因为new不应该是一个变量,也不是。 查看stackoverflow记录,该错误通常来自非静态方法,通常通过将该方法设为静态或完全绕过该方法来解决。T 下面的代码是为了引用这个语句前后发生的事情。 }……