在数组末尾打印一个字符串

时间:2016-04-24 23:07:35

标签: java file-io

抱歉;我不知道如何标题,所以这个问题有点粗制滥造。

我正在完成一个额外信用分配的小程序,并且有两个非常小的细节正在破坏它。

该计划的目的是读取一些数据,将其划分为客户编号和航班号,然后确定航班是否合适。我有一个文件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的航班,根本不存在该号码。这是唯一一个遇到这个问题的航班。

我真的不确定我做错了什么,我希望有人能就如何修复我的代码提出一些建议,以确保这些错误得到解决。再次,谢谢你的时间。我有点屁股,所以我花了很长时间才弄清楚我做错了什么,我觉得有点沮丧。

1 个答案:

答案 0 :(得分:1)

好的translator函数中有很多逻辑错误,所以我只列出它们然后提供一些固定的代码。但是,因为这听起来像是一个课程,不要只是复制和粘贴。我认为实际上解决程序中的一些错误会非常有益。

  1. coo的长度为6.这可能是故意的,但不是必需的。
  2. 填写coo时。你只填写了6个中的5个。
  3. 您永远不会更改ok变量。
  4. 您永远不会使用n变量。
  5. 我认为在while循环的第一部分中,与q进行比较是一个错字/逻辑错误,我认为您打算与n进行比较。
  6. 同时使用while循环检查okbreak语句是多余的。
  7. 您没有添加if来执行运行代码,具体取决于ok的状态。
  8. 由于所有这些错误,我认为你绝对应该问你的老师或其他什么帮助,因为这在一篇文章中有很多变化。无论哪种方式,我希望你不要滥用这段代码;)。这是新的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)(这会检查它是最后一个循环),然后打印出飞行计划有效。否则你打印它是无效的,你打破了。我已经用这段代码做了一些测试,到目前为止它还可以运行。我希望这可以帮助你!