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