在方法中找不到符号变量

Cannot find symbol variable in method

我正在 JAVA 学习编程。
我创建了一个程序来成功地在 MS word 中打印日期和时间,但现在我想通过不同的函数在我的 MS word 文档中打印字符串。我只能从 main 打印它们。

这是我的程序。

import java.util.*;

import java.io.*;

import org.apache.poi.xwpf.usermodel.*;
public class bill
{

public static void main(String[] args)throws Exception 
{

//Blank Document
XWPFDocument document= new XWPFDocument(); 
//Write the Document in file system
FileOutputStream out = new FileOutputStream("createparagraph.docx");

//create Paragraph
XWPFParagraph paragraph = document.createParagraph();
XWPFRun run=paragraph.createRun();
bill date1=new bill();
String day1=date1.date();
run.setText(day1)
document.write(out);
out.close();
}

public String date()
{
int day, month, year;
int second, minute, hour;
GregorianCalendar date = new GregorianCalendar();

  day = date.get(Calendar.DAY_OF_MONTH);
  month = date.get(Calendar.MONTH);
  year = date.get(Calendar.YEAR);

  second = date.get(Calendar.SECOND);
  minute = date.get(Calendar.MINUTE);
  hour = date.get(Calendar.HOUR);

  String day1= String.valueOf(day);
     String month1= String.valueOf(month);
        String year1= String.valueOf(year);  
            String second1= String.valueOf(second);
                String minute1= String.valueOf(minute);
                    String hour1= String.valueOf(hour);
               run.setText(day1); //here is error *
  return day1;

  }
 }

如您所见,当我在我的 date() 函数中使用 run.setText(day1); 时,出现语法错误:

cannot find symbol variable run.

我是新手,抱歉我用错了英语或惯例。
请帮我从不同的功能中使用它在 MS word 中打印数据。

如果你们 post 一个更正的程序,那么我将非常感激。

编辑 我这样做了,但现在 ms word 上没有打印任何内容

 import java.util.*;

 import java.io.*;

 import org.apache.poi.xwpf.usermodel.*;
  public class bill
{

 public static void main(String[] args)throws Exception 
 {

 //Blank Document
 XWPFDocument document= new XWPFDocument(); 
 //Write the Document in file system
 FileOutputStream out = new FileOutputStream("createparagraph.docx");
 bill date1=new bill();
 String day1=date1.date();
 document.write(out);
 out.close();
 }

 public String date()
 {
  int day, month, year;
  int second, minute, hour;
  GregorianCalendar date = new GregorianCalendar();

  day = date.get(Calendar.DAY_OF_MONTH);
  month = date.get(Calendar.MONTH);
  year = date.get(Calendar.YEAR);

  second = date.get(Calendar.SECOND);
  minute = date.get(Calendar.MINUTE);
  hour = date.get(Calendar.HOUR);

  String day1= String.valueOf(day);
     String month1= String.valueOf(month);
        String year1= String.valueOf(year);  
            String second1= String.valueOf(second);
                String minute1= String.valueOf(minute);
                    String hour1= String.valueOf(hour);
                    XWPFDocument document= new XWPFDocument(); 
                    XWPFParagraph paragraph = document.createParagraph();
                       XWPFRun run=paragraph.createRun();
                run.setText(day1+"/"+month1+"/"+year1+"                    "+second+":"+minute1+":"+hour1);

  return day1;

 }
}

在您的第一个示例中,您收到语法错误,因为您的 "run" 变量不在您调用它的同一范围内。方法中的变量只能由同一组 { } 中的其他代码使用或 "seen"。
因此,例如这样的 将不起作用 :

public static void main(String[] args) {
    int name = "Sally";
    sayHi();
}
public void sayHi(){
    System.out.println("Hi " + name);
}

sayHi 方法无法知道名称是什么。不过,您可以将其作为参数传递。

您的第二个示例不起作用,因为您在获得日期后没有做任何事情。您无需先将日期添加到文档中即可立即编写文档。此外,您只返回当天,而不是整个日期。

我已经编写了一个快速的小程序,应该可以满足您的要求:

public class Bill {

    public static void writeDate(XWPFDocument document) {

        SimpleDateFormat sdf = new SimpleDateFormat("dd-M-yyyy         hh:mm:ss");
        String date = sdf.format(new Date()); 

        XWPFParagraph paragraph = document.createParagraph();
        XWPFRun run = paragraph.createRun();
        run.setText(date);
    }

    public static void main(String[] args) throws Exception {

        XWPFDocument document = new XWPFDocument();
        writeDate(document);
        FileOutputStream out = new FileOutputStream("createparagraph.docx");
        document.write(out);
        out.close();
    }
}

一些事情。
我冒昧地使用了一个 Date() 对象,尽管你所做的是可行的。

按照惯例,我们在 Java 中将 class 个名字大写。 即

  public class bill {  

应该是

  public class Bill {  

按照惯例,方法名称应简洁地描述其用途。您的 date() 方法名称并没有说明正在发生的事情。

如果其中任何一个没有意义,请告诉我。