Java堆栈应用程序

Java堆栈应用程序,java,stack,Java,Stack,我遇到了一个Java问题,它涉及到读取文本文件并检查它是否正确平衡了大括号、方括号和括号-“{'、”}'、“['、”]'、“(”和“)” 我在读取文件时没有问题,但现在我应该使用一个名为DelimPos的数据成员来保留行和字符,只要我在读取文件时找到一个分隔符,然后将其放入堆栈中。然后我应该遍历堆栈并打印出任何错误(例如,像“{[}”这样的不平衡分隔符) 每当我试图在main方法中创建一个新的DelimPos d=newdelimpos(x,y)时,它都会给我这个错误 无法访问BalancedA

我遇到了一个Java问题,它涉及到读取文本文件并检查它是否正确平衡了大括号、方括号和括号-“{'、”}'、“['、”]'、“(”和“)”

我在读取文件时没有问题,但现在我应该使用一个名为DelimPos的数据成员来保留行和字符,只要我在读取文件时找到一个分隔符,然后将其放入
堆栈中。然后我应该遍历堆栈并打印出任何错误(例如,像“{[}”这样的不平衡分隔符)

每当我试图在main方法中创建一个新的
DelimPos d=newdelimpos(x,y)
时,它都会给我这个错误

无法访问BalancedApp类型的封闭实例。必须符合条件 带有BalancedApp类型的封闭实例的分配(例如。 x、 新的A(),其中x是BalancedApp的实例)

我不确定在这个程序中使用DelimPos的最佳方式是什么

任何帮助都将不胜感激

这是我的密码:

import java.util.Stack;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;
import java.io.BufferedReader;



public class BalancedApp {

Stack<DelimPos> s = new Stack<DelimPos>();
public class DelimPos
{
    private int linecnt;
    private char ch;

    public DelimPos(int lineCount, char character)
    {
        linecnt = lineCount;
        ch = character;

    }

    public char getCharacter()
    {
        return  ch;
    }

    public int getLineCount()
    {
        return linecnt;
    }

}





public static void main(String args[]) {


    int lineCount = 1;


    Scanner sc = new Scanner(System.in);
    System.out.print("Enter a file name: ");
    String inputFile = sc.next();


    try{
        BufferedReader reader = new BufferedReader(new FileReader(inputFile));
        int text;

        System.out.print(lineCount + ". ");


        while((text = reader.read()) != -1)
        {
            char character = (char) text;
            if(character == '\n')
            {
                System.out.print(character);
                lineCount++;
                System.out.print(lineCount + ". ");

            }
            else System.out.print(character);

            DelimPos d = new DelimPos(lineCount, character);

        }
    }
    catch(IOException e){
        System.out.println("File Not Found");
    }


}


}
import java.util.Stack;
导入java.io.FileReader;
导入java.io.IOException;
导入java.util.Scanner;
导入java.io.BufferedReader;
公共类平衡{
堆栈s=新堆栈();
公共类DelimPos
{
私人国际线路;
私家车;
公共DelimPos(整数行数,字符)
{
linecnt=行数;
ch=字符;
}
公共字符getCharacter()
{
返回ch;
}
public int getLineCount()
{
回流管;
}
}
公共静态void main(字符串参数[]){
int lineCount=1;
扫描仪sc=新的扫描仪(System.in);
System.out.print(“输入文件名:”);
字符串inputFile=sc.next();
试一试{
BufferedReader reader=新BufferedReader(新文件读取器(inputFile));
int文本;
系统输出打印(行数+”);
而((text=reader.read())!=-1)
{
字符=(字符)文本;
如果(字符=='\n')
{
系统输出打印(字符);
lineCount++;
系统输出打印(行数+”);
}
else系统输出打印(字符);
DelimPos d=新的DelimPos(行数,字符);
}
}
捕获(IOE异常){
System.out.println(“未找到文件”);
}
}
}

您已经在类
BalancedApp
中定义了
DelimPos
和main,因此正如错误所说,您需要一个
BalancedApp
的实例来实例化
DelimPos
。对内部类有更好的解释

但是,看看代码,我认为您根本不需要
BalancedApp
。我会删除它并将您的main放入
DelimPos
中,将堆栈放入main中。类似这样:

import java.util.Stack;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;
import java.io.BufferedReader;

public class DelimPos
{
private int linecnt;
private char ch;

public DelimPos(int lineCount, char character)
{
    linecnt = lineCount;
    ch = character;

}

public char getCharacter()
{
    return  ch;
}

public int getLineCount()
{
    return linecnt;
}




public static void main(String args[]) {
    Stack<DelimPos> s = new Stack<DelimPos>();


    int lineCount = 1;


    Scanner sc = new Scanner(System.in);
    System.out.print("Enter a file name: ");
    String inputFile = sc.next();


    try{
        BufferedReader reader = new BufferedReader(new FileReader(inputFile));
        int text;

        System.out.print(lineCount + ". ");


        while((text = reader.read()) != -1)
        {
            char character = (char) text;
            if(character == '\n')
            {
                System.out.print(character);
                lineCount++;
                System.out.print(lineCount + ". ");

            }
            else System.out.print(character);

            DelimPos d = new DelimPos(lineCount, character);

        }
    }
    catch(IOException e){
        System.out.println("File Not Found");
    }


}


}
import java.util.Stack;
导入java.io.FileReader;
导入java.io.IOException;
导入java.util.Scanner;
导入java.io.BufferedReader;
公共类DelimPos
{
私人国际线路;
私家车;
公共DelimPos(整数行数,字符)
{
linecnt=行数;
ch=字符;
}
公共字符getCharacter()
{
返回ch;
}
public int getLineCount()
{
回流管;
}
公共静态void main(字符串参数[]){
堆栈s=新堆栈();
int lineCount=1;
扫描仪sc=新的扫描仪(System.in);
System.out.print(“输入文件名:”);
字符串inputFile=sc.next();
试一试{
BufferedReader reader=新BufferedReader(新文件读取器(inputFile));
int文本;
系统输出打印(行数+”);
而((text=reader.read())!=-1)
{
字符=(字符)文本;
如果(字符=='\n')
{
系统输出打印(字符);
lineCount++;
系统输出打印(行数+”);
}
else系统输出打印(字符);
DelimPos d=新的DelimPos(行数,字符);
}
}
捕获(IOE异常){
System.out.println(“未找到文件”);
}
}
}

在您的情况下,应该将类定义为静态类

public static class DelimPos
试试这个

new BalancedApp.DelimPos(lineCount, character);

但是我建议您使用单独的数据类型实现,而不是将其用作内部类。

这应该是
newbalancedapp()。new DelimPos(lineCount,character);
可能的重复数据类型