日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

四则运算 结对项目

發布時間:2025/3/15 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 四则运算 结对项目 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

github 地址:https://github.com/wangshicheng0213/HomeWork02

一、基本要求

1) 實現一個帶有用戶界面的四則運算。

2) 生成的題目不能重復。

3) 支持負數,例如-1,-1/2,-3‘4/5等。

4) 題目的數量(個人項目的要求)

5) 數值的范圍

6) 題目中最多幾個運算符

7) 題目中是否有乘除法

8) 題目中或運算過程中有無負數

根據老師的要求,我們做的程序中解決了以上的問題。因為在第一次制作的四則運算中我的代碼就已經制作了一個用戶操作的界面,只是比較粗糙不夠完善,所以這次我和我的組員完善了四則運算的界面和一些具體的功能。在這些要求中的運算符有幾個的問題里,第一次制作的四則運算的運算符是做了三個,所以這次依舊使用三個運算符,沒有進行大的修改。

二、源代碼

?

源代碼:

?

package com.nenu.calculation;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintStream;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.Scanner;
import java.util.Set;
import java.util.Stack;
import java.util.StringTokenizer;
import java.util.Map.Entry;

public class Main {
//?public static void main(String[] args) {
//??System.out.println("請輸入n,即想要產生練習題題目數量");
//??Scanner scanner = new Scanner(System.in);
//??boolean key1 = true;
//??String temp = null;
//??while(key1){
//???temp = scanner.next();//輸入練習題的數量
//???if(!temp.matches("^\\d+$")){
//????System.out.println("輸入錯誤,請再輸入一次");
//???}
//???else
//????key1 = false;
//??}
//??int account = Integer.valueOf(temp);
//??int questionCount = 0;
//??????? File file = new File("../HomeWork01/result.txt");
//??????? PrintStream ps = null;
//??try {
//???ps = new PrintStream(new FileOutputStream(file));
//??} catch (FileNotFoundException e1) {
//???// TODO Auto-generated catch block
//???e1.printStackTrace();
//??}
//??????? ps.println("2018102996");// 往文件里寫入學號字符串
//??//System.out.println(account);
//??while(questionCount != account){
//???//隨機三到五個數字
//???Random random = new Random();
//???int nums = random.nextInt(3) + 3;
//???//System.out.println(nums);
//???ArrayList<Integer> numArrayList = new ArrayList<Integer>();
//???for (int j = 0; j < nums; j++) {
//????Random randomNum = new Random();
//????int number = randomNum.nextInt(101);
//????numArrayList.add(number);
//???}
???System.out.println(numArrayList);
//???//隨機數字 - 1個運算符
//???Map<Integer, String> opeMap = new HashMap<Integer, String>();
//???opeMap.put(1, "+");
//???opeMap.put(2, "-");
//???opeMap.put(3, "*");
//???opeMap.put(4, "÷");
//???int opeNum = 0;
//???ArrayList<String> operrayList = new ArrayList<String>();
//???while(opeNum != nums - 1){
//????Random randomOpe = new Random();
//????int key = randomOpe.nextInt(4)+1;
//????String ope01 = opeMap.get(key);
//????operrayList.add(ope01);
//????opeNum ++;
//???}
???System.out.println(operrayList);
???Set<Entry<Integer, Character>> opeSet = opeMap.entrySet();
???Iterator<Entry<Integer, Character>> ope = opeSet.iterator();
???System.out.print("[");
???while(ope.hasNext()){
????Entry<Integer, Character> type = (Entry<Integer, Character>)ope.next();
????int k = type.getKey();
????Character v = type.getValue();
????System.out.print(v + ",");
???}
???System.out.println("]");
//???if(true){
????System.out.println(numArrayList);
????System.out.println(operrayList);
//????ArrayList<String> equString = new ArrayList<String>();
//????equString.add(numArrayList.get(0).toString());
//????for (int i = 1; i < nums; i++) {
//?????equString.add(operrayList.get(i - 1).toString());
//?????equString.add(numArrayList.get(i).toString());
//????}
????System.out.println(equString);
//????StringBuilder stringBuilder = new StringBuilder();
//????for (int i = 0; i < equString.size(); i++) {
//?????stringBuilder.append(equString.get(i));
//????}
//????????? float data = 0;
//????try {
//?????String expression = stringBuilder.toString();
//?????Main nbl = new Main(expression);
//?????????? String nbls_cc = new String();
//?????????? float result = 0;
//?????????? nbl.zz_hz();
?????????? nbl.nbls_bc();
?????????? System.out.println("對應的逆波蘭式為 :" + nbls_cc);
?????????? System.out.println("結果是:");
//?????????? data = nbl.js_nbl();
//?????????? //分數保留2位
//?????????? DecimalFormat df = new DecimalFormat("0.00");
?????????? String num3 = df.format(num);
//?????????? String dataStr = df.format(data);
?????????? System.out.println(result);
//???????????
?????data = evaluateExpression(expression);
//???????????
//?????stringBuilder.append("=" + dataStr);
//?????????? System.out.println(stringBuilder);
?????????? File dest = new File("../HomeWork01/result.txt");
?????????? BufferedWriter writer = new BufferedWriter(new FileWriter(dest));
?????????? writer.write(stringBuilder.toString());
?????????? writer.flush();
?????????? writer.close();
//????} catch (Exception e) {
//?????questionCount = questionCount - 1;
//????}
//???????????? ps.print(stringBuilder + "\n");// 在已有的基礎上添加字符串
//????questionCount ++;
//???}//每生成一個題目+1
//??}
//??ps.flush();
//??ps.close();
//?} //? 操作符棧
??? private Stack<String> czf_stack = new Stack<>();??????? // 存放 運算符的棧
??? private? ArrayList<String> ysbds_list = new ArrayList<>();???? //存放 原始表達式的 arraylist
??? private? ArrayList<String> nblbds_list = new ArrayList<>();????? // 存放轉換后的 逆波蘭式
??? private static final int One = 1;????? //
??? private static final int Two = 3;???? //
??? private static final int Three = 5;?? //規定優先級?? Three 最高
???? //? 定義一個運算棧
???? private static Stack<String> ys_stack = new Stack<>();
????
????? // 初始化???????????????????????????? 使用StringTokenizer分割 字符串
???? public Main(String bdString) {
???????? // TODO Auto-generated constructor stub
??????? StringTokenizer stringTokenizer = new StringTokenizer(bdString, "+-*÷()",true);
??????? while(stringTokenizer.hasMoreTokens()){
????????????? ysbds_list.add(stringTokenizer.nextToken());
???????????? //System.out.println(stringTokenizer.nextToken());
???????? }
??? }
????
? ??
???? // 判斷 是否是數字
???? public boolean isNum(String str){
???????? if(str.matches("[0-9]+")){??? //這里使用正則表達式 驗證是否是數字
???????????? //System.out.println("Y");
??????????? return true;
???????? }else{
???????????? //System.out.println("N");
???????????? return false;
???????? }
???? }
????
???? // 判斷 是否是操作符
??? public boolean isCzf(String str){
??????? if(str.matches("[\\+\\-\\*\\÷\\(\\)]")){
??????????? //System.out.println("Y");
??????????? return true;
???????? }else{
???????????? //System.out.println("N");
???????????? return false;
???????? }
???? }
???
???? // 獲取 優先級
??? public int getYxj(String str){
????????
???????? switch(str){
???????? case "(":return Three;
???????? case "*":
???????? case "÷":return Two;
???????? case "+":
???????? case "-":return One;
???????? case ")":return 0;
????????
???????? default : return -1;
?????????
???????? }
????????
????? }
? ?
???? // 判斷優先級
????? public boolean isYxj(String str1,String str2){
????????? return getYxj(str1) > getYxj(str2);??
????? }
????? /**
?????? *
?????? * @author 李明陽
?????? * @title: stack_czf
?????? * @date 2016年3月28日 上午9:01:12
?????? * @param czf void
?????? */
????? //?? ********* 當 當前操作元素為 操作符時**********??? 這里是 核心代碼, 用于操作符棧的判斷
????? public void stack_czf(String czf){
????????
????????? //判斷當前棧內是否為空
??????? if(czf_stack.isEmpty()){
???????????? czf_stack.push(czf);
????????????? return;
???????? }
?????????
????????? //判斷是否為 (
???????? if("(".equals(czf)){
???????????? czf_stack.push(czf);
???????????? return;
???????? }
????????
???????? //判斷是否為 )
???????? if(")".equals(czf)){
??????????? String string = "";
???????????? while(!"(".equals(string = czf_stack.pop())){
???????????????? nblbds_list.add(string);
???????????? }
???????????? return;
??????? }
?????????
???????? //如果 當前棧頂元素是? (? 直接入棧
???????? if("(".equals(czf_stack.peek())){
???????????? czf_stack.push(czf);
???????????? return;
???????? }
????????
???????? // 判斷 與 棧頂元素的優先級 , > 為true
???????? if(isYxj(czf, czf_stack.peek())){
??????????? czf_stack.push(czf);
???????????? return;
???????? }
????????
???????? if(!isYxj(czf, czf_stack.peek())){
???????????? nblbds_list.add(czf_stack.pop());
???????????? stack_czf(czf);?? //這里調用函數 本身,并將本次的操作數傳參
???????? }
????????
???? }
? ? ?
???? // 中綴 —> 后綴
??? public void zz_hz(){
????????
???????? // 遍歷原始表達式list
???????? for(String str:ysbds_list){
????????????
???????????? //System.out.println("->? " + str);
????????????
???????????? if(isNum(str)){
???????????????? nblbds_list.add(str);
???????????? }else if(isCzf(str)){
???????????????? stack_czf(str);
???????????? }else{
???????????????? System.out.println("非法");
???????????? }
????????????
???????? }
????????
???????? // 遍歷完原始表達式后? 將操作符棧內元素 全部添加至 逆波蘭表達式list
?
???????? while(!czf_stack.isEmpty()){
???????????? //System.out.println("即將 " + czf_stack.peek());
??????????? nblbds_list.add(czf_stack.pop());
???????? }
????????
???? }
? ? ?
??? // 具體計算方法
???? public Float jsff(String s1,String s2,String s3){
???????? float a = Float.parseFloat(s2);
???????? float b = Float.parseFloat(s1);
???????? switch(s3){
???????? case "+":return a+b;
???????? case "-":return a-b;
???????? case "*":return a*b;
???????? case "÷":return a/b;
???????? default : return (float) 0.0;
??????? }
???? }
??
???? //? 計算 逆波蘭式
???? public Float js_nbl(){
???????? for(String str:nblbds_list){
???????????? if(isNum(str)){
???????????????? ys_stack.push(str);
???????????? }else{
???????????????? ys_stack.push(String.valueOf(jsff(ys_stack.pop(), ys_stack.pop(), str)));
??????????? }
???????? }
???????? return Float.parseFloat(ys_stack.pop());? //最后 棧中元素 即為結果
???? }
????
?//??? public void nbls_bc(){
?//??????? for(String string:nblbds_list){
?//??????????? nbls_cc += string;
?//??????? }
?//??? }
}

三.實驗心得

在做的過程中,出現了很多的問題,在逆波蘭式的調用過程中接口沒有對應,GUi設計也很粗糙,對待學習的任務還是要認真一點,并不是說任務重要,而是要時刻保持做任務的嚴謹的心態,保持心態是最重要的。

與此同時,通過上網查閱資料和同學的幫助讓我順利的解決了自己的問題,也讓我慢慢看到了自己的不足之處還有很多,需要學習和努力的地方還有很多,并不能因為自己會一些基礎的編程就驕傲,當真正制作東西的時候這些小問題就會暴露出來,讓我手足無措。我會繼續完善自己的四則運算,也會讓自己的基本功和一些進階的編程操作更加扎實。相信自己下一次制作出來的東西會更加完美。

轉載于:https://www.cnblogs.com/wangshicheng/p/10007627.html

總結

以上是生活随笔為你收集整理的四则运算 结对项目的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。