java非静态变量不能从静态上下文引用
我在这个网站上浏览了一段时间,试图找到这个问题的答案,但答案总是太具体,无法帮助我。我遇到问题的代码是当我尝试使用ArithmeticSequence
类中定义的构造函数实例化一个新的ArithmeticSequence
对象时。然而,Netbeans告诉我这是一个从静态上下文引用的非静态变量。我尝试将类ArithmeticSequence
更改为static,但也没有成功,因为出现了一个新的错误,只允许我使用默认构造函数。我试图做的是使用从文件SEQ.in
读取的两个值将mySequence
实例化为一个新的算术序列。我在mySequence = new ArithmeticSequence(FT, SI);
行上收到了错误消息。不管怎样,代码如下:
import java.io.*;
import java.util.Scanner;
public class SeqTest {
public static void main(String[] args) {
Sequence mySequence;
try (Scanner sc = new Scanner(new FileReader("SEQ.in"))) {
if (sc.hasNext()) {
for (int i = 0; i < 3; i++) {
String Line = sc.next();
Character type = Line.charAt(0);
double FT = sc.nextDouble();
double SI = sc.nextDouble();
switch (type) {
case 'A':
mySequence = new ArithmeticSequence(FT, SI);
}
System.out.println("The first 10 terms in the sequence are:");
System.out.println(mySequence.toString());
System.out.println("The sum of the first 5 terms = " + mySequence.getNthSum(5));
}
}
} catch (FileNotFoundException fnfe) {
System.out.println(fnfe);
}
}
interface SequenceOps {
public double getNthTerm(int n);
public double getNthSum(int n);
}
abstract static class Sequence implements SequenceOps {
private double firstTerm;
public void Sequence() {
firstTerm = 1;
}
public void Sequence(double j) {
firstTerm = j;
}
public double getFirstTerm() {
return firstTerm;
}
@Override
public String toString() {
String q = "";
for (int i = 10; i >= 0; i--) {
q += getNthTerm(i) + ", ";
}
return q;
}
}
public class ArithmeticSequence extends Sequence {
private double comDif;
public void ArithmeticSequence() {
Sequence(1);
comDif = 0;
}
public void ArithmeticSequence(double j, double k) {
Sequence(j);
comDif = k;
}
@Override
public double getNthTerm(int n) {
return getFirstTerm() + (n - 1) * comDif;
}
@Override
public double getNthSum(int n) {
double q = 0;
for (int i = n; i >= 0; i--) {
double j = getNthTerm(i);
q += j;
}
return q;
}
}
public class GeometricSequence extends Sequence {
private double ratio;
public void GeometricSequence() {
Sequence(1);
ratio = 1;
}
public void GeometricSequence(double i, double k) {
Sequence(i);
ratio = k;
}
@Override
public double getNthTerm(int n) {
return getFirstTerm() * (Math.pow(ratio, (n - 1)));
}
@Override
public double getNthSum(int n) {
double q = 0;
for (int i = n; i >= 0; i--) {
q += getNthTerm(i);
}
return q;
}
}
public class FibonacciSequence extends Sequence {
private double secondTerm;
public void FibonacciSequence() {
Sequence(1);
secondTerm = 1;
}
public void FibonacciSequence(double j, double i) {
Sequence(j);
secondTerm = i;
}
@Override
public double getNthTerm(int n) {
double q = 1.6180339887;
return secondTerm * Math.pow(q, n) + getFirstTerm() * Math.pow(q, n);
}
@Override
public double getNthSum(int n) {
double q = 0;
for (int i = n; i >= 0; i--) {
q += getNthTerm(i);
}
return q;
}
}
}
# 1 楼答案
首先,不应该在构造函数中使用返回类型,如果使用内部类,则必须在内部类之前实例化outerclass