练习:17

原题目是:

你准备去海南旅游,现在要订购机票。机票的价格受季节旺季,淡季影响,而且头等舱和经济舱价格也不同。假设机票原价为5000元,4~10月为旺季,旺季头等舱九折,经济舱打八折,淡季头等舱打五折,经济舱打四折。编写程序,使用嵌套if选择结构,根据出行的月份和选择的舱位输出实际机票的价格。

如下:

请输入您出行的月份:1~12

5

请问你选择头等舱还是经济舱?头等舱请输入1,经济舱输入2

2

您的机票价格为:3000.0

注:粗,斜体为从键盘录入的数据。

分析及执行:

  • 使用if镶嵌结构
  • 使用mo保存月份
  • 使用air对飞机舱位进行划分
  • 使用if镶嵌结构对旺季时的头等舱及经济舱进行划分
  • 使用if多重结构,对淡季时头等舱及经济舱进行划分
  • 逻辑问题,很费脑筋!思考了一晚上才弄出来,而且因为对if镶嵌不熟悉,所以吃了不少亏。。。

参考代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import java.util.Scanner;
public class P96_2{
    public static void main (String[]args){
        Scanner input = new Scanner(System.in);
        System.out.println("请输入出行的月份:1~12");
        int mo = input.nextInt();//从键盘录入数字
        if ( mo <= 12 && mo >= 1 ){ //检测输入的月份是否正确
            System.out.println("请问你选择头等舱还是经济舱?头等舱请输入1,经济舱输入2");//若正确则提示下一项,否则结束
        } else {
            System.out.println("数字输入错误,请确认输入的是月份!");//错误提示
        }
        double num = 5000 ;//定义机票原价为5000
        int air = input.nextInt(); //录入飞机舱位
        if (  mo >= 4 && mo <= 10  ){ //头等舱,旺季所享受的折扣,及输出提示
            if ( air == 1  ){//经济舱,旺季所享受的折扣,及输出提示
                num = num * 0.9 ;
                System.out.println("您的机票价格为1:\t"+num);
            } else if ( air == 2 ) {
            num = num * 0.8 ;
            System.out.println("您的机票价格为2:\t"+num);
        } }
        System.out.println("**********************************");
         if (  mo <=3 || mo > 10 && mo <= 12 ) {//头等舱,淡季所享受的折扣,及输出提示
             if ( air == 1 ) {
            num = num * 0.5 ;
            System.out.println("您的机票价格为3:\t"+num);
        } else if ( air == 2  )  {//经济舱,淡季所享受的折扣,及输出提示
            num = num * 0.4 ;
            System.out.println("您的机票价格为4:\t"+num);
    }
        else {
        }
        }
      }
}

练习15之:真正的难题

 

  • 这是我遇到的真正一个难题,思考了很久,问了表叔(资深java工程师),问了老师
  •  解决这个题的时候,遇到的最大问题是:1.逻辑问题;2.表现问题.
  •  这个问题让我的求知欲变得特别强烈!
  •  通过这个问题,我学到了很多.
  •  继续努力,加油!

这个问题让我思考了整整一天,晚上回来,弄了半晚上.目前也只能做到这样了,修改了大部分BUG,也测试了很多遍.

下面是源代码,源代码结尾有开发思路,就不赘述了.因为对if镶嵌结构还不熟悉,所以源代码没有使用if镶嵌结构.

问题是:

在控制台输出以下信息:

请输入消费金额:
1000
是否参加优惠换购活动:
1.满50元,加2元换购百事可乐饮料一瓶
2.满100元,加3元换购500ml可乐饮料一瓶
3.满100元,加10元换购5公斤面粉
4.满200元,加10元换购一个苏泊尔炒菜锅
5.满200元,加20元可换购欧莱雅爽肤水一瓶
0:不换购
请选择:
5
本次消费总金额:1020
成功换购:欧莱雅爽肤水一瓶

*:红色斜体数字表示需要用户从控制台输入.

 

1
参考代码(源代码)如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
/*
 * 这是我遇到的真正一个难题,思考了很久,问了表叔(资深java工程师),问了老师
 * 解决这个题的时候,遇到的最大问题是:1.逻辑问题;2.表现问题.
 * 这个问题让我的求知欲变得特别强烈!
 * 通过这个问题,我学到了很多.
 * 继续努力,加油!
 */
import java.util.Scanner;
public class P92_4{
    public static void main (String[]args){
        Scanner input = new Scanner (System.in);
        System.out.println("首先要感谢我表叔(资深java工程师),做这道题的时候,他帮助了我很多.");//写在前面的感谢词
        System.out.println("*******************************");
        System.out.println("温馨提示:亲,当购物总额大于10亿时,请切换到时光模式进行运算\n");
        System.out.println("请输入消费金额:");//提示用户进行输入,并开小玩笑
        int num = input.nextInt();//从键盘录入数据,存入num
      if ( num &gt;0 &amp;&amp; num &lt; 50 ){ //使用if结构,定义num大于0并且小于50的时候,提示不符合活动           System.out.println("对不起,您的购物总额不足此次活动的最少金额,感谢您对本商场的支持!");//输出语句,提示不符合活动要求          }       else { //else语句在这里的作用是:当用户输入的消费金额不足50元时,使下面的语句不在运行,也就是起一个截断的作用      System.out.println("是否参加优惠换购活动:");          System.out.println("1.满50元,加2元换购百事可乐饮料一瓶");         System.out.println("2.满100元,加3元换购500ml可乐饮料一瓶");         System.out.println("3.满100元,加10元换购5公斤面粉");      System.out.println("4.满200元,加10元换购一个苏泊尔炒菜锅");       System.out.println("5.满200元,加20元可换购欧莱雅爽肤水一瓶");        System.out.println("0:不换购");      System.out.println("请选择:");       }       int add = input.nextInt();//从键盘录入数据,存入add         if  ( add == 0 ) { //add=0的时候,提示感谢            System.out.println("您选择不参加此次优惠换购活动,感谢您对本商场的支持!");       }       else if ( num &gt;=50 &amp;&amp; num &lt; 100 ){ //当金额大于50,小于100时运行此if结构内的代码          switch(add) {           case 1 :                num = num + 2 ;                 System.out.println("本次消费总金额:"+num);               System.out.println("成功换购:百事可乐饮料一瓶");                break;              }       }       else if ( num &gt;= 100 &amp;&amp; num &lt; 200 ){ //当金额大于100,小于200时运行此if结构内的代码       switch (add) {      case 2 :            num = num + 3 ;             System.out.println("本次消费总金额:"+num);           System.out.println("成功换购:500ml可乐饮料一瓶");             break;      case 3 :            num = num + 10 ;            System.out.println("本次消费总金额:"+num);           System.out.println("成功换购:5公斤面粉");           break;      }       }       else if ( num &gt;=200 &amp;&amp; num &lt; 1000000000 ){ //当金额大于200,小于10亿时运行此if结构内的代码
               switch (add){
               case 4 :
                    num = num + 10 ;
                    System.out.println("本次消费总金额"+num);
                    System.out.println("成功换购:一个苏泊尔炒菜锅");
                    break;
                case 5 :
                    num = num + 20 ;
                    System.out.println("本次消费总金额:"+num);
                    System.out.println("成功换购:欧莱雅爽肤水一瓶");
                    break;
                default:
                    System.out.println("\n选择错误,请输入相应选项:\n购物总额大于50小于100请选择:1.\n购物总额大于100并且小于200请选择:2或3.\n购物总额大于200请选择:4或5.");
                    break;
               }
        }
        else  {
            System.out.println("检查一下,是不是输入错了,然后重新运行");
            }
               System.out.println("\n\n************运算结束,下面是提示内容*********");
               System.out.println("此版本与书上相比,增加了以下内容,并严格了某些条件:");
               System.out.println("1.消费金额必须与促销条件符合(比如:消费金额为50元,就不能选择满100元及其他的活动)");
               System.out.println("2.消费金额小于50元将提示错误,后面的代码停止运行");
               System.out.println("3.消费金额最大不能超过10亿(写成数字类型:1000000000),因为我发现int类型能储存的最大值是10亿,否则报错");
               System.out.println("4.由于jvm(java虚拟机)是由main开始执行程序(由上到下),因此不能把int add = input.nextInt();这样的语句写在if结构内,否则在当前if结构外的调用将出错");
               System.out.println("5.当消费金额小于50时,本提示也不会出现..");
               System.out.println("*********************");
               System.out.println("实现思路:");
               System.out.println("1.从键盘录入数据,存入变量num");
               System.out.println("2.以if结构来判断num是否大于0,小于50.\n\t若满足此条件则提示:对不起,您的购物总额不足此次活动的最少金额,感谢您对本商场的支持!\n\t并用else结构将即将输入的5个条件包含起来.\n\t*此步骤可省略,若需严格可保留此步骤");
               System.out.println("3.以system.our.println输出书上显示的5个条件,数据必须为:1,2,3,4,5,0");
               System.out.println("4.从键盘录入数据,存入变量:add.");
               System.out.println("5.使用if多重结构,分别对50,100,200三个数之间的关系进行定义");
               System.out.println("6.使用switch在if多重结构中,进行运算及提示");
               System.out.println("7.使用else提示错误");
               System.out.println("8.大功告成!");
    }
 }

练习:14

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/*
 * 书83页
 */
import java.util.*;
public class Test15{
    public static void main (String[]args){
        Scanner input = new Scanner(System.in);
        System.out.println("请输入会员积分:");//录入会员积分
        double x = input.nextDouble();
        if ( x < 2000 ){ //x大于2000时,折扣为9折
            if (( x>=2000 )&& ( x <= 4000 ))
            x= x*0.9 ;
        } else   {
            x=x*0.8; //x大于2000,小于4000时,折扣为8折
        }   if ((x>=4000)&&(x<=8000)) {
            x=x*0.7; //x大于4000,小于8000时,折扣为7折
        }   if (x>=8000)  {
            x=x*0.6; //x大于8000时,折扣为6折
        }
        else {
            System.out.println("输入错误,请检查!");
        }
                       
        }
    }

使用if多重结构解决问题.