我经常遇到非静态变量错误。不确定何时使用静态和不静态我是否正确理解了目的。我在下面的代码中尝试将具有三列(日期,时间,温度)的csv文件解析为自己定义的类。
该位给我一个非静态变量错误。
TempData objt = new TempData();
如果有人知道我在做什么错,我将非常感激。我已经尝试过Google,但找不到任何相关内容。
package com.company;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.*;
import java.text.SimpleDateFormat;
import java.sql.Timestamp;
public class Main {
public static void main(String[] args) {
Date tempDate;
Date tempTime;
Double tempTemperature;
ArrayList<TempData> data = new ArrayList<TempData>();
TempData objt = new TempData();
//Get scanner instance
Scanner scanner = new Scanner(new File("smhi-opendata.csv"));
//Set the delimiter used in file
scanner.useDelimiter(";");
//Get all tokens and store them in some data structure
while (scanner.hasNext())
{
tempDate = new SimpleDateFormat("dd/MM/yyyy").parse(scanner.next());
tempTime = new SimpleDateFormat("hh:mm:ss").parse(scanner.next());
tempTemperature = Double.parseDouble(scanner.next());
objt.Data(tempDate, tempTime, tempTemperature);
data.add(objt);
}
//Do not forget to close the scanner
scanner.close();
}
public class TempData{
private Date date;
private Date time;
private double temperature;
public void Data (Date d, Date t, double te){
date = d;
time = t;
temperature = te;
}
}
}
答案 0 :(得分:0)
首先,Data函数仅更新值,而不创建新的TempData对象。其次,main函数不能使用当前所在的TempData类。
我会选择这样的东西:
public class TempData {
private Date date;
private Date time;
private double temperature;
public TempData(Date date, Date time, double temperature) {
this.date = date;
this.time = time;
this.temperature = temperature;
}
public static void main(String[] args) throws Exception {
Date tempDate;
Date tempTime;
Double tempTemperature;
ArrayList<TempData> data = new ArrayList<TempData>();
// Get scanner instance
Scanner scanner = new Scanner(new File("smhi-opendata.csv"));
// Set the delimiter used in file
scanner.useDelimiter(";");
// Get all tokens and store them in some data structure
while (scanner.hasNext()) {
tempDate = new SimpleDateFormat("dd/MM/yyyy").parse(scanner.next());
tempTime = new SimpleDateFormat("hh:mm:ss").parse(scanner.next());
tempTemperature = Double.parseDouble(scanner.next());
TempData objt = new TempData(tempDate, tempTime, tempTemperature);
data.add(objt);
}
// Do not forget to close the scanner
scanner.close();
}
}
答案 1 :(得分:0)
问题是您正在从静态上下文访问非静态类。 main
方法(public static void main() {}
)具有关键字static
,因此它位于类(静态)上下文中。您的内部类TempData
不是静态的,因此它属于实例(非静态)上下文。
您可以从实例上下文访问类上下文,反之亦然。因此,您有两个选择:
将您的TempData
类移动到静态上下文:
public class Main {
public static void main(String[] args) {
// ...
TempData objt = new TempData();
// ...
}
public static class TempData{
// ...
}
}
或从非静态上下文访问您的TempData
。例如:
public class Main {
public static void main(String[] args) {
new Main();
}
public Main() {
// ...
TempData objt = new TempData();
// ...
}
public class TempData {
// ...
}
}
要详细了解此内容,可以按照this官方说明进行操作。