实现代码以下:java
if (isOperator(token)) { //从栈中弹出操做数2 //从栈中弹出操做数1 int a = stack.pop(); int b = stack.pop(); //根据运算符和两个操做数调用evalSingleOp计算result; //计算result入栈; result=evalSingleOp (token.charAt(0), b, a); stack.push(result); } else //若是是操做数 //操做数入栈; { stack.push(Integer.parseInt(token)); } }
注意:这里须要注意的是操做数1和操做数的顺序,否则在减法和除法上会出现问题。linux
expression = args[0]+" "+args[2]+" "+args[1]; MyDC evaluator = new MyDC(); result = evaluator.evaluate (expression); //这里面负责传递参数,利用上个实验已经实现的计算器类mydc来完成工做 private final char Modulo = '%'; return ( token.equals("+") || token.equals("-") ||token.equals("*") || token.equals("/") )||token.equals("%"); case Modulo :result = op1 % op2; //这里负责扩展模运算。
这里须要修改布局文件。android
android 界面跳转的几种方式:git
第一种方式,用action来跳转。
一、使用Action跳转,若是有一个程序的 AndroidManifest.xml中的某一个Activity的IntentFilter段中定义了包含了相同的Action那么这个Intent 就与这个目标Action匹配。若是这个IntentFilter段中没有定义 Type,Category,那么这个 Activity就匹配了。可是若是手机中有两个以上的程序匹配,那么就会弹出一个对话可框来提示说明。
Action的值在Android中有不少预约义,若是你想直接转到你本身定义的Intent接收者,你能够在接收者的 IntentFilter中加入一个自定义的Action值(同时要设定 Category值为"android.intent.category.DEFAULT"),在你的Intent中设定该值为Intent的 Action,就直接能跳转到你本身的Intent接收者中。由于这个Action在系统中是惟一的。
2,data/type,你能够用Uri来作为data,好比Uri uri = Uri.parse(http://www.google.com);
Intent i = new Intent(Intent.ACTION_VIEW,uri);手机的Intent分发过程当中,会根据http://www.google.com 的scheme判断出数据类型type
手机的Brower则能匹配它,在Brower的Manifest.xml中的IntenFilter中首先有ACTION_VIEW Action,也能处理http:的type。
3,至于分类Category,通常不要去在Intent中设置它,若是你写Intent的接收者,就在Manifest.xml的 Activity的 IntentFilter中包含android.category.DEFAULT,这样全部不设置 Category(Intent.addCategory(String c);)的Intent都会与这个Category匹配。
4,extras(附加信息),是其它全部附加信息的集合。使用extras能够为组件提供扩展信息,好比,若是要执行“发送电子邮件”这个动做,能够将电子邮件的标题、正文等保存在extras里,传给电子邮件发送组件。
这里须要从新创建一个布局文件,并在java文件中创建关联关系。express
第二种方式,用类名跳转。
Intent负责对应用中一次操做的动做、动做涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将 Intent传递给调用的组件,并完成组件的调用。Intent在这里起着实现调用者与被调用者之间的解耦做用。
Intent传递过程当中,要找到目标消费者(另外一个Activity,IntentReceiver或Service),也就是Intent的响应者。ide
所用核心代码:布局
t1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(); intent.setClass(MainActivity.this,ThirdActivity.class); startActivity(intent); } });
码云连接测试
Toast是Android中用来显示显示信息的一种机制,和Dialog不同的是,Toast是没有焦点的,并且Toast显示的时间有限,过必定的时间就会自动消失。下面用一个实例来看看如何使用Toast。this
默认样式:Toast.makeText(getApplicationContext(), "默认Toast样式", Toast.LENGTH_SHORT).show(); 自定义显示位置:toast = Toast.makeText(getApplicationContext(), "自定义位置Toast", Toast.LENGTH_LONG); toast.setGravity(Gravity.CENTER, 0, 0); toast.show(); 带图片效果:toast = Toast.makeText(getApplicationContext(), "带图片的Toast", Toast.LENGTH_LONG); toast.setGravity(Gravity.CENTER, 0, 0); LinearLayout toastView = (LinearLayout) toast.getView(); ImageView imageCodeProject = new ImageView(getApplicationContext()); imageCodeProject.setImageResource(R.drawable.icon); toastView.addView(imageCodeProject, 0); toast.show(); 彻底自定义:LayoutInflater inflater = getLayoutInflater(); View layout = inflater.inflate(R.layout.custom, (ViewGroup) findViewById(R.id.llToast)); ImageView image = (ImageView) layout .findViewById(R.id.tvImageToast); image.setImageResource(R.drawable.icon); TextView title = (TextView) layout.findViewById(R.id.tvTitleToast); title.setText("Attention"); TextView text = (TextView) layout.findViewById(R.id.tvTextToast); text.setText("彻底自定义Toast"); toast = new Toast(getApplicationContext()); toast.setGravity(Gravity.RIGHT | Gravity.TOP, 12, 40); toast.setDuration(Toast.LENGTH_LONG); toast.setView(layout); toast.show();
这里利用button的点击事件实现google
b1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(MainActivity.this, "20169207 Toast test ", Toast.LENGTH_SHORT).show(); } });
针对六种布局进行了了解,并尝试了基本操做。
每个布局都有本身适合的方式,另外,这五个布局元素能够相互嵌套应用,作出美观的界面
这里尝试添加了两种监听器,点击和长按。
第一种: 在Test类中 定义一个类接口OnClickListener
第二种:直接在Test类上写一个接口
第三种: 匿名内部类
点击事件截图:
长按监听截图:
码云连接