ขอถามหน่อยครับ งง โค้ดนิดหน่อยครับ (JAVA)

กระทู้คำถาม
import java.util.InputMismatchException;
import java.util.Scanner;
import java.util.regex.Pattern;

public class Quiz {

    public static void main(String[] args) {
        
        Scanner sc = new Scanner(System.in);
        String str = " ";
        int x,y;
        boolean check = false;    // ตรวจสอบสมการว่า เป็นจริงหรือไม่
            
        do{    System.out.print("Calculate = "); // ให้โปรแกรม แสดงคำว่า calculate ก่อน
        str = sc.next(); // รับค่าทางคีร์บอร์ด
        
        try {                                                  //ใช้คำสั่ง tryเพื่อเป็นการรันโปรแกรมเข้าขั้นที่ 1
            str = str.replace(" ", "");                         // รับค่าตัวเลข 2 ตัว
            if(!Pattern.matches("\\d+[+-/*/]{1}\\d+", str)) {  
                throw new Exception(); //เป็นคำสั่งทำให้โปรแกรมทำงานได้ต่อไป
            }
            else {
                if(str.contains("+")) //ถ้าใส่ +
                {
                    String a[] = str.split("\\+"); //รับค่า String เก็บไว้ใน Array a โดยกำหนด เครื่องหมายเป็น +
                    x = Integer.parseInt(a[0]); // ใส่ค่า integer ไว้ใน x แล้วเก็บเข้าไว้ใน Array aตำแหน่งที่ 0
                    y = Integer.parseInt(a[1]); // ใส่ค่า integer ไว้ใน y แล้วเก็บเข้าไว้ใน Array aตำแหน่งที่ 1
                    System.out.println("Answer = " + (x+y)); //ปริ้นค่าออกทางหน้าจอ โดยสมการ x+y
                    check = true; //เช็คสมการว่าเป็นจริงหรือไม่
                }
                else if(str.contains("-")) //ถ้าใส่ -
                {
                    String a[] = str.split("\\-"); //รับค่า String เก็บไว้ใน Array a โดยกำหนด เครื่องหมายเป็น -
                    x = Integer.parseInt(a[0]); // ใส่ค่า integer ไว้ใน x แล้วเก็บเข้าไว้ใน Array aตำแหน่งที่ 0
                    y = Integer.parseInt(a[1]); // ใส่ค่า integer ไว้ใน y แล้วเก็บเข้าไว้ใน Array aตำแหน่งที่ 1
                    System.out.println("Answer = " + (x-y)); //ปริ้นค่าออกทางหน้าจอ โดยสมการ x-y
                    check = true; //เช็คสมการว่าเป็นจริงหรือไม่
                    
                }
                else if(str.contains("*"))   //ถ้าใส่ *
                {
                    String a[] = str.split("\\*"); //รับค่า String เก็บไว้ใน Array a โดยกำหนด เครื่องหมายเป็น *
                    x = Integer.parseInt(a[0]); // ใส่ค่า integer ไว้ใน x แล้วเก็บเข้าไว้ใน Array aตำแหน่งที่ 0
                    y = Integer.parseInt(a[1]); // ใส่ค่า integer ไว้ใน y แล้วเก็บเข้าไว้ใน Array aตำแหน่งที่ 1
                    System.out.println("Answer = " + (x*y)); //ปริ้นค่าออกทางหน้าจอ โดยสมการ x*y
                    check = true; //เช็คสมการว่าเป็นจริงหรือไม่
                    
                }
                
                else if(str.contains("/"))   //ถ้าใส่ / หาร
            
                    {
                    
                    String a[] = str.split("\\/"); //รับค่า String เก็บไว้ใน Array a โดยกำหนด เครื่องหมายเป็น /
                    x = Integer.parseInt(a[0]); // ใส่ค่า integer ไว้ใน x แล้วเก็บเข้าไว้ใน Array aตำแหน่งที่ 0
                    y = Integer.parseInt(a[1]); // ใส่ค่า integer ไว้ใน y แล้วเก็บเข้าไว้ใน Array aตำแหน่งที่ 1
                    System.out.println("Answer = " + (x/y)); //ปริ้นค่าออกทางหน้าจอ โดยสมการ x/y
                    
                    check = true; //เช็คสมการว่าเป็นจริงหรือไม่
                    }    
                else {    
                
                check = false; //For exit Loop
                }    
            }
        }
        catch(ArithmeticException e) // กำหนด catch คือถ้า สมการใน try ผิดทั้งหมด จะมาลงในนี้
        {
            System.out.println("Cannot divide by Zero"); //ปริ้นข้อความทางหน้าจอ ว่า / แล้ว =0
        }
        catch(Exception e) { // กำหนด catch คือถ้า สมการใน try ผิดทั้งหมด จะมาลงในนี้ ถ้า ผิดพลาดนอกจาก /=0
            if(!str.contains("+")&&!str.contains("-")&&!str.contains("/")&&!str.contains("*")) //ถ้าไม่ได้ใส่เครื่องหมาย + - / *
            {
                System.out.println("Cannot find Operator"); // ปริ้นข้อความว่า ไม่พบ เครื่องหมาย
            }
            else if(str.matches("[a-zA-Z][+-/*/]{1}[a-zA-Z_0-9]")||str.matches("[a-zA-Z_0-9][+-/*/]{1}[a-zA-Z_0-9]")){ //กำหนดว่า ถ้าเราใส่ ตัวอักษรแทน
                System.out.println("Operand must be numeric"); // ปริ้นข้อความว่าคุณไม่ได้ใส่ตัวเลข แต่ใส่ตัวอักษรแทนเช่น 5+x
            }
            else if(!str.matches("\\d[+-/*/]{1}\\d")){         //ถ้าไม่ได้ใส่เครื่องหมาย + - * / หรือ ตัวเลข และ ตัวอักษร        
                String st[] = str.split("[a-zA-Z_0-9]"); //รับค่าทางคีร์บอร์ด
                if(st.length>=2){ //ตรวจตัวอักษรตัวที่มากกว่า หรือเท่ากับ 2 อาจจะ 2-3เช่น 5 + x +คือตำแหน่งที่ 2 และ 5คือตำแหน่งที่ 3
                    System.out.println("Operator must have 1"); // บอกว่าเราใส่ค่าทางคีร์บอร์ดผิด
                }
                else{ // นอกจากสมาการที่กล่าวมา
                    System.out.println("Pattern is error"); // ปริ้นข้อความ error
                }
            }
        }    
            
        }while(!check); //เช็คจบลูบ
    }
}

คือว่าเวลารับแล้ว รันได้ปกติครับ แต่ใส่ 456+ ไม่อยากให้มันแสดงผลว่า มี โอเปอร์เลเตอร์มากกว่า1ครับ  แต่ผมอยากให้ มันขึ้นว่า แพทเทินเออเล๋อ แบบตอนที่ใส่แบบนี้เช่น +546   ทำอย่างไรใครรู้บอกทีครับ
แสดงความคิดเห็น
โปรดศึกษาและยอมรับนโยบายข้อมูลส่วนบุคคลก่อนเริ่มใช้งาน อ่านเพิ่มเติมได้ที่นี่