编写一个计算机程序,用于判断输入字符串是否为命题公式。(提示:自己确定联结词如何输入和输出) 要求: 1、提交源码或者可执行程序;Java
时间: 2024-10-27 12:10:52 浏览: 12
编写一个简单的Java程序来判断输入字符串是否为有效的命题公式,通常会涉及到解析二元逻辑运算符如"&&", "||", "!"; 这里我们假设输入的是标准的布尔表达式形式,例如 "A && B || !C"。由于这是文本处理和正则表达式的任务,我们将使用`java.util.regex.Pattern`来进行匹配。
```java
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class FormulaChecker {
private static final String[] LOGICAL_OPERATORS = {"!", "&&", "||"};
private static final Pattern formulaPattern = Pattern.compile(
"^(<[^>]*>)|^(\\w+)(\\s*(" + String.join("|", LOGICAL_OPERATORS) + "\\s*)*)$");
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个命题公式(仅支持字母、数字和逻辑运算符):");
String input = scanner.nextLine();
if (isValidFormula(input)) {
System.out.println("这是一个有效的命题公式.");
} else {
System.out.println("这不是一个有效的命题公式.");
}
}
private static boolean isValidFormula(String formula) {
Matcher matcher = formulaPattern.matcher(formula);
return matcher.matches() && isWellFormed(matcher.group());
}
private static boolean isWellFormed(String formulaPart) {
// 实现更复杂的检查逻辑,这里只做基本验证,比如公式不能以运算符开头或结尾
if (!formulaPart.contains("<") && !formulaPart.endsWith(">")) {
for (String operator : LOGICAL_OPERATORS) {
if (formulaPart.startsWith(operator) || formulaPart.endsWith(operator)) {
return false;
}
}
}
return true;
}
}
阅读全文