Hôm nay sẽ hướng dẫn làm bài tập Xử Lý Chuỗi Nhập Trên Máy Tính Android
Tạo giao diện như sau:
khởi tạo:
EditText edt_input; String output="";
Viết hàm khi ấn vào các button như 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ., +, -, *, / thì gán vào chuỗi output đã khởi tạo bên trên. và khi ấn vào button delete thì xóa kí tự cuối cùng, khi ấn vào button = thì xử lý chuỗi nhập và đưa kết quả vào edt_input xuất ra màn hình. Code như sau:
public void btnClick(View v) { edt_input=(EditText)findViewById(R.id.edt_input); output=edt_input.getText().toString(); switch (v.getId()) { case R.id.btnNumber0: output+="0"; edt_input.setText(output); break; case R.id.btnNumber1: output+="1"; edt_input.setText(output); break; case R.id.btnNumber2: output+="2"; edt_input.setText(output); break; case R.id.btnNumber3: output+="3"; edt_input.setText(output); break; case R.id.btnNumber4: output+="4"; edt_input.setText(output); break; case R.id.btnNumber5: output+="5"; edt_input.setText(output); break; case R.id.btnNumber6: output+="6"; edt_input.setText(output); break; case R.id.btnNumber7: output+="7"; edt_input.setText(output); break; case R.id.btnNumber8: output+="8"; edt_input.setText(output); break; case R.id.btnNumber9: output+="9"; edt_input.setText(output); break; //--------------- case R.id.btnCong: output+="+"; edt_input.setText(output); break; case R.id.btnTru: output+="-"; edt_input.setText(output); break; case R.id.btnNhan: output+="x"; edt_input.setText(output); break; case R.id.btnChia: output+="/"; edt_input.setText(output); break; //--------------- case R.id.btnDelete: output=output.substring(0, output.length()-1); edt_input.setText(output); break; case R.id.btnmongoac: output+="("; break; //---------------- case R.id.btndongngoac: output+=")"; break; case R.id.btnCham: output+="."; edt_input.setText(output); break; case R.id.btnBang: { XuLyNhanChia(output); DungNhanChia = false; DungCongTru = false; break; } default: break; } }
Tiếp theo ta xử lý chuỗi nhập:
+ Xử lý nhân chia trước:
Boolean DungNhanChia = false; void XuLyNhanChia(String b) { String kq = ""; char[] a = b.toCharArray(); for (int i = 0; i < a.length; i++) { if (a[i] == 'x') { String s1 = ""; String s2 = ""; int vt1 = 0, vt2 = 0; String chuoiconlai = ""; for (int j = i - 1; j >= 0; j--) { if (a[j] != 'x' && a[j] != '/' && a[j] != '+' && a[j] != '-') { s1 += a[j]; } else if (a[j] == 'x' || a[j] == '/' || a[j] == '+' || a[j] == '-') { vt1 = j + 1; break; } } char[] dao = s1.toCharArray(); s1 = ""; for (int h = dao.length - 1; h >= 0; h--) { s1 += dao[h]; } for (int k = i + 1; k < a.length; k++) { if (a[k] != 'x' && a[k] != '/' && a[k] != '+' && a[k] != '-') { s2 += a[k]; } else if (a[k] == 'x' || a[k] == '/' || a[k] == '+' || a[k] == '-') { vt2 = k - 1; break; } if (k + 1 == a.length) vt2 = a.length; } if (s1 != "" && s2 != "") { Double s11 = Double.valueOf(s1); Double s22 = Double.valueOf(s2); kq = (s11*s22) + ""; } for (int h = 0; h < a.length; h++) { if (h < vt1) chuoiconlai += a[h]; if (h == vt1) { chuoiconlai += kq; } if (h > vt2) { chuoiconlai += a[h]; } } b = chuoiconlai; XuLyNhanChia(b); } else if (a[i] == '/') { String s1 = ""; String s2 = ""; int vt1 = 0, vt2 = 0; String chuoiconlai = ""; for (int j = i - 1; j >= 0; j--) { if (a[j] != 'x' && a[j] != '/' && a[j] != '+' && a[j] != '-') { s1 += a[j]; } else if (a[j] == 'x' || a[j] == '/' || a[j] == '+' || a[j] == '-') { vt1 = j + 1; break; } } char[] dao = s1.toCharArray(); s1 = ""; for (int h = dao.length - 1; h >= 0; h--) { s1 += dao[h]; } for (int k = i + 1; k < a.length; k++) { if (a[k] != 'x' && a[k] != '/' && a[k] != '+' && a[k] != '-') { s2 += a[k]; } else if (a[k] == 'x' || a[k] == '/' || a[k] == '+' || a[k] == '-') { vt2 = k - 1; break; } if (k + 1 == a.length) vt2 = a.length; } if (s1 != "" && s2 != "") { Double s11 = Double.valueOf(s1); Double s22 = Double.valueOf(s2); kq = (s11/s22) + ""; } for (int h = 0; h < a.length; h++) { if (h < vt1) chuoiconlai += a[h]; if (h == vt1) { chuoiconlai += kq; } if (h > vt2) { chuoiconlai += a[h]; } } b = chuoiconlai; XuLyNhanChia(b); } } if (DungNhanChia == false) { XuLyCongTru(b); DungNhanChia = true; } }
+ Sau khi xử lý nhân chia xong, ta lấy chuỗi đã xử lý xong đưa vào hàm xử lý cộng trừ và xuất ra màn hình, code như sau:
Boolean DungCongTru = false; void XuLyCongTru(String b) { String kq = ""; char[] a = b.toCharArray(); for (int i = 0; i < a.length; i++) { if (a[0] != '-') { if (a[i] == '+') { String s1 = ""; String s2 = ""; int vt1 = 0, vt2 = 0; String chuoiconlai = ""; for (int j = i - 1; j >= 0; j--) { if (a[j] != '*' && a[j] != '/' && a[j] != '+' && a[j] != '-') { s1 += a[j]; } else if (a[j] == '*' || a[j] == '/' || a[j] == '+' || a[j] == '-') { vt1 = 0; break; } } char[] dao = s1.toCharArray(); s1 = ""; for (int h = dao.length - 1; h >= 0; h--) { s1 += dao[h]; } for (int k = i + 1; k < a.length; k++) { if (a[k] != '*' && a[k] != '/' && a[k] != '+' && a[k] != '-') { s2 += a[k]; } else if (a[k] == '*' || a[k] == '/' || a[k] == '+' || a[k] == '-') { vt2 = k - 1; break; } if (k + 1 == a.length) vt2 = a.length; } if (s1 != "" && s2 != "") { kq = (Double.valueOf(s1)+Double.valueOf(s2))+""; } for (int h = 0; h < a.length; h++) { if (h < vt1) chuoiconlai += a[h]; if (h == vt1) { chuoiconlai += kq; } if (h > vt2) { chuoiconlai += a[h]; } } b = chuoiconlai; XuLyCongTru(b); } else if (a[i] == '-') { String s1 = ""; String s2 = ""; int vt1 = 0, vt2 = 0; String chuoiconlai = ""; for (int j = i - 1; j >= 0; j--) { if (a[j] != '*' && a[j] != '/' && a[j] != '+' && a[j] != '-') { s1 += a[j]; } else if (a[j] == '*' || a[j] == '/' || a[j] == '+' || a[j] == '-') { vt1 = 0; break; } } char[] dao = s1.toCharArray(); s1 = ""; for (int h = dao.length - 1; h >= 0; h--) { s1 += dao[h]; } for (int k = i + 1; k < a.length; k++) { if (a[k] != '*' && a[k] != '/' && a[k] != '+' && a[k] != '-') { s2 += a[k]; } else if (a[k] == '*' || a[k] == '/' || a[k] == '+' || a[k] == '-') { vt2 = k - 1; break; } if (k + 1 == a.length) vt2 = a.length; } if (s1 != "" && s2 != "") { kq = (Double.valueOf(s1) - Double.valueOf(s2)) + ""; } for (int h = 0; h < a.length; h++) { if (h < vt1) chuoiconlai += a[h]; if (h == vt1) { chuoiconlai += kq; } if (h > vt2) { chuoiconlai += a[h]; } } b = chuoiconlai; XuLyCongTru(b); } } if(a[0]=='-') { if (a[i] == '+'&&i>1) { String s1 = ""; String s2 = ""; int vt1 = 0, vt2 = 0; String chuoiconlai = ""; for (int j = i - 1; j >= 0; j--) { if (a[j] != '*' && a[j] != '/' && a[j] != '+' && a[j] != '-') { s1 += a[j]; } else if (a[j] == '*' || a[j] == '/' || a[j] == '+' || a[j] == '-') { vt1 = 0; break; } } char[] dao = s1.toCharArray(); s1 = ""; for (int h = dao.length - 1; h >= 0; h--) { s1 += dao[h]; } for (int k = i + 1; k < a.length; k++) { if (a[k] != '*' && a[k] != '/' && a[k] != '+' && a[k] != '-') { s2 += a[k]; } else if (a[k] == '*' || a[k] == '/' || a[k] == '+' || a[k] == '-') { vt2 = k - 1; break; } if (k + 1 == a.length) vt2 = a.length; } if (s1 != "" && s2 != "") { kq = (-Double.valueOf(s1) + Double.valueOf(s2))+""; } for (int h = 0; h < a.length; h++) { if (h < vt1) chuoiconlai += a[h]; if (h == vt1) { chuoiconlai += kq; } if (h > vt2) { chuoiconlai += a[h]; } } b = chuoiconlai; XuLyCongTru(b); } else if (a[i] == '-'&&i>1) { String s1 = ""; String s2 = ""; int vt1 = 0, vt2 = 0; String chuoiconlai = ""; for (int j = i - 1; j >= 0; j--) { if (a[j] != '*' && a[j] != '/' && a[j] != '+' && a[j] != '-') { s1 += a[j]; } else if (a[j] == '*' || a[j] == '/' || a[j] == '+' || a[j] == '-') { vt1 = 0; break; } } char[] dao = s1.toCharArray(); s1 = ""; for (int h = dao.length - 1; h >= 0; h--) { s1 += dao[h]; } for (int k = i + 1; k < a.length; k++) { if (a[k] != '*' && a[k] != '/' && a[k] != '+' && a[k] != '-') { s2 += a[k]; } else if (a[k] == '*' || a[k] == '/' || a[k] == '+' || a[k] == '-') { vt2 = k - 1; break; } if (k + 1 == a.length) vt2 = a.length; } if (s1 != "" && s2 != "") { kq = (-Double.valueOf(s1) - Double.valueOf(s2))+""; } for (int h = 0; h < a.length; h++) { if (h < vt1) chuoiconlai += a[h]; if (h == vt1) { chuoiconlai += kq; } if (h > vt2) { chuoiconlai += a[h]; } } b = chuoiconlai; XuLyCongTru(b); } } } if (DungCongTru == false) { edt_input.setText(b); DungCongTru = true; } }
Chạy Chương Trình Và Nhập Chuỗi Bất Kỳ ví dụ như hình:
Và kết quả khi ấn dấu = là: