这一题为什么会现实编译错误?


import java.util.Scanner;
public class Main {
        public static void main(String[] args){
            Scanner sc=new Scanner(System.in);
            String s=sc.next();
            int index=s.indexOf(" ");//调用String类里面的API,返回第一个该符号的下标,找出第一个空格出现的地方以便分割字符串;
            String s1=s.substring(0,index);//substring分割字符串,返回值为(0,index-1);
            String s2=s.substring(index+1);
            int flag1=0;//判断第一个字符串的标记
            for (int i = s1.length();i>=0;--i){//进行for循环一个一个判断
                if (!Character.isDigit(s1.charAt(i))){//判断是否为正整数,如果不是标记为1,下同
                    flag1=1;
                    break;
                }
            }
            int a=0,b=0;
            if(flag1==0)//如果标记为0,说明该字符串为数字,然后把字符串转化为数字
                 a=Integer.parseInt(s1);
            }
            int flag2=0;
            for (int i = s2.length();i>=0;--i){
                if (!Character.isDigit(s2.charAt(i))){
                    flag2=1;
                }
            }
            if(flag2==0){//如果标记为0,说明该字符串为数字,然后把字符串转化为数字
                 b=Integer.parseInt(s2);
            }
            if(flag1==0&&flag2==0)
            System.out.println(a+" + "+b+" = "+(a+b));
            if(flag1==1&&flag2==1)
                System.out.println("? + ? = ?");
            if(flag1==1&&flag2==0)
                System.out.println(a+" + ? = ?");
            if(flag1==0&&flag2==0)
                System.out.println("? + "+a+"= ?");
        }
    }

img


https://pintia.cn/problem-sets/994805046380707840/problems/994805110318678016

  1. 11 22行 访问下标越界
  2. 18行没有 {
  3. 35 36 37 行输出错误
            Scanner sc=new Scanner(System.in);
            String s=sc.nextLine();
            int index=s.indexOf(" ");
            String s1=s.substring(0,index);
            String s2=s.substring(index+1);
            int flag1=0;
            for (int i = s1.length()-1;i>=0;--i){
                if (!Character.isDigit(s1.charAt(i))){
                    flag1=1;
                    break;
                }
            }
            int a=0,b=0;
            if(flag1==0){
                a=Integer.parseInt(s1);
            }
            int flag2=0;
            for (int i = s2.length()-1;i>=0;--i){
                if (!Character.isDigit(s2.charAt(i))){
                    flag2=1;
                }
            }
            if(flag2==0){
                b=Integer.parseInt(s2);
            }
            if(flag1==0&&flag2==0)
                System.out.println(a+" + "+b+" = "+(a+b));
            if(flag1==1&&flag2==1)
                System.out.println("? + ? = ?");
            if(flag1==1&&flag2==0)
                System.out.println("? + "+b+" = ?");
            if(flag1==0&&flag2==1)
                System.out.println(a+" + ?= ?");
        }

img


另外
String的split()能通过指定分隔符裁剪字符串,返回String数组

18行 if 语句没得{}
30行开始 那几个也没得

多个大括号

img