我正在尝试编辑代码以给我当前日期和时间,然后在同一行上计算一些数据。我已在下面附加了Java代码。
if(tglbtnWrite.isSelected() && (intervalCounter%requiredParams[2] == 0))
printw.printf(dtf.format(LocalDateTime.now()) + ","); //For every new line of counts, shows current date and and time of the system.
r.write(POLL_FLAG_ADDRESS,0); // put it back down
intervalCounter++; // increment interval counter (gets reset by GO/STOP toggle)
for(int i = 0; i < MAX_WIDGETS; i++) { // loop through all widgets
NumWidget tmp = numwid.get(i);
if((tmp.getState() != 0) && (tmp.getState() != 16)) { // check if widget is configured for a channel
tmp.setAcc(tmp.getAcc() + r.read(translate[tmp.getState() - 1])); // if it is, poll the respective register
if(intervalCounter%requiredParams[2] == 0) { // check if we have reached integration interval
tmp.setTextFieldText(String.format("%,d", tmp.getAcc())); // if so, update display
if(tglbtnWrite.isSelected())
//s.append(tmp.getAcc()+ ","); // if write enabled, write to disk
printw.printf(tmp.getAcc()+ ",");
tmp.setAcc(0); // reset accumulator
}
}
我想要的是这样的:
相反,我得到:
这个想法是我想为每一行数据提供一个日期和时间戳,这就是第二行的目的。
我应该进行什么编辑?
编辑:我删除了屏幕截图并发布了代码段。
答案 0 :(得分:2)
您应该使用StringBuffer建立字符串,然后对最终结果进行printf
StringBuffer sb = new StringBuffer();
sb.append(dtf.format(LocalDateTime.now()) + ",");
// Add your other items with sb.append()
// When done write out the end result
printw.printf(sb.toString());
正如安德烈亚斯(Andreas)在评论中提到的那样,您应该从中间的附录中删除\ r \ n,并且只在结尾处添加。
答案 1 :(得分:2)
之所以发生这种情况,是因为您正在循环中的每个小部件上打印"\r\n"
(在Windows中是新行字符:source)。因此,它将在每个单个小部件之后中断该行。
如果您只想在打印所有后中断行。您已将循环中的打印语句更改为:
// This will not break the lines after every widget.
printw.printf(tmp.getAcc() + ",");
然后在循环之外,您应该添加
printw.println();
// This will print a line break appropriate to the system you are running
// your application on, regardless if it's windows or not.