Java 表达式字符串的开头非法

Java 表达式字符串的开头非法,java,Java,我正在尝试制作一个程序来反转文件中的文本行。我仍在学习java,对此我是新手。我的程序出错了,因为我在循环内部创建了一个变量,并试图在外部访问它。在声明字符串变量之前,我尝试添加preffix“public”,但当我尝试编译它时,它指向“public”,并表示表达式的开头非法。有人能告诉我为什么这是错误的,或如何修复它 import java.io.*; import java.util.*; public class FileReverser { p

我正在尝试制作一个程序来反转文件中的文本行。我仍在学习java,对此我是新手。我的程序出错了,因为我在循环内部创建了一个变量,并试图在外部访问它。在声明字符串变量之前,我尝试添加preffix“public”,但当我尝试编译它时,它指向“public”,并表示表达式的开头非法。有人能告诉我为什么这是错误的,或如何修复它

    import java.io.*;
    import java.util.*;

    public class FileReverser
    {
     public static void main(String[] args)
     throws FileNotFoundException
{
    Scanner console = new Scanner(System.in);
    System.out.print("File to Reverse: ");
    String inputFileName = console.next();

    System.out.print("Output File: ");
    String outputFileName = console.next();

    FileReader reader = new FileReader(inputFileName);
    Scanner in = new Scanner(reader);
    PrintWriter out = new PrintWriter(outputFileName);

    int number = 0;

    while (in.hasNextLine())
    {
        String line = in.nextLine();
        public String[] lines;
        lines[number] = line;
        number++;
    }
    int subtract = 0;
    for (int i;i>lines.length;i++)
    {
        out.println(lines[(lines.length-subtract)]);
        subtract++;
    }

    out.close();

    }
    }

这是一个范围问题<代码>行应该在while循环之外声明。通过在while循环中放置
,它仅在该循环中可用。如果将其移到外部,
行的范围将在main方法中

变量的作用域是程序中可以访问变量的部分

这是伯克利一堂课上关于变量和范围的课堂讲稿。如果你有时间的话,读一读。 问题:

  • 您正在使用
    public
    修饰符声明
    ,该修饰符仅用于实例/静态变量,而不是局部变量
  • 您从未初始化
  • 您试图在其范围之外使用
    (当前是
    while
    循环)
  • 您试图在不初始化的情况下使用
    i
    ,此处:

    for (int i;i>lines.length;i++)
    
  • 如果
条件是错误的,那么您的
;当
i
小于
行时,您可能希望继续。长度
  • subtract
    最初为0,因此访问
    行[lines.length-subtract]
    将引发异常(因为它在数组的边界之外)
  • 您可以使用以下代码修复这些问题:

    // See note later
    String[] lines = new String[1000];
    
    while (in.hasNextLine()) {
        String line = in.nextLine();
        lines[number] = line;
        number++;
    }
    // Get rid of subtract entirely... and only start off at "number"
    // rather than lines.length, as there'll be a bunch of null elements
    for (int i = number - 1; i >= 0; i--) {
        out.println(lines[i]);
    }
    
    现在,这将适用于多达1000行,但这是一个痛苦的限制。最好只使用
    列表

    List line=new ArrayList();
    while(在.hasNextLine()中){
    line.add(in.nextLine());
    }
    
    然后您需要使用
    size()
    而不是
    length
    ,并使用
    get
    而不是数组索引器来访问这些值-但在我看来,这会更干净。

    访问修饰符(
    public
    private
    protected
    )仅适用于类成员(方法或字段)

    如果要访问受
    {
    }
    限制的范围之外的变量,这意味着您在错误的范围内定义了变量。例如,如果在内部定义了循环和变量
    x
    ,然后希望在循环外部使用它:

    for (int i = 0; i < 10; i++) {
        .....
        int x = 6;
        .....
    }
    
    int y = x; // compilation error
    
    int x = 0;
    for (int i = 0; i < 10; i++) {
        .....
        x = 6;
        .....
    }
    
    int y = x; // not variable is available here
    
    for(int i=0;i<10;i++){
    .....
    int x=6;
    .....
    }
    int y=x;//编译错误
    
    。。。实际上,您希望在循环之前定义此变量:

    for (int i = 0; i < 10; i++) {
        .....
        int x = 6;
        .....
    }
    
    int y = x; // compilation error
    
    int x = 0;
    for (int i = 0; i < 10; i++) {
        .....
        x = 6;
        .....
    }
    
    int y = x; // not variable is available here
    
    intx=0;
    对于(int i=0;i<10;i++){
    .....
    x=6;
    .....
    }
    int y=x;//此处没有可用的变量
    
    首先要修复的是缩进。正确缩进的代码使一切都更容易理解。各位,请不要对此投反对票。。。他有一个真正的问题,如果其他人偶然发现这个问题,我们可以避免类似的问题。@AnanthaSharma nice thinking希望其他用户也像你一样思考。