编写一个计算机程序,用于判断输入字符串是否为命题公式。(提示:自己确定联结词如何输入和输出) 要求: 1、提交源码或者可执行程序;离散数学Java
时间: 2024-10-27 12:11:08 浏览: 5
编写一个简单的Java程序来判断输入的字符串是否代表一个有效的命题公式,通常我们会处理布尔代数中的基本操作符如"AND"(&&)、"OR"(||)、"NOT"(!),以及圆括号表示优先级。这里是一个简化版的例子,它只考虑了最基础的逻辑表达式结构,并假设输入的字符串仅包含这些字符:
```java
import java.util.Scanner;
public class PropositionalFormulaChecker {
public static boolean isWellFormed(String formula) {
// 定义常量和正则表达式
final String[] validChars = {"(", ")", "!", "&&", "||"};
String regex = "(?:" + String.join("|", validChars) + "+)";
// 检查是否只包含有效字符
if (!formula.matches(regex)) {
return false;
}
// 使用栈来检查左括号是否有对应的右括号
Stack<Character> stack = new Stack<>();
for (char c : formula.toCharArray()) {
if (c == '(') {
stack.push(c);
} else if (c == ')') {
if (stack.isEmpty() || stack.pop() != '(') {
return false;
}
}
}
// 如果栈为空,说明所有括号都配对了
return stack.isEmpty();
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个命题公式(仅支持('(', ')', '!', '&&', '||')):");
String input = scanner.nextLine();
if (isWellFormed(input)) {
System.out.println("输入的字符串是一个有效的命题公式.");
} else {
System.out.println("输入的字符串不是一个有效的命题公式.");
}
}
}
阅读全文