【问题标题】:please help me to Call a printing Method请帮我调用打印方法
【发布时间】:2012-11-25 05:17:39
【问题描述】:

我创建了一种打印文件的方法,但是它只传递了 .dat 文件中的真实值而不是我的实际值。请您看看我的方法并告诉我我做错了什么吗?非常感谢。

调用打印方法:

System.out.println(printColumnHeaders(vehicles[x], false, false));

我的打印方法:

private  static  boolean  printColumnHeaders(Vehicle vehicle,boolean isFirst,boolean printFull ) {

    if(isFirst && printFull) {
         System.out.println(vehicle.printFullHeadings());
         isFirst = true;
         printFull = true;
     }
     else  if(isFirst){
         System.out.println(vehicle.printSummaryHeadings());
         isFirst = true;
     }
    return false; 
    }

此方法假设检查 isFirst 布尔值是否为真且 printFull 布尔值是否为真 然后,调用车辆的 printFullHeadings 方法 接下来,如果 isFirst 布尔值为 true,则为 Else 最后,调用车辆的 printSummaryHeadings 方法

【问题讨论】:

  • 由于您为 isFrirst 和 printFull 传入 false,因此您的方法将返回 false 传递给 System.out.println。这样所有的东西都被打印出来了。
  • 您的论点 isFirst 和 printFull 都是错误的。所以你的方法只是返回 false。
  • 在 printColumnHeaders 中,您没有使用车辆变量,而是使用了车辆[x],这是一个问题吗?
  • 你读取.dat文件值的地方在哪里?
  • @Sura 在我的主要方法中,它读起来很好......你在我的代码中看到任何错误吗?

标签: java class methods call


【解决方案1】:

如前所述,由于您传入的是 false,因此您的方法不会打印为 false。但是你似乎也有一个逻辑问题,因为你的静态方法总是返回一个布尔值,你正在传递给 System.out.println。您可以尝试以下方法:

if ( printColumnHeaders(System.out, vehicles[x], false, false) == false)
... handle print error

那么你的打印方法是:

private static boolean printColumnHeaders(java.io.PrintStream writer, Vehicle vehicle,boolean isFirst,boolean printFull ) {

if(isFirst && printFull) {
     writer.println(vehicle.printFullHeadings());
     isFirst = true;
     printFull = true;
 }
 else  if(isFirst){
     writer.println(vehicle.printSummaryHeadings());
     isFirst = true;
 }
return false; 
}

这允许您的方法输出到不仅仅是标准输出。

【讨论】:

    【解决方案2】:
    System.out.println(printColumnHeaders(vehicles[x], false, false));
    

    您将 false、false 传递给 printColumnHeaders 方法,这只会导致它终止并返回 false,通过调用 System.out.println() 来打印。

    如果您将方法作为参数调用 println(),它将打印该方法的返回值,而不是您希望在该方法中打印的任何内容。

    【讨论】:

      【解决方案3】:

      这是我修复它的方法:

      private static void displayVehicleData(String displayType) {
          boolean isFirst = true;
      
          for(int x = 0; x < vehicles.length; x++){
      
              switch(displayType) {
      
                  case "Vehicles" : // List All Vehicles
                      isFirst = printColumnHeaders(vehicles[x], false, isFirst);
                          System.out.println(vehicles[x].printSummaryOutput());
      
                      break;
                  case "Cars": // List All Cars
                          if(vehicles[x].getVehicleType().equals("American Car") || 
                              vehicles[x].getVehicleType().equals("Foreign Car")) {
                              isFirst = printColumnHeaders(vehicles[x], false, isFirst);
                              System.out.println(vehicles[x].printSummaryOutput());
                          }
      

      打印方式:

      private  static  boolean  printColumnHeaders(Vehicle vehicle, boolean printFull, boolean isFirst) {
      
                      if(isFirst && printFull){
                          System.out.println(vehicle.printFullHeadings());
                      }                                       
                      else if (isFirst){
                          System.out.println(vehicle.printSummaryHeadings());
                      }
      
                  return false;
              }
      

      【讨论】: