停车场在矩阵中保存的行数不超过 1 行
Parking Lot doesn`t save in matrix more than 1 line
所以我有这个项目用于我的大学,但我被困在这里,我尝试了所有我想到的让这段代码保存超过 1 个插槽的方法,因为我必须将最多 100 个保存到矩阵数据库中。一切都很好,但程序总是覆盖第一行,从不传递到第二行...这是代码:
预留零件方法:
for (n=1; n<100; n++) {
parkinglot[n][0] = Integer.toString(n);
parkinglot[n][1] = JOptionPane.showInputDialog(null, "License plate: ").toUpperCase();
String hourofreservation = JOptionPane.showInputDialog(null, "Reservation hour(hh:mm): ");
parkinglot[n][2] = hourofreservation;
parkinglot[n][3] = formatter.format(date);
parkingtime = Integer.parseInt(JOptionPane.showInputDialog(null, "Hours : "));
parkinglot[n][4] = Integer.toString(parkingtime);
int totalfee = (toMinutes(parkingtime)/30) * fee;
pay(totalfee);
//SaveReservation(nrinmat, parkinglot);
//save
JOptionPane.showMessageDialog(null, "This is yout reservation" + "\n\n" + " | " + parkinglot[n][0] + " | " + parkinglot[n][1] + " | " + parkinglot[n][2] + " | " + parkinglot[n][3] + " | " + parkinglot[n][4] + " HOURS |");
break;
}
数据库方法:
public static String[][] database(String [][]parkinglot)
{
System.out.println("This is database");
for (int i = 1; i < parkinglot.length; i++) {
for (int j = 0; j < parkinglot[i].length; j++) {
System.out.print(parkinglot[i][j] + "\t");
}
System.out.println();
}
return parkinglot;
}
你的程序每次都从 1 开始,因为你有这一行:
for (n=1; n<100; n++)
在您进入循环之前将 n
初始化为 1。 (如评论中所述,通常您会将 n
初始化为零,但这不是您的问题。)
稍后,当 n
仍为 1 时,您跳出循环。当您再次调用此代码(我假设它在一个函数中)时,它将 n
重新初始化为 1循环的开始。所以 n
永远是 1.
如果你每次运行程序只想填一条记录,那你根本不需要循环。您需要将 n
的值存储在某处(例如在磁盘上或数据库中),然后在您再次 运行 程序时读回它。或者,如果您将 parkinglot
的内容保存在某处并将其读回,您可以扫描它(使用 for
循环)以找到第一个空条目,然后初始化 n
为此,类似于:
int n = 1; // or 0
for (; n < parkinglot.length && parkinglot[n][0] != null; n++);
if (n < parkinglot.length) {
populateParkingLotEntry(parkinglot, n);
} else {
// No more slots left...
}
所以我有这个项目用于我的大学,但我被困在这里,我尝试了所有我想到的让这段代码保存超过 1 个插槽的方法,因为我必须将最多 100 个保存到矩阵数据库中。一切都很好,但程序总是覆盖第一行,从不传递到第二行...这是代码:
预留零件方法:
for (n=1; n<100; n++) {
parkinglot[n][0] = Integer.toString(n);
parkinglot[n][1] = JOptionPane.showInputDialog(null, "License plate: ").toUpperCase();
String hourofreservation = JOptionPane.showInputDialog(null, "Reservation hour(hh:mm): ");
parkinglot[n][2] = hourofreservation;
parkinglot[n][3] = formatter.format(date);
parkingtime = Integer.parseInt(JOptionPane.showInputDialog(null, "Hours : "));
parkinglot[n][4] = Integer.toString(parkingtime);
int totalfee = (toMinutes(parkingtime)/30) * fee;
pay(totalfee);
//SaveReservation(nrinmat, parkinglot);
//save
JOptionPane.showMessageDialog(null, "This is yout reservation" + "\n\n" + " | " + parkinglot[n][0] + " | " + parkinglot[n][1] + " | " + parkinglot[n][2] + " | " + parkinglot[n][3] + " | " + parkinglot[n][4] + " HOURS |");
break;
}
数据库方法:
public static String[][] database(String [][]parkinglot)
{
System.out.println("This is database");
for (int i = 1; i < parkinglot.length; i++) {
for (int j = 0; j < parkinglot[i].length; j++) {
System.out.print(parkinglot[i][j] + "\t");
}
System.out.println();
}
return parkinglot;
}
你的程序每次都从 1 开始,因为你有这一行:
for (n=1; n<100; n++)
在您进入循环之前将 n
初始化为 1。 (如评论中所述,通常您会将 n
初始化为零,但这不是您的问题。)
稍后,当 n
仍为 1 时,您跳出循环。当您再次调用此代码(我假设它在一个函数中)时,它将 n
重新初始化为 1循环的开始。所以 n
永远是 1.
如果你每次运行程序只想填一条记录,那你根本不需要循环。您需要将 n
的值存储在某处(例如在磁盘上或数据库中),然后在您再次 运行 程序时读回它。或者,如果您将 parkinglot
的内容保存在某处并将其读回,您可以扫描它(使用 for
循环)以找到第一个空条目,然后初始化 n
为此,类似于:
int n = 1; // or 0
for (; n < parkinglot.length && parkinglot[n][0] != null; n++);
if (n < parkinglot.length) {
populateParkingLotEntry(parkinglot, n);
} else {
// No more slots left...
}