我在图片上看到了Jtable:
我希望从中获得最早的一小时。
我尝试过以下代码,但并不总能获得最早的时间。
String tinjm="";
if(jTable1.getRowCount()==1){
System.out.println(jTable1.getValueAt(0, 1).toString());
}else{
for(int i=0; i<jTable1.getRowCount()-1;i++){
String k=jTable1.getValueAt(i, 1).toString();
String j=jTable1.getValueAt(i+1, 1).toString();
if(Integer.parseInt(k.substring(0, 2))<Integer.parseInt(j.substring(0, 2))){
tinjm=k;
}else{
tinjm=j;
}
}
System.out.println(tinjm);
}
感谢您的合作。
答案 0 :(得分:2)
在你像mKorbel建议的那样拉直你的渲染器之后,修复你的算法。你找到了这个方向的最小值:
min = Integer.parseInt(tab.get(0...);
for (int i = 1; i < tab.getRowCount(); i++) {
num = Integer.parseInt(tab.get(i...)..;
if (num < min)
min = num;
}
如果比较对,它不会“始终工作”,这意味着它是错误的。
答案 1 :(得分:1)
你的逻辑略有缺陷。您循环遍历行,查看当前行(k)和下一行(j)。你比较这些以及哪一个早先变成了tinjm。但是,您不检查tinjm是否早于k或j。所以你的结果只是最后两行中最早的。
答案 2 :(得分:1)
其他海报建议使用自定义表格渲染器更好的格式化数据的方法,您的逻辑是比较当前行和下一行数据,但如果已设置的值早于当前比较,该怎么办?
以下示例代码:
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTable;
public class TestJTable {
private void init(){
String[][] rowData = new String[][]{{"0","05:00"},{"1","08:00"},{"3","01:40"},{"4","01:30"},{"5","11:15"},{"6","12:10"}};
String[][] columnNames = new String[][]{{},{}};
final JTable table = new JTable(rowData, columnNames);
JFrame frame = new JFrame();
frame.setLayout(new BorderLayout());
frame.add(table, BorderLayout.CENTER);
JButton button = new JButton("Get Earliest Date");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String[] earliest = findEarliestTime(table).split(":");
JOptionPane.showMessageDialog(null, "Earliest Hour " + earliest[0] + " , Minute : " + earliest[1]);
}
});
frame.add(button, BorderLayout.SOUTH);
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
private String findEarliestTime(JTable table) {
String earliest = (String)table.getValueAt(0, 1);
try {
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
Date currentDate = null;
Date earliestDate = null;
String currentValue = null;
for(int iDx = 1; iDx < table.getRowCount(); iDx++){
currentValue = (String)table.getValueAt(iDx, 1);
currentDate = sdf.parse(currentValue);
earliestDate = sdf.parse(earliest);
if(earliestDate.getTime() > currentDate.getTime()){
earliest = currentValue;
}
}
} catch (NumberFormatException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
}
return String.valueOf(earliest);
}
public static void main(String[] args) {
new TestJTable().init();
}
}