【发布时间】:2019-12-22 20:57:07
【问题描述】:
我正在做一个关于打算在医院使用的计算机系统的 uni 项目。
我有一个“病人”类,其中有一些参数,如心跳、血压(2 个值)和温度,与它相关联,这些参数存储在 TreeMap“参数”中:每个参数都与它的时间一起存储被测量。它们使用“Patient”的 updateParameters() 方法进行更新。
在 updateParameters() 中,我尝试使用 printParameters() 方法检查它们是否存储正确。
然后我有一个“ViewParameters”类,它需要访问患者的参数,但问题是它无法访问这些参数。
我尝试打印患者,它正是选择的患者,所以当我使用该患者的 getParameters() 或 printParameters() 方法时,我使用了正确的方法。
但是:
(我在“ViewParameters”的代码中插入了一些cmets和这个列表的编号)
当我执行 patient.printParameters() 时,它什么也不打印,只打印初始行(“患者参数:\n”)。
当我尝试直接从 patient.getParameters() 打印时,它什么也没打印。
如果我在使用 getParameters() 方法后打印“ViewParameters”类中的参数,它什么也不打印,只打印初始行(“viewParameters 中的参数\n”)。
-
即使我直接使用 parametres = Patient.getParameters() 访问参数然后尝试打印它们,它什么也不会打印,只打印初始行(“viewParameters 中的参数”)。
李> 我尝试将参数放在“Patient”中公开并执行参数(在“ViewParameters”中)=parameters(在“Patient”中),但它什么也没做。
“病人”类:
public class Patient implements Comparable<Object> {
private String code;
public Map<LocalTime, Integer[]> parameters = new TreeMap<>();
public Map<LocalTime, Integer[]> getParameters() {
return parameters;
}
public void printParameters() {
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("HH:mm");
String patient = "patient parameters\n";
for(LocalTime time: parameters.keySet()) {
patient += time.format(dtf) + " ";
for(Integer parameter: parameters.get(time))
if(parameter == null)
patient += "- ";
else
patient += parameter + " ";
}
System.out.println(patient);
}
public void updateParameters(Map<LocalTime, Integer[]> parameters) {
for(LocalTime time: parameters.keySet()) {
Integer[] parametersInteger = new Integer[4];
int i = 0;
for(Integer parameter: parameters.get(time)) {
parametersInteger[i] = parameter;
i++;
}
this.parameters.put(time, parametersInteger);
}
printParameters();
}
“视图参数”类:
public class ViewParameters extends AbstractTableModel {
String[] column = new String[5];
Map<LocalTime, Integer[]> parameters = new TreeMap<>();
private Patient patient;
public ViewParameters(String[] tags, Patient patient) {
int i = 0;
for(String tag: tags) {
column[i] = tag;
i++;
}
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH.mm");
this.patient=patient;
System.out.println("patient in ViewParameters:" + patient);
patient.printParameters(); //1)
//2)
for(LocalTime time: patient.getParameters().keySet()) {
System.out.println("time: " + time);
Integer[] parametersInteger = new Integer[4];
int j = 0;
for(Integer parameter: patient.getParameters().get(time)) {
System.out.println("parametro " + j + ": " + parameter);
parametersInteger[j] = parameter;
j++;
}
parameters.put(time, parametersInteger);
}
//3)
String print = "parameters in viewParameters\n";
for(LocalTime time1: parameters.keySet()) {
print += time1 + " ";
for(Integer parameter: parameters.get(time1))
if(parameter == null)
print += "- ";
else
print += parameters + " ";
}
System.out.println(print);
//4)
parameters = patient.getParameters();
String print1 = "parameters in viewParameters";
for(LocalTime time: parameters.keySet()) {
print1 += time + " ";
for(Integer parameter: parameters.get(time))
if(parameter == null)
print1 += "- ";
else
print1 += parameter + " ";
}
System.out.println(print1);
}
问题似乎在于在它自己的类之外使用 Patient 的方法,因为如果我在“Patient”中使用它,printParameters() 有效,如果我在“ViewParameters”甚至 getParameters() 中使用它则不起作用方法在“ViewParameters”中不起作用。
【问题讨论】:
-
调试它,看看会发生什么,我的第一个预感:那里根本没有要打印的参数。调试:每隔一行添加一次日志记录或使用断点。
-
@FrankHopkins 我在
updateParameters()方法之后使用了带有断点的调试器,该方法将新值放入TreeMap并正确存储值。即使我在Patient中使用了printParameters(),它仍然有效,表明parameters中有一些东西要打印。我不明白为什么它在Patient之外不起作用
标签: java swing class scope treemap