Android小项目———— 冰炭不投de小计算器
我的第一个Android小项目 冰炭不投de小计算器
一.前言
这是我首个使用java写的app,也在学习郭霖老师的第一行代码和李刚老师的疯狂java讲义之时,进行的练习之作,刚刚学习java和android,有些地方可能并没有做的很完善,希望大家可以多多包涵。
二.环境准备和所需知识点
1. 编译器:Andriod Studio
2. 新建一个项目并选择全部默认
3. 知识点:
- 对Android界面和布局的了解
- 对Android活动的了解
- 对Java基础知识的了解(面向对象,集合)
- 算法:中缀表达式转后缀表达式,后缀表达式计算结果
三.实现效果和界面,运行截图
1.实现效果:
- 加减混合运算(浮点数)
- 可带括号
- 可保留上次计算结果
2.效果截图
四.界面的编写
1.布局
- 我使用的是百分比布局,使用前在app/build.gradle文件中添加一条语句
compile 'com.android.support:percent:24.2.1'
- 修改的地方:
- 修改后,点击弹出了提醒语句中的 Sync Now
2.关于颜色搭配,推荐一个网站网站地址
3.界面的编写
- 所使用的控件:TextView Buttom
- 修改Activity_main.xml文件代码,内容如下
<android.support.percent.PercentRelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"android:layout_height="match_parent"><Buttonandroid:id="@+id/buttonEqual"android:text="="android:layout_alignParentRight="true"android:textSize="25sp"android:background="#FFFFCD"android:layout_alignParentBottom="true"app:layout_widthPercent="25%"app:layout_heightPercent="15%"/><Buttonandroid:id="@+id/buttonAdd"android:text="+"android:layout_alignParentRight="true"android:textSize="25sp"android:background="#F0FFFF"android:layout_above="@id/buttonEqual"app:layout_widthPercent="25%"app:layout_heightPercent="15%"/><Buttonandroid:id="@+id/buttonSign"android:text="-"android:layout_alignParentRight="true"android:textSize="25sp"android:background="#F0FFFF"android:layout_above="@id/buttonAdd"app:layout_widthPercent="25%"app:layout_heightPercent="15%"/><Buttonandroid:id="@+id/buttonMul"android:text="×"android:textSize="25sp"android:background="#F0FFFF"android:layout_alignParentRight="true"android:layout_above="@id/buttonSign"app:layout_widthPercent="25%"app:layout_heightPercent="15%"/><Buttonandroid:id="@+id/buttonDiv"android:text="÷"android:layout_alignParentRight="true"android:textSize="25sp"android:background="#F0FFFF"android:layout_above="@id/buttonMul"app:layout_widthPercent="25%"app:layout_heightPercent="15%"/><Buttonandroid:id="@+id/buttonDot"android:text="."android:layout_alignParentBottom="true"android:textSize="25sp"android:background="#FFFAF0"android:layout_toLeftOf="@id/buttonDiv"app:layout_widthPercent="25%"app:layout_heightPercent="15%"/><Buttonandroid:id="@+id/button3"android:text="3"android:textSize="25sp"android:background="#F5F5F5"android:layout_above="@id/buttonDot"android:layout_toLeftOf="@id/buttonDiv"app:layout_widthPercent="25%"app:layout_heightPercent="15%"/><Buttonandroid:id="@+id/button6"android:text="6"android:textSize="25sp"android:background="#F5F5F5"android:layout_above="@+id/button3"android:layout_toLeftOf="@id/buttonDiv"app:layout_widthPercent="25%"app:layout_heightPercent="15%"/><Buttonandroid:id="@+id/button9"android:text="9"android:textSize="25sp"android:background="#F5F5F5"android:layout_above="@+id/button6"android:layout_toLeftOf="@id/buttonDiv"app:layout_widthPercent="25%"app:layout_heightPercent="15%"/><Buttonandroid:id="@+id/buttonBack"android:text="删除"android:textSize="23sp"android:background="#F5F5F5"android:layout_above="@+id/button9"android:layout_toLeftOf="@id/buttonDiv"app:layout_widthPercent="25%"app:layout_heightPercent="15%"/><Buttonandroid:id="@+id/button0"android:text="0"android:textSize="25sp"android:background="#F5F5F5"android:layout_alignParentBottom="true"android:layout_toLeftOf="@id/buttonDot"app:layout_widthPercent="25%"app:layout_heightPercent="15%"/><Buttonandroid:id="@+id/button2"android:text="2"android:textSize="25sp"android:background="#F5F5F5"android:layout_above="@id/button0"android:layout_toLeftOf="@id/button3"app:layout_widthPercent="25%"app:layout_heightPercent="15%"/><Buttonandroid:id="@+id/button5"android:text="5"android:textSize="25sp"android:background="#F5F5F5"android:layout_above="@+id/button2"android:layout_toLeftOf="@id/button6"app:layout_widthPercent="25%"app:layout_heightPercent="15%"/><Buttonandroid:id="@+id/button8"android:text="8"android:textSize="25sp"android:background="#F5F5F5"android:layout_above="@+id/button5"android:layout_toLeftOf="@id/button9"app:layout_widthPercent="25%"app:layout_heightPercent="15%"/><Buttonandroid:id="@+id/buttonRightBracket"android:text=")"android:textSize="25sp"android:background="#F5F5F5"android:layout_above="@+id/button8"android:layout_toLeftOf="@id/buttonBack"app:layout_widthPercent="25%"app:layout_heightPercent="15%"/><Buttonandroid:id="@+id/buttonAC"android:text="AC"android:layout_alignParentBottom="true"android:textSize="25sp"android:background="#FFFAF0"android:layout_toLeftOf="@id/button0"app:layout_widthPercent="25%"app:layout_heightPercent="15%"/><Buttonandroid:id="@+id/button1"android:text="1"android:textSize="25sp"android:background="#F5F5F5"android:layout_above="@id/button0"android:layout_toLeftOf="@id/button2"app:layout_widthPercent="25%"app:layout_heightPercent="15%"/><Buttonandroid:id="@+id/button4"android:text="4"android:textSize="25sp"android:background="#F5F5F5"android:layout_above="@+id/button1"android:layout_toLeftOf="@id/button5"app:layout_widthPercent="25%"app:layout_heightPercent="15%"/><Buttonandroid:id="@+id/button7"android:text="7"android:textSize="25sp"android:background="#F5F5F5"android:layout_above="@+id/button4"android:layout_toLeftOf="@id/button8"app:layout_widthPercent="25%"app:layout_heightPercent="15%"/><Buttonandroid:id="@+id/buttonLeftBracket"android:text="("android:textSize="25sp"android:background="#F5F5F5"android:layout_above="@+id/button7"android:layout_toLeftOf="@id/buttonRightBracket"app:layout_widthPercent="25%"app:layout_heightPercent="15%"/><TextViewandroid:id="@+id/textView"android:layout_width="0dp"android:layout_height="0dp"app:layout_widthPercent="100%"app:layout_heightPercent="25%"android:layout_above="@+id/buttonLeftBracket"android:background="#FFFAFA"android:gravity="bottom|right"android:text=""android:textColor="#292421"android:textSize="30dp"/></android.support.percent.PercentRelativeLayout>
4.隐藏自带标题
- 修改app/src/main/res/values/styles.xml文件 修改内容如下:
<resources><!-- Base application theme. --><style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"><!-- Customize your theme here. --><item name="windowActionBar">false</item><item name="windowNoTitle">true</item></style></resources>
5.修改app图标和名字
- 修改名字
修改app/src/main/res/values/Strings.xml文件 修改内容如下:
<resources><string name="app_name">冰炭不投de小计算器</string>
</resources>
- 修改图标
- 将图标放在pp/src/main/res/mipmap文件中
- 修改AndroidManifest.xml文件
android:allowBackup="true"
android:icon="@mipmap/图片名字" //修改这句
android:label="@string/app_name"
五.活动的编写
1. 思路
- 为每个控件起相对应的名字和监控器,点击不同控件触发不同的事件
2. 计算器中应该考虑的异常,并禁止输入
- 小数点不可在一个数字中多次出现
- 除了*- 和/-之外 其他任意两个符号不可同时出现
- 负号的处理,负号可以出现在首位,负号可以出现在*/后面
- 右括号必须小于等于左括号的数量
- 左括号前不能是数字,右括号后不能是数字
- 等于时,左右括号数量必须相同,才能输出结果
- 其他没有考虑到的错误,使用异常抛出错误
3.其他应该优化的地方
- 除0
- 已有符号时,再输入符号时,覆盖之前输入的符号
- 保存上次计算结果
- 删除键
- 清屏键
4.修改MainAcitivy中的代码,内容如下
public class MainActivity extends AppCompatActivity implements View.OnClickListener {private TextView textView;private StringBuilder pending=new StringBuilder();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);getWindow().setFlags(WindowManager.LayoutParams. FLAG_FULLSCREEN , WindowManager.LayoutParams. FLAG_FULLSCREEN);setContentView(R.layout.activity_main);textView = (TextView)findViewById(R.id.textView);//类似定义和赋值Button button0 = (Button)findViewById(R.id.button0);Button button1 = (Button)findViewById(R.id.button1);Button button2 = (Button)findViewById(R.id.button2);Button button3 = (Button)findViewById(R.id.button3);Button button4 = (Button)findViewById(R.id.button4);Button button5 = (Button)findViewById(R.id.button5);Button button6 = (Button)findViewById(R.id.button6);Button button7 = (Button)findViewById(R.id.button7);Button button8 = (Button)findViewById(R.id.button8);Button button9 = (Button)findViewById(R.id.button9);Button buttonAdd = (Button)findViewById(R.id.buttonAdd);Button buttonSign = (Button)findViewById(R.id.buttonSign);Button buttonMul = (Button)findViewById(R.id.buttonMul);Button buttonDiv = (Button)findViewById(R.id.buttonDiv);Button buttonEqual = (Button)findViewById(R.id.buttonEqual);Button buttonDot= (Button)findViewById(R.id.buttonDot);Button buttonRightBracket = (Button)findViewById(R.id.buttonRightBracket);Button buttonLeftBracket = (Button)findViewById(R.id.buttonLeftBracket);Button buttonBack = (Button)findViewById(R.id.buttonBack);Button buttonAC = (Button)findViewById(R.id.buttonAC);button0.setOnClickListener(this);//调用监听器button1.setOnClickListener(this);button2.setOnClickListener(this);button3.setOnClickListener(this);button4.setOnClickListener(this);button5.setOnClickListener(this);button6.setOnClickListener(this);button7.setOnClickListener(this);button8.setOnClickListener(this);button9.setOnClickListener(this);buttonAdd.setOnClickListener(this);buttonSign.setOnClickListener(this);buttonMul.setOnClickListener(this);buttonDiv.setOnClickListener(this);buttonEqual.setOnClickListener(this);buttonDot.setOnClickListener(this);buttonRightBracket.setOnClickListener(this);buttonLeftBracket.setOnClickListener(this);buttonBack.setOnClickListener(this);buttonAC.setOnClickListener(this);}@Override//监听器public void onClick(View v){//当前字符串的最后一个和倒数第二个int last = 0;int last_q =0;if(pending.length()!=0){last = pending.codePointAt(pending.length()-1);if (pending.length()>1)last_q =pending.codePointAt(pending.length()-2);}switch (v.getId()) {case R.id.button0:if(last!=')'){pending = pending.append("0");}else {pending = pending.replace(pending.length()-1,pending.length(),"0");}textView.setText(pending);break;case R.id.button1:if(last!=')'){pending = pending.append("1");}else {pending = pending.replace(pending.length()-1,pending.length(),"1");}textView.setText(pending);break;case R.id.button2:if(last!=')'){pending = pending.append("2");}else {pending = pending.replace(pending.length()-1,pending.length(),"2");}textView.setText(pending);break;case R.id.button3:if(last!=')'){pending = pending.append("3");}else {pending = pending.replace(pending.length()-1,pending.length(),"3");}textView.setText(pending);break;case R.id.button4:if(last!=')'){pending = pending.append("4");}else {pending = pending.replace(pending.length()-1,pending.length(),"4");}textView.setText(pending);break;case R.id.button5:if(last!=')'){pending = pending.append("5");}else {pending = pending.replace(pending.length()-1,pending.length(),"5");}textView.setText(pending);break;case R.id.button6:if(last!=')'){pending = pending.append("6");}else {pending = pending.replace(pending.length()-1,pending.length(),"6");}textView.setText(pending);break;case R.id.button7:if(last!=')'){pending = pending.append("7");}else {pending = pending.replace(pending.length()-1,pending.length(),"7");}textView.setText(pending);break;case R.id.button8:if(last!=')'){pending = pending.append("8");}else {pending = pending.replace(pending.length()-1,pending.length(),"8");}textView.setText(pending);break;case R.id.button9:if(last!=')'){pending = pending.append("9");}else {pending = pending.replace(pending.length()-1,pending.length(),"9");}textView.setText(pending);break;case R.id.buttonAdd: // +加if(last>='0' &&last<='9' ||last==')') {pending = pending.append("+");}else if(pending.length()>1&&last!='('){pending = pending.replace(pending.length()-1,pending.length(),"+");}if(pending.length()>1&&last=='-'&&(last_q=='*'||last_q=='/')){pending = pending.replace(pending.length()-2,pending.length(),"+");}textView.setText(pending);break;case R.id.buttonSign:// -减if(last>='0' &&last<='9' ||last==')'||last=='*'||last=='/'||pending.length()==0) {pending = pending.append("-");}else if(pending.length()>1&&last!='('){pending = pending.replace(pending.length()-1,pending.length(),"-");}if(pending.length()>1&&last=='-'&&(last_q=='*'||last_q=='/')){pending = pending.replace(pending.length()-2,pending.length(),"-");}textView.setText(pending);break;case R.id.buttonMul: // *乘if(last>='0' &&last<='9' ||last==')') {pending = pending.append("*");}else if(pending.length()>1&&last!='('){pending = pending.replace(pending.length()-1,pending.length(),"*");}if(pending.length()>1&&last=='-'&&(last_q=='*'||last_q=='/')){pending = pending.replace(pending.length()-2,pending.length(),"*");}textView.setText(pending);break;case R.id.buttonDiv: // /除if(last>='0' &&last<='9' ||last==')') {pending = pending.append("/");}else if(pending.length()>1&&last!='('){pending = pending.replace(pending.length()-1,pending.length(),"/");}if(last=='-'&&(last_q=='*'||last_q=='/')){pending = pending.replace(pending.length()-2,pending.length(),"/");}textView.setText(pending);break;case R.id.buttonEqual: // =等于if((last>='0' &&last<='9' ||last==')')&&judje2()==0) {InfixInToDuffix inf = new InfixInToDuffix();String jieguo;String a="0";try {a = inf.toSuffix(pending);jieguo=inf.dealEquation(a);}catch (Exception ex){jieguo = "出错";}textView.setText(pending+"="+jieguo);pending = pending.delete(0, pending.length());if(Character.isDigit(jieguo.charAt(0))) {pending = pending.append(jieguo);}}break;case R.id.buttonDot:// 。小数点if(last>='0' &&last<='9'&&judje1()) {pending = pending.append(".");textView.setText(pending);}break;case R.id.buttonRightBracket:// )右括号if((last>='0' &&last<='9'||last==')')&&judje2()==1) {pending = pending.append(")");textView.setText(pending);}break;case R.id.buttonLeftBracket:// (左括号if((last<'0' ||last>'9')&&last!='.'&&last!=')') {pending = pending.append("(");textView.setText(pending);}break;case R.id.buttonBack: //删除if(pending.length()!=0) {pending = pending.delete(pending.length()-1,pending.length());textView.setText(pending);}break;case R.id.buttonAC: //清空pending = pending.delete(0, pending.length());textView.setText(pending);break;default:break;}}private boolean judje1(){String a="+-*/().";int[] b = new int[a.length()];int max;for (int i = 0;i < a.length();i++ ){String c =""+a.charAt(i);b[i] = pending.lastIndexOf(c);}Arrays.sort(b);if(b[a.length()-1]==-1){max = 0;}else{max = b[a.length()-1];}if(pending.indexOf(".",max)==-1){return true;}else{return false;}}private int judje2(){int a=0,b=0;for(int i = 0 ; i < pending.length() ;i++){if(pending.charAt(i)=='(' ) {a++;}if(pending.charAt(i)==')' ) {b++;}}if(a == b)return 0;if(a > b)return 1;return 2;}}
六.算法部分
1. 后缀表达式是什么和计算:链接
2. 中缀缀表达式(常见的表达式)转换成后缀表达式的方法:链接
3.在项目中新建一个InfixInToDuffix的java文件编写代码,如下
public class InfixInToDuffix {//使用集合定义好符号的运算优先级别private static final Map<Character,Integer>basic =new HashMap<Character, Integer>();static {basic.put('-',1);basic.put('+', 1);basic.put('*', 2);basic.put('/', 2);basic.put('(', 0);//在运算中 ()的优先级最高,但是此处因程序中需要 故设置为0}//将中缀表达式转换为后缀表达式public String toSuffix(StringBuilder infix){List<String> queue = new ArrayList<String>(); //定义队列 用于存储 数字 以及最后的 后缀表达式List<Character> stack = new ArrayList<Character>(); //定义栈 用于存储 运算符 最后stack中会被 弹空char[] charArr = infix.substring(0,infix.length()).trim().toCharArray(); //字符数组 用于拆分数字或符号String standard = "*/+-()"; //判定标准 将表达式中会出现的运算符写出来char ch = '&'; //在循环中用来保存 字符数组的当前循环变量的 这里仅仅是初始化一个值 没有意义int len = 0; //用于记录字符长度 【例如100*2,则记录的len为3 到时候截取字符串的前三位就是数字】for (int i = 0; i < charArr.length; i++) {//开始迭代int last=0;if(i>0) {last = charArr[i-1];}ch = charArr[i]; //保存当前迭代变量if(Character.isDigit(ch)) { //如果当前变量为 数字len++;}else if(ch == '.'){ //如果当前变量为 . 会出现在小数里面len++;}else if(ch == '-' && (last =='*'||last=='/'||i==0)){ //如果当前变量为 . 会出现在小数里面len++;continue;}else if(standard.indexOf(ch) != -1) { //如果是上面标准中的 任意一个符号if(len > 0) { //长度也有queue.add(String.valueOf(Arrays.copyOfRange(charArr, i - len, i))); //说明符号之前的可以截取下来做数字len = 0; //长度置空}if(ch == '(') { //如果是左括号stack.add(ch); //将左括号 放入栈中continue; //跳出本次循环 继续找下一个位置}if (!stack.isEmpty()) { //如果栈不为emptyint size = stack.size() - 1; //获取栈的大小-1 即代表栈最后一个元素的下标boolean flag = false; //设置标志位while (size >= 0 && ch == ')' && stack.get(size) != '(') { //若当前ch为右括号,则 栈里元素从栈顶一直弹出,直到弹出到 左括号queue.add(String.valueOf(stack.remove(size))); //注意此处条件:ch并未入栈,所以并未插入队列中;同样直到找到左括号的时候,循环结束了,所以左括号也不会放入队列中【也就是:后缀表达式中不会出现括号】size--; //size-- 保证下标永远在栈最后一个元素【栈中概念:指针永远指在栈顶元素】flag = true; //设置标志位为true 表明一直在取()中的元素}if(ch==')'&&stack.get(size) == '('){flag = true;}while (size >= 0 && !flag && basic.get(stack.get(size)) >= basic.get(ch)) { //若取得不是()内的元素,并且当前栈顶元素的优先级>=对比元素 那就出栈插入队列queue.add(String.valueOf(stack.remove(size))); //同样 此处也是remove()方法,既能得到要获取的元素,也能将栈中元素移除掉size--;}}if(ch != ')') { //若当前元素不是右括号stack.add(ch); //就要保证这个符号 入栈} else { //否则就要出栈 栈内符号stack.remove(stack.size() - 1);}}if(i == charArr.length - 1) { //如果已经走到了 中缀表达式的最后一位if(len > 0) { //如果len>0 就截取数字queue.add(String.valueOf(Arrays.copyOfRange(charArr, i - len+1, i+1)));}int size = stack.size() - 1; //size表示栈内最后一个元素下标while (size >= 0) { //一直将栈内 符号全部出栈 并且加入队列中 【最终的后缀表达式是存放在队列中的,而栈内最后会被弹空】queue.add(String.valueOf(stack.remove(size)));size--;}}}String a = queue.toString();return a.substring(1,a.length()-1);}public String dealEquation(String equation){String [] arr = equation.split(", "); //根据, 拆分字符串List<String> list = new ArrayList<String>(); //用于计算时 存储运算过程的集合【例如list中当前放置 100 20 5 / 则取出20/5 最终将结果4存入list 此时list中结果为 100 4 】for (int i = 0; i < arr.length; i++) { //此处就是上面说的运算过程, 因为list.remove的缘故,所以取出最后一个数个最后两个数 都是size-2int size = list.size();switch (arr[i]) {case "+": double a = Double.parseDouble(list.remove(size-2))+ Double.parseDouble(list.remove(size-2)); list.add(String.valueOf(a)); break;case "-": double b = Double.parseDouble(list.remove(size-2))- Double.parseDouble(list.remove(size-2)); list.add(String.valueOf(b)); break;case "*": double c = Double.parseDouble(list.remove(size-2))* Double.parseDouble(list.remove(size-2)); list.add(String.valueOf(c)); break;case "/": double d = Double.parseDouble(list.remove(size-2))/ Double.parseDouble(list.remove(size-2)); list.add(String.valueOf(d)); break;default: list.add(arr[i]); break; //如果是数字 直接放进list中}}return list.size() == 1 ? list.get(0) : "运算失败" ; //最终list中仅有一个结果,否则就是算错了}}
七 更新优化
在之后的陆续测试中,由学长发现其中的不足之处,对于浮点数的计算,容易发生精度丢失,比如说3*1.3=3.900000000000000000001,对于这种情况我使用了BigDecimal类对运算进行了改进。更改后代码如下(只更改了InfixInToDuffix类下的dealEquation方法)
public String dealEquation(String equation){String [] arr = equation.split(", "); //根据, 拆分字符串List<String> list = new ArrayList<String>(); //用于计算时 存储运算过程的集合【例如list中当前放置 100 20 5 / 则取出20/5 最终将结果4存入list 此时list中结果为 100 4 】for (int i = 0; i < arr.length; i++) { //此处就是上面说的运算过程, 因为list.remove的缘故,所以取出最后一个数个最后两个数 都是size-2int size = list.size();switch (arr[i]) {case "+": BigDecimal a = new BigDecimal(list.remove(size-2)).add(new BigDecimal(list.remove(size-2))); list.add(String.valueOf(a)); break;case "-": BigDecimal b = new BigDecimal(list.remove(size-2)).subtract(new BigDecimal(list.remove(size-2))); list.add(String.valueOf(b)); break;case "*": BigDecimal c = new BigDecimal(list.remove(size-2)).multiply(new BigDecimal(list.remove(size-2))); list.add(String.valueOf(c)); break;case "/": BigDecimal d = new BigDecimal(list.remove(size-2)).divide(new BigDecimal(list.remove(size-2)),10,BigDecimal.ROUND_HALF_UP); list.add(String.valueOf(d)); break;default: list.add(arr[i]); break; //如果是数字 直接放进list中}}return list.size() == 1 ? list.get(0) : "运算失败" ; //最终list中仅有一个结果,否则就是算错了}
Android小项目———— 冰炭不投de小计算器相关推荐
- java基础小项目_java基础小项目练习之1----3天做出飞机大战
Shoot射击游戏第一天 一.关键问题(理论): 1.简述FlyingObject.Enemy.Award.Airplane.Bee.Bullet.Hero之间的继承与实现关系 2.简述Hero类构造 ...
- python小项目案例-Python小项目:快速开发出一个简单的学生管理系统
本文根据实际项目中的一部分api 设计抽象出来,实例化成一个简单小例子,暂且叫作「学生管理系统」. 这个系统主要完成下面增删改查的功能: 包括: 学校信息的管理 教师信息的管理 学生信息的管理 根据A ...
- Python 小项目 猜数字小游戏
欢迎来到<Python 小项目>专栏,这个专栏会不定时更新Python的小项目,大家可以订阅关注哦! 这次,我们要编写一个非常简单的猜数字小游戏! 先看看运行效果: 代码详细教学: 导入模 ...
- c语言课程结束小项目:2048小游戏
<C语言程序设计基础>学习完毕,完成第一个项目:2048小游戏. //思考:编程时,要先想整个框架还是先想每个函数的算法. //思考:每一个函数要不要传参数(即数组) //思考:每一个函数 ...
- Python入门小项目-摇骰子小游戏
大家平时微信上没少玩骰子吧,骰子比大小是我们经常玩的一个小游戏也十分的简单,就是不同玩家骰子点数比较大小.我们大学宿舍的时候,就经常比大小决定谁下去拿外卖,那时候费非常想让自己是最大的数,现在看来,以 ...
- Android小项目---BIM体质指数计算器
BMI体质指数计算器 一.学习提示 1.1.项目目标:开发一款体质指数计算器,实现输入身高和体重即可判定体型是否正常. 1.2.知识点:Activity:布局:Widget组件(EditText/Bu ...
- 面向对象编程小项目,语音播报计算器
#面向对象计算器,实现一些基本的操作,加减乘除,以及打印结果 import win32com.client #1创建语音播放器class Calculaor:def __check_num_zsq(f ...
- c++小项目练习之复数计算器
准备了一个月的考试终于结束了.总结一下这一个月学到的理论知识,规划一下1月的计划.昨天敲了一天的代码.复数计算器是我敲的第一个比较大的程序,涉及到的主要知识点是运算符的重载和文件操作.纯代码后面再做详 ...
- python 设计简易计算器_python小项目——实现简易的计算器
1 #!usr/bin/evn python 2 #coding:cp936 3 #Author:Siwen 4 5 6 print ("Hello world!")7 8 9 i ...
最新文章
- redirect和forward的区别
- web API简介(二):客户端储存之document.cookie API
- Android开发环境简单配置
- 【Netty】Netty 简介 ( 原生 NIO 弊端 | Netty 框架 | Netty 版本 | 线程模型 | 线程 阻塞 IO 模型 | Reactor 模式引入 )
- linux系统在虚拟机中迁移的技术难点
- golang定时任务的使用
- vidalia 更换浏览器代理
- 2021牛客暑期多校训练营3,签到题BEFJ
- 鼠标功能不全?这几款鼠标增强辅助工具Mac App不能错过
- [转载]Qlist的用法
- Windows11下Edge浏览器登录工行农行并使用K宝U盾
- 计算机软件图标不正常,桌面图标显示不正常,详细教您桌面图标显示不正常怎么解决...
- texmacs转到latex(winEdt)
- ubuntu下查看电脑内存硬盘CPU显卡驱动等配置命令
- IDEA 如何 buil dpath
- A Brief History of Just-In-Time 简读
- MATLAB | MATLAB中绘图的奇淫技巧合集
- 北京有哪些牛逼的中小型公司?
- 请求的内容似乎是脚本,因而将无法由静态文件处理程序来处理。
- 3D模型的姿态单位化