public static void main(String[] args) { Scanner scan = new Scanner(System.in); int num=scan.nextInt(); String[] rules=new String[num]; for(int i=0;i<num;i++) rules[i]=scan.next(); String strin = scan.next(); ArrayList<String> product = new ArrayList<String>(); for(int i=0; i<rules.length; i++) { char[] reg = rules[i].toCharArray(); for(int j=0; j<reg.length; j++) { if(reg[j] >= 'A' && reg[j]<= 'Z'); else { if(!product.contains(reg[j]+"")) product.add(reg[j]+""); } } } Main m = new Main(); ArrayList<String> rule = m.getMostLeft(rules, strin); rule.add(0,rules[0]); String left = new String(); for(int i=0; i<rule.size()-1; i++) { int flag = 0; String right = new String(); if(i == 0) { System.out.print(rules[0].charAt(0)+"=>"); for(int j=3; j<rules[0].length(); j++) left += rules[0].charAt(j); System.out.print(left); } System.out.print("=>"); for(int j = 0; j < left.length(); j++) { if(left.charAt(j) == rule.get(i+1).charAt(0) && flag == 0){ if(rule.get(i+1).charAt(3) == '@') { flag = 1; continue; } for(int z = 3; z < rule.get(i+1).length(); z++) right += rule.get(i+1).charAt(z); flag = 1; } else right += left.charAt(j); } left = right; System.out.print(right); } }解释一下
时间: 2024-02-14 18:33:54 浏览: 74
这是一个Java程序的main方法,它接受用户输入的一些规则和一个字符串,然后根据这些规则将字符串推导到最左侧。具体来说,程序首先从控制台读取一个整数num,表示规则的数量,然后读取num个字符串,表示所有的规则。接着,程序读取一个字符串strin,表示要进行推导的输入串。
程序接下来的操作是将所有规则中出现的终结符号收集起来,存储在一个ArrayList<String>对象product中。然后程序调用Main类的getMostLeft方法,找到最左侧的推导规则,并存储在一个ArrayList<String>对象rule中。最后,程序根据规则和输入串进行推导,将推导过程输出到控制台上。
具体来说,程序首先将起始符号输出,然后将起始符号的产生式中的非终结符号保存到left变量中。接着,程序逐步推导输入串,每次将推导结果输出到控制台上。在推导过程中,程序遍历left中的每个字符,如果遇到了一个与当前推导规则匹配的非终结符号,就将其展开为相应的产生式,并将结果保存到right变量中。最后将left变量更新为right变量,继续下一轮推导过程。程序输出的结果是一个完整的推导序列,从起始符号到最终推导结果。
相关问题
public class test1 { public static void main(String[] args) { Scanner scan=new Scanner(System.in); System.out.print("请输入学生的人数:"); int num=scan.nextInt(); int score[]=new int[num]; System.out.print("请输入"+num+"个学生的成绩:"); for (int i = 0; i < num.length; i++) { score[i]=scan.nextInt(); } } }错在哪里了
在这段代码中,`num`是一个`int`类型的变量,不是一个数组,所以不能使用`num.length`的方式获取其长度。应该改为使用`score.length`获取数组的长度。
正确的代码应该是这样的:
```java
public class test1 {
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
System.out.print("请输入学生的人数:");
int num=scan.nextInt();
int score[]=new int[num];
System.out.print("请输入"+num+"个学生的成绩:");
for (int i = 0; i < score.length; i++) {
score[i]=scan.nextInt();
}
}
}
```
这样就能正确编译和运行了。
public class Demo61 { public static void main(String[] args) { Scanner scan = new Scanner(System.in); System.out.print("请输入一个整数:"); int n = scan.nextInt(); for(int i=1;i<n;i++);{ if (n%i == 0) { System.out.println(i); } System.out.println("它的因子是:"); } }哪里有错
代码中有两个错误:
1. 代码中的for循环语句多了一个分号,应该去掉分号。因为加上分号会使for循环中的语句只执行一次,不符合我们的预期。
2. 在for循环内部输出 "它的因子是:" 的语句位置不正确,应该放在for循环结束后输出。
以下是修改后的代码:
```java
public class Demo61 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.print("请输入一个整数:");
int n = scan.nextInt();
System.out.println("它的因子是:"); // 将输出语句移到for循环外部
for(int i=1;i<n;i++){ // 去掉多余的分号
if (n%i == 0) {
System.out.println(i);
}
}
}
}
```