黑马程序员技术交流社区

标题: 黑马就业班笔试题关于支付宝的(完整版) [打印本页]

作者: 112345666    时间: 2016-9-29 01:11
标题: 黑马就业班笔试题关于支付宝的(完整版)
本帖最后由 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,提示用户输入付款方式,以及金额;输出最后付款钱数
代码明天发,今天先睡觉
作者: 112345666    时间: 2016-9-29 01:42
标题: 把代码完善了一下
本帖最后由 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:老司机提供一部分帮助

作者: 112345666    时间: 2016-9-29 01:44
这道题超经典,值得深夜推荐
作者: 阿夶    时间: 2016-9-29 07:57
好些知识点还没学到,只看懂一小部分

作者: 112345666    时间: 2016-9-29 08:25
毕竟是考题啊,综合性很大的
作者: 边_城    时间: 2016-9-29 08:30
看不懂,收藏一下

作者: wangkai426    时间: 2016-9-29 08:53
经典就是经典,全面考察,无可替代
作者: senjoeson    时间: 2016-9-29 19:27
等我有功夫的时候慢慢看,现在有点忙!!
作者: 寒冰夜    时间: 2016-9-29 20:51
有单看不懂啊...现在学到面向对象..
作者: liuhongbo    时间: 2016-9-29 20:57
边_城 发表于 2016-9-29 08:30
看不懂,收藏一下

看不懂啊
作者: liuhongbo    时间: 2016-9-29 21:00
senjoeson 发表于 2016-9-29 19:27
等我有功夫的时候慢慢看,现在有点忙!!

收藏了   是好东西
作者: liuhongbo    时间: 2016-9-29 21:08
senjoeson 发表于 2016-9-29 19:27
等我有功夫的时候慢慢看,现在有点忙!!

收藏了   是好东西
作者: liuhongbo    时间: 2016-9-29 21:09
112345666 发表于 2016-9-29 08:25
毕竟是考题啊,综合性很大的

面试 考这个吗?
作者: liuhongbo    时间: 2016-9-29 21:11
wangkai426 发表于 2016-9-29 08:53
经典就是经典,全面考察,无可替代

是挺考验学到的知识的
作者: langyabang1110    时间: 2016-9-29 21:39
Mark下  国庆的时候好好看  现在先完成作业
作者: kansyoukyou    时间: 2016-9-29 22:10
阅~~~~~~~~~~~~~~~~
作者: Zzh94520    时间: 2016-9-29 22:34
..................
作者: NewWind    时间: 2016-9-29 23:07
都是大神,太厉害了
作者: 刘野    时间: 2016-9-29 23:12
坐等....
作者: 此间的少年    时间: 2016-9-29 23:27
基础班即将毕业,现在回头看这种题,好简单啊
作者: huangweicong    时间: 2016-9-29 23:53
赞!!!!!!!!!!
作者: 112345666    时间: 2016-10-1 00:26
这道题我觉得白看不厌啊,出的挺好的一道题,考的很全面
作者: wo1026756529    时间: 2016-10-1 00:37
真的假的?这是点招题?那到时候估计时间会不够了
作者: chensc    时间: 2016-10-1 09:32
学习学习!
作者: dothings    时间: 2016-10-1 10:09
有点不懂

作者: 喝咖啡的玉米    时间: 2016-10-1 17:14
好全面,考察了面向对象的几乎所有的知识点
作者: lrwillinggerry    时间: 2016-10-1 19:47
考试只有20分钟啊,这题题目都没有需要健壮性,只要能实现功能就好了,主方法要是像你这样完善题目的话,绝对不止20分钟把,其实这题不难啦
作者: lrwillinggerry    时间: 2016-10-1 19:50
说错了,是一道题平均20分钟,
这是我的答案:
package com.heima.homework;

import java.util.Random;
import java.util.Scanner;

public class Example {
        public static void main(String[] args) {
                System.out.println("请用户输入付款方式:");
                Scanner sc = new Scanner(System.in);
                String name = sc.nextLine();
                System.out.println("请用户输入付款金额:");
                double money = sc.nextDouble();
                System.out.println(Person.buy(name).pay(money));
        }
}

abstract class Payment {
        public abstract double pay(double money);
}

class Zfb extends Payment {
        Random r = new Random();

        public double pay(double money) {
                return money - money * (r.nextInt(4) + 5) * 0.1;
        }
}

class Cash extends Payment {

        @Override
        public double pay(double money) {
                return money;
        }

}

class Person {
        public static Payment buy(String name) {
                if ("Zfb".equals(name)) {
                        return new Zfb();
                } else if ("Cash".equals(name)) {
                        return new Cash();
                } else {
                        return new Cash();
                }
        }
}
作者: 企鹅1号    时间: 2016-10-1 21:43
package com.zfb.test;

import java.util.Scanner;

import com.zfb.pay.*;
import com.zfb.person.*;

public class Test {

        public static void main(String[] args) {
                Person p = new Person();
                Scanner sc = new Scanner(System.in);
                System.out.println("请输入付款金额:");
                double money = 0;
                if(sc.hasNextDouble()||sc.hasNextInt()){
                        money = sc.nextDouble();
                }
                System.out.println("请选择付款方式:");
                System.out.println("        1:支付宝\n        2:现金\n        任意数字:其它付款方式");
                int select = 2;
                if(sc.hasNextInt()){
                        select = sc.nextInt();
                }
               
                switch(select){
                        case 1:
                                System.out.println("你最终需付款的金额为:"+p.buy("Zfb").pay(money));
                        break;
                        default:
                        case 2:
                                System.out.println("你最终需付款的金额为:"+p.buy("Cash").pay(money));
                        break;
                       
                }
        }
}
package com.zfb.pay;

public abstract class Payment {
        public abstract double pay(double money);
}
package com.zfb.pay;
import java.util.Random;

public class Zfb extends Payment {
        public double pay(double money) {
                Random r = new Random();
                double m =r.nextInt(3)+5;
                return money*(m/10);
        }
}
package com.zfb.pay;

public class Cash extends Payment {

        @Override
        public double pay(double money) {

                return money;
        }

}

package com.zfb.person;

import com.zfb.pay.*;

public class Person {
        public static Payment buy(String pay){
                if("Zfb".equals(pay)){       
                        return new Zfb();
                }else if("Cash".equals(pay)){
                        return new Cash();
                }
                return new Cash();
        }
}

作者: 企鹅1号    时间: 2016-10-1 21:47
这个考试时间是多久啊,感觉想了很久啊,因为不是熟练

作者: 112345666    时间: 2016-10-8 00:13
还不是特别懂这道题,好久没敲点招题的代码了,都生疏了
作者: 112345666    时间: 2016-10-11 00:35
此间的少年 发表于 2016-9-29 23:27
基础班即将毕业,现在回头看这种题,好简单啊

简单吗?我怎么一直觉得很有价值啊,很综合的题啊
作者: 李春林    时间: 2016-10-11 05:26
我今天考了,感觉不是很难

作者: 逃跑的鱼闯天涯    时间: 2016-10-21 00:25
楼主注释一下就好了
作者: 时光未桀    时间: 2017-2-25 10:21
Random r = new Random();                 double money2 = (r.nextInt(4)+5)*0.1*money;                 return money2;这是什么意思??可不可以用math,random




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2