阵列无法正确打印

时间:2015-02-25 00:59:42

标签: java arrays file loops

我试过移动我的花括号和这个程序的整个结构一堆,似乎无法指出如何正确地打印出来。我有一个看起来像这样的文本文件:

Game of Thrones|Action|HBO|50|Favorite
House of Cards|Drama|Netflix|50|Favorite
Huckabee|Bad Show|Fox News|25|Not favorite
Survivor|Reality|NBC|45|Not favorite
The Daily Show with Jon Stewart|Comedy|Comedy Central|30|Favorite
Louie|Comedy|FX|30|Favorite
Sports Center|Sports News|ESPN|60|Favorite
The Big Bang Theory|Comedy|CBS|30|Not favorite
Sesame Street|Educational|PBS|30|Favorite
Chopped|Food Show|Food Network|60|Favorite

我希望我的控制台使用toString()来显示这个(减去管道),它可以很好地工作,但它打印出每个节目的10个副本,我不知道我能做什么做不同的事来解决这个问题

问题:我怎样才能让控制台打印出每个节目的1个副本而不是10个?

驱动程序代码:

   public class TVShowDriver {
public static void main(String[] args) throws FileNotFoundException {

    TVShow[] tvShow = new TVShow[10];
    String tvName = "";
    String genre = "";
    String network = "";
    int runningTime = 0;
    String favorite = "";

    // reads in Shows.txt
    File tvShows = new File("./src/Shows.txt");
    Scanner fileScanner = new Scanner(tvShows);

    // while there is a new line in the data, goes to the next one
    while (fileScanner.hasNextLine()) {
        String line = fileScanner.nextLine();
        Scanner lineScanner = new Scanner(line);
        lineScanner.useDelimiter("\\|");

        // while there is a new attribute to read in on a given line, reads
        // data
        while (lineScanner.hasNext()) {
            tvName = lineScanner.next();
            genre = lineScanner.next();
            network = lineScanner.next();
            runningTime = lineScanner.nextInt();
            favorite = lineScanner.next();

            // creates a show
            for (int i = 0; i < tvShow.length; i++) {
                tvShow[i] = new TVShow(tvName, genre, network, runningTime,
                        favorite);
            }

        }

        // prints out shows
        for (int i = 0; i < 10; i++) {
            System.out.println(tvShow[i]);
        }

    }

}

}

TVShow课程:

public class TVShow {

    private String tvName;
    private String genre;
    private String network;
    private int runningTime;
    private String favorite;

    public TVShow(String tvName, String genre, String network, int runningTime, String favorite)
    {
        this.tvName = tvName;
        this.genre = genre;
        this.network = network;
        this.runningTime = runningTime;
        this.favorite = favorite;
    }

    public String getTvName() {
        return tvName;
    }

    public void setTvName(String tvName) {
        this.tvName = tvName;
    }

    public String getGenre() {
        return genre;
    }

    public void setGenre(String genre) {
        this.genre = genre;
    }

    public String getNetwork() {
        return network;
    }

    public void setNetwork(String network) {
        this.network = network;
    }

    public int getRunningTime() {
        return runningTime;
    }

    public void setRunningTime(int runningTime) {
        this.runningTime = runningTime;
    }

    public String getFavorite() {
        return favorite;
    }

    public void setFavorite(String favorite) {
        this.favorite = favorite;
    }

    public String toString()
    {
        return "TV Show Name: " + tvName + ", Genre: " + genre + ", Network: " + network + ", Running Time: " + runningTime + " mins" + ", Favorite: " + favorite;
    }
}

2 个答案:

答案 0 :(得分:2)

此...

    // creates a show
    for (int i = 0; i < tvShow.length; i++) {
        tvShow[i] = new TVShow(tvName, genre, network, runningTime,
                              favorite);
    }

......错了。基本上,每次从文件中读取一行时,您都会使用该节目的详细信息重新填充数组(确保您正在创建TVShow的新实例,但它包含所有相同的细节。

相反,每次读取新行时都使用单独的迭代值并递增...

int currentLine = 0;
while (lineScanner.hasNext()) {
    if (currentLine < tvShow.length) {
        tvName = lineScanner.next();
        genre = lineScanner.next();
        network = lineScanner.next();
        runningTime = lineScanner.nextInt();
        favorite = lineScanner.next();

        tvShow[currentLine] = new TVShow(tvName, genre, network, runningTime,
                               favorite);
        currentLine++;
    } else {
        System.err.println("The array is full");
        break;
    }

}

答案 1 :(得分:0)

我认为你的问题在于:

// creates a show
for (int i = 0; i < tvShow.length; i++) {
    tvShow[i] = new TVShow(tvName, genre, network, runningTime,favorite);
}

您似乎每次都填充tvShow数组,同时显示10个(这是数组的长度)副本。

解决方案是在第一个while循环之外设置一个计数器,然后递增。然后使用该计数器索引到tvShow

或者,如果你只想打印每个节目,你就无法将它们全部保存在一个数组中,在while循环之外创建一个TVShow变量并重新分配它。

这样看起来像: TVShow myShow; // outside of the first while loop loop

myShow = new TVShow(tvName, genre, network, runningTime,favorite); // where you were assigning into the array