【问题标题】:How System.out.println() works in java?System.out.println() 如何在 java 中工作?
【发布时间】:2014-09-25 22:07:49
【问题描述】:

在下面提到的代码中,我试图从 excel 表中获取数据并将它们存储在数组中。我已经编写了代码来从我的 ReadExcelData 方法中的 excel 文件中获取数据。现在我面临的问题在我的主要方法中,当我使用数组打印数据时,数据被多次打印。我发现,因为我在两个内部使用了 System.out.println() ,这就是为什么它被多次打印的原因。为了解决这个问题,我从 ReadExcelData 方法中删除了 System.out.println() (注释 - 在下面的代码中,粗体 System.out.println() 是我删除的那个),一旦我这样做了,我就无法得到任何输出。请告诉我我应该怎么做才能只从 ReadExcelData 获取数据而不打印它,因为我想在我的主要方法中打印数据。

package com.selenium; 
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.*;

@SuppressWarnings("unused")
public class ReadExcelData {
 static String[] data = new String[15];
  public String getData() throws InvalidFormatException, IOException{
   String data="Initial";
    File file = new File("C:\\Users\\Admin\\Desktop\\ScreenShot\\Excel.xls");
    FileInputStream input = new FileInputStream(file);
    Workbook work = WorkbookFactory.create(input);
    Sheet sheet = work.getSheet("Data");
    int rownum=sheet.getLastRowNum();
    //System.out.println("Row number = "+rownum);
     for(int i=0;i<rownum+1; i++){
       Row row=sheet.getRow(i);
       if(row != null){
           for(int j=0; j<row.getLastCellNum();j++){
       //System.out.println(row.getLastCellNum());
        if(row.getCell(j) != null){
             data = row.getCell(j).getStringCellValue();
             if(data != null){
                    **System.out.println(data);**
            }//if2
        }//if1
           }//for2
       }//if3   
     }//for1
     return data;
 }//getdata


public static void main(String[] args) throws InvalidFormatException, IOException{
  ReadExcelData read =new ReadExcelData();

  for(int i=0;i<data.length;i++){
         data[i]= read.getData();
      }

  }//main
}//class

Code block which is giving problem- 
 if(data != null){
                    **System.out.println(data);**
            }//if2

【问题讨论】:

  • read.getDataExcel.xls 读取所有数据并打印出来。你的主程序调用read.getData 15 次。当你调用它 15 次时,你认为会发生什么?

标签: java arrays excel for-loop


【解决方案1】:

你正在循环调用你的方法:

 for(int i=0;i<data.length;i++){
         data[i]= read.getData();
      }

所以它打印了多次。

如果你想把所有的值都放在 data[] 中,那么你应该做以下更改

public String[] getData() throws InvalidFormatException, IOException{

    String[] data = new String[15];
    ...

    int k =0;
    ...

    String cellVal = row.getCell(j).getStringCellValue();
    if(cellVal != null){
        data[k++] = cellVal;
    }//if2

    ....

    return data;
}

并且从 main 方法只调用一次:

String[] excelData = read.getData();

【讨论】:

  • 实际上我想在一个数组中获取 i 个字符串数据,即 data[1]= 1 值,data[2]= 2nd 值。但问题是我不能这样做。你能告诉我怎么做吗? if(data != null){ System.out.println(data); }//if2.我想知道 System.out.println(data); 到底是什么在循环内工作,因为当我删除它时,程序只打印 excel 文件中的最后一个单元格数据
  • @SwetaSingh 将上述更改应用于您的代码。它会做你想要达到的目标。
  • 通过这样做我可以单独获取每个单元格数据。像 excelData[1]= 某个值,excelData[1]= 某个其他值
  • 是的,试试@SwetaSingh
  • 最后一个问题 - secong 循环中的 System.out.println() 究竟是什么工作,因为一旦我删除它,程序就会停止执行。
【解决方案2】:

问题是,对于对象数据的每个单元格,您都在调用填充它的方法。 你有:

    data[i]= read.getData();

然后你的方法被调用了 15 次,打开、读取和返回整个文件 15 次。

只需从主程序中删除循环,一切都会按您的意愿运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-15
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-04
    • 1970-01-01
    相关资源
    最近更新 更多