抱歉;我不知道如何标题,所以这个问题有点粗制滥造。
我正在完成一个额外信用分配的小程序,并且有两个非常小的细节正在破坏它。
该计划的目的是读取一些数据,将其划分为客户编号和航班号,然后确定航班是否合适。我有一个文件here的图片截图,因为要简短地解释一下有点麻烦。很抱歉不得不发送链接。
这是我的代码:
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class prog475a {
static Scanner inFile = null;
public static void main(String[] args) {
// make the flight plan array
boolean[][] flightPlan = new boolean[7][7];
// fill the true
flightPlan[1][2]=true;
flightPlan[1][3]=true;
flightPlan[1][6]=true;
flightPlan[2][1]=true;
flightPlan[2][3]=true;
flightPlan[2][6]=true;
flightPlan[3][4]=true;
flightPlan[4][2]=true;
flightPlan[4][5]=true;
flightPlan[4][6]=true;
flightPlan[5][2]=true;
flightPlan[5][4]=true;
flightPlan[6][2]=true;
flightPlan[6][5]=true;
// read for file
try {
// create scanner to read file
inFile = new Scanner(new File ("prog475a.dat"));
} catch (FileNotFoundException e) {
System.out.println("File not found!");
System.exit(0);
}
/*
* read customer number
* method to translate flight plan into coordinates
*
*/
int customer = 0;
int flight = 0;
while (inFile.hasNext()) {
customer = inFile.nextInt();
flight = inFile.nextInt();
translator(customer, flight, flightPlan);
}
}
public static void translator(int c, int f, boolean[][] fl) {
System.out.println("Customer Number " + c + "\tFlight Plan " + f);
// change int f into individual numbers?
int[] coo = new int[6];
int a = 10000;
// boolean ok = true;
for (int x = 0; x < coo.length - 1; x ++) {
coo[x] = (f / a) % 10;
a /= 10;
}
// test if your array has all the right numbers
// for (int x = 0; x < coo.length - 1; x++) {
//
// System.out.println(coo[x]);
//
// }
// instantiate variables to act as parameters to navigate boolean
int n = 0; // the actual coordinate
int p = 0; // placeholders
int q = 0;
while (q < coo.length) { // q has to end when it equals length of coo
p = coo[n];
q = coo[n + 1];
if (fl[p][q]) {
System.out.println(p + "\t" + q + "\t" + "Available");
n++;
} else {
System.out.println(p + "\t" + q + "\t" + "Unavailable\t Flight Plan invalid");
break; // if unavailable, break
}
}
System.out.println("");
}
}
以下是数据:
10123 13426
11305 62000
13427 42320
18211 34212
19006 65426
20831 52500
21475 32000
22138 13424
24105 65231
24216 34250
25009 43621
我遇到的问题非常简单 - 我的程序运行得非常好,除了我已经尝试了各种不同的方法来打印“飞行计划有效”在程序结束时无济于事。我老老实实地做了一切;我在q = coo [coo.length - 1]时添加了一个额外的if / else语句,试图将它附加到while循环的外部。我无法让它发挥作用。
我所遇到的另一个问题是,对于航班34212,任意打印出一条额外的线,表示从2到0的航班,根本不存在该号码。这是唯一一个遇到这个问题的航班。
我真的不确定我做错了什么,我希望有人能就如何修复我的代码提出一些建议,以确保这些错误得到解决。再次,谢谢你的时间。我有点屁股,所以我花了很长时间才弄清楚我做错了什么,我觉得有点沮丧。
答案 0 :(得分:1)
好的translator
函数中有很多逻辑错误,所以我只列出它们然后提供一些固定的代码。但是,因为这听起来像是一个课程,不要只是复制和粘贴。我认为实际上解决程序中的一些错误会非常有益。
coo
的长度为6.这可能是故意的,但不是必需的。coo
时。你只填写了6个中的5个。ok
变量。n
变量。while
循环的第一部分中,与q
进行比较是一个错字/逻辑错误,我认为您打算与n
进行比较。while
循环检查ok
和break
语句是多余的。 if
来执行运行代码,具体取决于ok
的状态。由于所有这些错误,我认为你绝对应该问你的老师或其他什么帮助,因为这在一篇文章中有很多变化。无论哪种方式,我希望你不要滥用这段代码;)。这是新的translate
函数:
public static void translator(int c, int f, boolean[][] fl) {
System.out.println("Customer Number " + c + " Flight Plan " + f);
int[] coo = new int[5];
int a = 10000;
for (int x = 0; x < coo.length; x++) {
coo[x] = (f / a) % 10;
a /= 10;
}
for (int x = 0; x < coo.length - 1; x++) {
int p = coo[x];
int q = coo[x + 1];
if (fl[p][q]) {
System.out.print(p + "\t" + q + "\tAvailable");
if (x == coo.length - 2) {
System.out.print("\tFlight Plan is Valid");
}
System.out.println();
}
else {
System.out.println(p + "\t" + q + "\tUnavailable\tFlight Plan is Invalid");
break;
}
}
}
说明:除了我将for
的长度更改为5并使第一个coo
循环运行5次之外,我在最后for
循环之前使用了基本相同的代码。您还会注意到我删除了ok
,因为它是多余的。这是因为一旦我有一个糟糕的航班,我只打印无效的航班信息然后休息。那里不需要变量。对于最后一个循环,您可以看到,我使用for
循环而不是while
循环。我为什么这样做?几乎只是味道的原因。当我知道要循环多少次时,我通常会使用for
循环,而当数字不明确时,我会使用while
。此外,在这种情况下,由于你正在使用计数变量n
,这就是for
循环有利于(哈哈)的事情。其余代码非常明显。如果航班有效,您可以进行打印。如果它是最后一个循环,那么if (x == coo.length - 2)
(这会检查它是最后一个循环),然后打印出飞行计划有效。否则你打印它是无效的,你打破了。我已经用这段代码做了一些测试,到目前为止它还可以运行。我希望这可以帮助你!