【问题标题】:My code is not printing我的代码没有打印
【发布时间】:2015-02-04 03:10:59
【问题描述】:

我的代码(读取文本文件,使用我构建的类对数据进行排序,然后输出到控制台),没有打印任何东西!有人可以告诉我我的小错误在哪里!我知道最后还没有结束。请帮忙!!!!!!!!

import java.io.*;
import java.util.ArrayList;
import java.util.Scanner;

public class Project02 {

public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    ArrayList<Product> products = new ArrayList<Product>();
    // Enter file name
    System.out.print("Enter database file name: ");
    String fileName = in.nextLine();
    try {
        File file = new File(fileName);
        Scanner inputFile = new Scanner(file);
        System.out.println();
        while (inputFile.hasNext()) {
            Product p = new Product();
            String title = inputFile.nextLine();
            String code = inputFile.nextLine();
            Integer quantity = inputFile.nextInt();
            Double price = inputFile.nextDouble();
            inputFile.nextLine();
            String type = inputFile.nextLine();
            Integer userReview = inputFile.nextInt();
            // read in title
            p.setName(title);
            // read in iCode
            p.setInventoryCode(code);
            // read in quantity
            p.setQuantity(quantity);
            // read in price
            p.setPrice(price);
            // read in type
            p.setType(type);
            // read in user reviews
            while (!userReview.equals(-1)) {
                p.addUserRating(userReview);
                userReview = inputFile.nextInt();
            }
            if (inputFile.hasNext()) {
                inputFile.nextLine();
            }
        }
        inputFile.close();
    } catch (IOException e) {
        System.out.println("There was an error reading from " + fileName);
    }

}

private static String highRating(ArrayList<Product> p) {
    int highestR = 0;
    int indexOfHighestR = 0;
    for (int i = 0; i < p.size(); i++) {
        int rating = p.get(i).getAvgUserRating();
        if (p.get(i).getAvgUserRating() > highestR) {
            highestR = p.get(i).getAvgUserRating();
            indexOfHighestR = i;
        }
    }
    int zero = 0;
    String Star = " ";

    while (highestR > zero) {
        Star = Star + "*";
        zero--;
    }
    String highestRateTitle = p.get(indexOfHighestR).getName() + "  ("
            + Star + ")";

    return highestRateTitle;
}

private static String lowestRating(ArrayList<Product> p) {
    int lowestR = 0;
    int indexOfLowestR = 0;
    for (int i = 0; i < p.size(); i++) {
        int rating = p.get(i).getAvgUserRating();
        if (p.get(i).getAvgUserRating() < lowestR) {
            lowestR = p.get(i).getAvgUserRating();
            indexOfLowestR = i;
        }
    }
    int zero = 0;
    String Star = " ";

    while (lowestR > zero) {
        Star = Star + "*";
        zero--;
    }
    String highestRateTitle = p.get(indexOfLowestR).getName() + "  ("
            + Star + ")";

    return highestRateTitle;
}

private static double maxDollar(ArrayList<Product> p) {
    double largestP = 0;
    int indexOfLargestP = 0;
    for (int i = 0; i < p.size(); i++) {
        double price = p.get(i).getPrice();
        if (p.get(i).getPrice() > largestP) {
            largestP = p.get(i).getPrice();
            indexOfLargestP = i;
        }
    }
    return largestP;
}

private static int minDollar(ArrayList<Product> p) {
    double smallestP = p.get(0).getPrice();
    int indexOfSmallestP = 0;
    for (int i = 0; i < p.size(); i++) {
        if (p.get(i).getPrice() < smallestP) {
            smallestP = p.get(i).getPrice();
            indexOfSmallestP = i;
        }
    }
    return indexOfSmallestP;
}

private static void inventoryList(ArrayList<Product> p) {
    int count = 
    System.out.println("Product Summary Report: ");
    System.out
            .println("------------------------------------------------------------");
    for (int i = 0; i < count; i++) {
        System.out.println("Title: " + p.get(i).getName());
        System.out.println("I Code: " + p.get(i).getInventoryCode());
        System.out.println("Product Type: " + p.get(i).getType());
        System.out.println("Rating: " + p.get(i).getAvgUserRating());
        System.out.println("# Rat.: " + p.get(i).getUserRatingCount());
        System.out.println("Quantity: " + p.get(i).getQuantity());
        System.out.println("Price: " + p.get(i).getPrice());
        System.out.println();
    }
    System.out
            .println("-----------------------------------------------------------------");
    // System.out.println("Total products in database: " + count);
    System.out.println("Highest total dollar item: "
            + p.get(maxDollar(p)) + " ($"+ p.(maxDollar(p)) + ")");
    System.out.println("Smallest quantity item: "
            + p.get(minQuantity(quantities)) + " ("
            + types.get(minQuantity(quantities)) + ")");
    System.out.println("Lowest total dollar item: "
            + titles.get(minDollar(prices)) + " ($"
            + prices.get(minDollar(prices)) + ")");
    System.out
            .println("-----------------------------------------------------------------");
}

【问题讨论】:

  • 请不要大喊大叫。你能提供一个“数据库”文件的例子吗?
  • 肖申克的救赎 C0000001 100 19.95 DVD 4 5 3 1 -1 黑暗骑士 C0000003 50 19.95 DVD 5 2 3 -1 卡萨布兰卡 C0000007 137 9.95 DVD 5 4 5 3 -1 龙纹身的女孩C0000015 150 14.95 Book 4 4 2 -1 Vertigo C0000023 55 9.95 DVD 5 5 3 5 2 4 -1 A Game of Thrones C0000019 100 8.95 Book -1
  • 你认为你的程序应该打印什么,为什么?
  • 尝试在某处调用您的inventoryList() 方法。当然,首先你需要修复它以便编译。
  • 我的inventoryList() 方法有很多问题。这是我第一次编写这样的代码,我不知道如何获取电影标题的总数(应该有六个)。我感到困惑的另一件事是如何从我上面写的私有方法中调用正确的东西。

标签: java database class methods printing


【解决方案1】:

首先...

创建Productp 的实例后,您需要将其添加到products 列表中,否则您将失去它的引用并且无法再次使用它。 .

while (inputFile.hasNext()) {
    Product p = new Product();
    //...
    products.add(p);
    if (inputFile.hasNext()) {
        inputFile.nextLine();
    }
}

第二...

您需要将products List 传递给想要使用/显示信息的对象,例如inventoryList...

但是等等,这不起作用?

如果我们仔细看看inventoryList 方法...

    int count = 0;
    //...
    for (int i = 0; i < count; i++) {

我们可以看到count 总是0,所以它永远不会打印任何东西!你应该改用p.size(),这是productsList的实际长度

    //...
    for (int i = 0; i < p.size(); i++) {

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-29
    • 2018-04-30
    • 2022-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-05
    相关资源
    最近更新 更多