gpt4 book ai didi

Java 符号对程序

转载 作者:行者123 更新时间:2023-12-01 05:30:34 25 4
gpt4 key购买 nike

使用堆栈数据结构:如果输入文件不平衡,将提供不平衡原因和文件内本地化详细信息。出于灵 active 原因,请从文本文件中读取平衡符号对。通过考虑以下符号对来测试您的程序:( )、{ }、[ ]、/* */

我在最后一个要求方面遇到了麻烦:/* */

我似乎也无法掌握如何打印文件内本地化详细信息?即错误发生在文本文件的哪一行?

文本文件如下所示:

(()(()
{}}}{}{
[[[]][][]
((}})){{]
()
[]
{}
[]{}
()()()[]
*/ /*
(a+b) = c

代码:

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;


public class P1 {

private boolean match = true;

// The stack
private java.util.Stack<Character> matchStack = new java.util.Stack<Character>();

// What to do with a match
public boolean ismatch() {
return match && matchStack.isEmpty();
}

// Finding a match
public void add(char c) {
Character k = leftSide(c);

if (k == null)
;
else if (k.charValue() == c)
matchStack.push(k);
else {
if (matchStack.isEmpty() || !matchStack.pop().equals(k))
match = false;
}
}

// Add string values
public void add(String s) {
for (int i = 0; i < s.length(); i++)
add(s.charAt(i));
}

// The various symbol pairs
protected static Character leftSide(char c) {
switch (c) {
case '(':
case ')':
return new Character('(');
case '[':
case ']':
return new Character('[');
case '{':
case '}':
return new Character('{');
default:
return null;
}
}

// Main method. Welcome message, read the test file, build the array, print
// results.
public static void main(String args[]) {

List<String[]> arrays = new ArrayList<String[]>();

// Welcome message
System.out
.println("Project #1\n"
+ "Welcome! The following program ensures both elements of various paired symbols are present.\n"
+ "Test Data will appear below: \n"
+ "-------------------------------");

// Read the file
try {
BufferedReader in = new BufferedReader(new FileReader(
"testfile.txt"));
String str;

// Keep reading while there is still more data
while ((str = in.readLine()) != null) {

// Line by line read & add to array
String arr[] = str.split(" ");
if (arr.length > 0)
arrays.add(arr);

// Let the user know the match status (i.e. print the results)
P1 mp = new P1();
mp.add(str);

System.out.print(mp.ismatch() ? "\nSuccessful Match:\n"
: "\nThis match is not complete:\n");
System.out.println(str);
}
in.close();
// Catch exceptions
} catch (FileNotFoundException e) {
System.out
.println("We're sorry, we are unable to find that file: \n"
+ e.getMessage());
} catch (IOException e) {
System.out
.println("We're sorry, we are unable to read that file: \n"
+ e.getMessage());
}

}

}

最佳答案

实现此目的的一个简单方法是使用堆栈映射,例如 Map<String, Stack<Location>> ,其中Location是您创建的一个包含两个 int 的类s(行号和字符号)。这可以是您的位置信息。这张 map 的关键( String )将是你对的左侧(开局)部分。每次你有一个开场白时,你都会查找合适的 Stack在 map 上并推送新的Location就它的揭幕战。每次遇到接近者时,您都会查找其开启器,使用开启器查找正确的 Stack在 map 中,然后将其弹出一次。我之所以说使用String你的 key 是因为并不是所有的开瓶器都可以用 Character 来表示即您的/*揭幕战,所以一个String将不得不做。因为您无法为您的 leftSide(char) 打开字符串(现在将是 leftSide(String) )函数,您必须使用 if-else或使用 map ( Map<String, String> ) 创建更接近开场的映射。

当到达文件末尾时,唯一的Location Stack 中剩余的对象对象应该是未关闭的开启器。

关于Java 符号对程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9057737/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com