A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 112345666 于 2016-9-29 19:15 编辑

那道题很不错的,考的很全面,全是JAVA面向对象的东西,我今天才搞懂
2.        创建抽象类Payment,定义返回类型为double的抽象方法pay(double money)(10分)
a.        创建两个子类Zfb, Cash;均继承自Payment,重写pay方法,根据以下要求返回实际付款金额
①        支付宝支付(Zfb):随机打5-8折
②        现金支付(Cash):没有任何优惠
b.        定义Person类,定义静态方法buy,参数为String类型,返回值为Payment类型,方法中对参数进行判断,如果参数为"Zfb",则返回Zfb类对象, 如果参数为"Cash",则返回Cash类对象,如果参数为其他值,则默认返回Cash类对象.
c.        定义测试类,在main方法中,调用Person类的静态方法buy,提示用户输入付款方式,以及金额;输出最后付款钱数
代码明天发,今天先睡觉

34 个回复

倒序浏览

把代码完善了一下

本帖最后由 112345666 于 2016-9-29 18:56 编辑

package com;

import java.util.Scanner;
import java.util.Random;
public class Demo_A {
        public static void main(String[] args) {
                Scanner sc = new Scanner(System.in);
                for (int i = 0; i < 5; i++) {
                        System.out.println("请输入您的付款方式以及付款金额:(付款方式,付款金额)");
                        String line = sc.nextLine();
                        String[] arr = line.split(",");
                        String payName = arr[0];
                        if (arr.length<=1) {
                                System.out.println("格式有误,请重新输入:");
                                System.out.println("还剩"+(5-(i+1))+"次");
                                continue;
                        }
                        double money = Double.parseDouble(arr[1]);
                        Payment1 p = Person.buy(payName);
                        float moneyInfact = (float) p.pay(money);
                        if ("Zfb".equals(payName)) {
                                System.out.println("您的付款方式为支付宝" + "\r\n" + "打"
                                                + (int) (moneyInfact * 10 / money) + "折" + "\r\n"
                                                + "最后付款金额为:" + moneyInfact);
                                break;
                        } else if ("Cash".equals(payName)) {
                                System.out.println("您的付款方式为现金" + "\r\n" + "没有任何优惠" + "\r\n"
                                                + "最后付款金额为:" + moneyInfact);
                               
                                break;
                        }else{
                                System.out.println("请选择正确的付款方式");
                                System.out.println("还剩"+(5-(i+1))+"次");
                        }
                }
        }

}
abstract class Payment1 {
        /*
         * 返回值类型为double
         * 参数列表为 double money
         */
        public abstract double pay(double money);
}

class Zfb extends Payment1 {
        @Override
        public double pay(double money) {
                //随机打5-8折
                Random r = new Random();
                double money2 = (r.nextInt(4)+5)*0.1*money;
                return money2;
        }
}

class Cash extends Payment1 {

        @Override
        public double pay(double money) {
                //不打折
                return money;
        }
}

public class Person {

        public static Payment1 buy(String str) {
                if ("Zfb".equals(str)) {
                        return new Zfb();
                }else if ("Cash".equals(str)) {
                        return new Cash();
                }else {
                        return new Cash();
                }       
        }
}

PS:老司机提供一部分帮助
回复 使用道具 举报
这道题超经典,值得深夜推荐
回复 使用道具 举报
好些知识点还没学到,只看懂一小部分
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
毕竟是考题啊,综合性很大的
回复 使用道具 举报
回复 使用道具 举报
经典就是经典,全面考察,无可替代
回复 使用道具 举报
等我有功夫的时候慢慢看,现在有点忙!!
回复 使用道具 举报
有单看不懂啊...现在学到面向对象..
回复 使用道具 举报
边_城 发表于 2016-9-29 08:30
看不懂,收藏一下

看不懂啊
回复 使用道具 举报
senjoeson 发表于 2016-9-29 19:27
等我有功夫的时候慢慢看,现在有点忙!!

收藏了   是好东西
回复 使用道具 举报
senjoeson 发表于 2016-9-29 19:27
等我有功夫的时候慢慢看,现在有点忙!!

收藏了   是好东西
回复 使用道具 举报
112345666 发表于 2016-9-29 08:25
毕竟是考题啊,综合性很大的

面试 考这个吗?
回复 使用道具 举报
wangkai426 发表于 2016-9-29 08:53
经典就是经典,全面考察,无可替代

是挺考验学到的知识的
回复 使用道具 举报
Mark下  国庆的时候好好看  现在先完成作业
回复 使用道具 举报
阅~~~~~~~~~~~~~~~~
回复 使用道具 举报
..................
回复 使用道具 举报
都是大神,太厉害了
回复 使用道具 举报
坐等....
回复 使用道具 举报
基础班即将毕业,现在回头看这种题,好简单啊
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马