首页 > 代码库 > Android开发牛刀小试之“AA算钱软件”开发(二)
Android开发牛刀小试之“AA算钱软件”开发(二)
今天主要修改了几个bug,然后改了下背景图片和图标,添加了变动人数的功能,即:指定参与AA的人数,参与AA计算。还有就是利用getResources().getIdentifier()解决了循环调用layout中组件id的问题。
下面是几段核心代码:
private class OnClickListenerIreture implements OnClickListener{ @Override public void onClick(View arg0) { // TODO Auto-generated method stub //首先获取NUMBER,也就是要指定的参与AA的人数 EditText edt = (EditText) AAcharge.this.findViewById(R.id.ednum); NUMBER = Integer.parseInt(edt.getText().toString()); int stuid[] = new int[NUMBER]; TextView stu[] = new TextView[NUMBER]; for (int k =1;k<stu.length+1;k++){ //get cost stuid[k-1] = getResources().getIdentifier("stu"+k, "id", getPackageName()); stu[k-1] = (TextView) AAcharge.this.findViewById(stuid[k-1]); } double num[] = new double[NUMBER]; int payid[] = new int[NUMBER]; int nameid[] = new int[NUMBER]; Person p[] = new Person[NUMBER]; EditText ed[] = new EditText[NUMBER]; for (int i = 0;i<NUMBER;i++){ p[i] = new Person(); ed[i] = null; } for (int k =1;k<num.length+1;k++){ //get cost payid[k-1] = getResources().getIdentifier("pay"+k, "id", getPackageName()); ed[k-1] = (EditText) AAcharge.this.popView.findViewById(payid[k-1]); num[k-1] = Double.parseDouble(ed[k-1].getText().toString()); // 取得输入的钱数 p[k-1].setCost(num[k-1]); //get name nameid[k-1] = getResources().getIdentifier("myed"+k, "id", getPackageName()); ed[k-1] = (EditText) AAcharge.this.popView.findViewById(nameid[k-1]); p[k-1].setName(ed[k-1].getText().toString()); } double total =0; for (int t =0;t<p.length;t++){ total = total + p[t].getCost(); } double average = ((int)((total)*10/NUMBER))/10.0; AAcharge.this.statusinfo.setText( "总花费:" +String.valueOf(total) + " 平均花费:"+String.valueOf(average)); AAcharge.this.popWin.dismiss(); Calculate(average,p); for (int j =0;j<stu.length;j++){ stu[j].setText(p[j].getInfo()); } } }
//主要的AA计算的算法,其实很简单,首先计算均值,然后每个人付的钱减去均值存到数组中,然后再从小到大排序,之后取第一个非零值,用非零值前面的负值去填这个非零值,直到等于零,再加1. public void Calculate(double avg, Person p[]) { // TODO Auto-generated method stub int i =0; int j =0; int index=0; sort(p); for (int k =0;k<p.length;k++){ p[k].setGetmoney(p[k].getCost()-avg); } index = findPosIndex(p); i=index; for (j = index -1;j>=0;){ if (i<p.length){ if ((p[i].getGetmoney()+p[j].getGetmoney())>0){ p[j].setInfo(p[j].getName()+ "付给" + p[i].getName()+" : " +String.valueOf(Math.abs(p[j].getGetmoney()))+"元;"+"\n"+p[j].getInfo()); p[i].setGetmoney(p[i].getGetmoney()+p[j].getGetmoney()); j--; } else if ((p[i].getGetmoney()!=0) && ((p[i].getGetmoney()+p[j].getGetmoney())==0)){ p[j].setInfo(p[j].getName()+ "付给" + p[i].getName()+" : " +String.valueOf(Math.abs(p[j].getGetmoney()))+"元;"+"\n"+p[j].getInfo()); p[i].setGetmoney(p[i].getGetmoney()+p[j].getGetmoney()); i++; j--; } else if((p[i].getGetmoney()+p[j].getGetmoney())<0){ p[j].setInfo(p[j].getName()+ "付给" + p[i].getName()+" : " +String.valueOf(Math.abs(p[i].getGetmoney()))+"元;"+"\n"+p[j].getInfo()); p[j].setGetmoney(p[i].getGetmoney()+p[j].getGetmoney()); i++; } } } } private int findPosIndex(Person[] p) { // TODO Auto-generated method stub int index =0; for (int i =0;i<p.length;i++){ if(p[i].getGetmoney()>0) { index = i; break; } } return index; } public void sort(Person p[]) { // TODO Auto-generated method stub Person temp =new Person(); for (int i =0;i<p.length-1;i++){ for (int j =0;j<p.length-i-1;j++){ if (p[j].getCost()>p[j+1].getCost()){ temp = p[j]; p[j] = p[j+1]; p[j+1] = temp; } } } } }
最后是附上现在的app截图,有个girl说我太屌丝了,无所谓啦,我就是图个开心。
Android开发牛刀小试之“AA算钱软件”开发(二)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。