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 ทำอย่างไรใครรู้บอกทีครับ
ขอถามหน่อยครับ งง โค้ดนิดหน่อยครับ (JAVA)
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 ทำอย่างไรใครรู้บอกทีครับ