重拾java(二):基本语法实践

前言

我把java基本语法单元定义为构成一个简单java语句所需要的基本单元,这其中必然包括:

  • 1.数据类型:java中可以存在哪些类型的数据
  • 2.变量类型:可以用哪些方式去声明这些数据类型,也就是变量的声明与使用,声明变量的修饰符及其使用场景
  • 3.运算符:变量和变量之间通过运算符连接后的操作。
  • 4.通过提前粗略获知Java函数间调用,类和对象等皮毛把之前的语法单元串联起来写个学习用程序。

场景模拟

我们先模拟一个场景:水果店买水果(水果店只接受整斤的买),从妈妈那里拿了50块钱去买水果,苹果6元1斤,橘子7元1斤,葡萄10.5元1斤,妈妈要求买4斤橘子或者3斤葡萄,其余的钱可以用来买另一种水果,剩下多少钱就买多少斤,并且把找零告诉她,有多少种方案呢,都输出出来。

分析与实践

首先这个场景涉及哪些数据类型:整型数(int),浮点数(float,double,根据大小自己选择类型),字符串(String),可能有些不涉及(byte,short,long,char,boolean);
像钱总数,各个水果的价格,这些我们应该提前把他们声明出来,暂时直接声明在类的前面,我们强行用两种小数方式声明变量;然后输出的话当然是在main函数中,所以先把这个函数写一下,运行一下,看看有啥问题没,没有问题,继续;

public class GrammarUnit {
    //这里要扩展学习一下各变量的主要声明方式
    double totalAmount = 50;
    float applePrice=6.0f,orangePrice=7.0f,graperPrice=10.5f;

    public static void main(String []args){
        System.out.println("我要开始思考我的购买方案了");

    }
}

应该写一个功能函数用来计算出各种方案,我们现在还不能用一些条件语句来自动帮助我们遍历出所有搭配,但是因为搭配比较少,所以自己也能想出来,就是苹果-橘子(4斤),苹果-葡萄(3斤),橘子(4斤)-葡萄,橘子-葡萄(3斤)。
我们这个功能函数先把选定一种水果后剩下的钱给算出来。定义了函数之后需要在main函数中调用,这里是买橘子的情况。

public class GrammarUnit {
    //这里要扩展学习一下各变量的主要声明方式
    public static double totalAmount = 50;
    public float applePrice=6.0f,orangePrice=7.0f,graperPrice=10.5f;

    //现在我们还不怎么熟悉对象的概念,所以计算函数的参数比较多
    public void calculate(String fruitName, float fruitPrice, int fruitGram,double amount){
        double leftAmount = 0;
        leftAmount = amount - fruitGram * fruitPrice;
        System.out.println("买了"+fruitGram+"斤"+fruitName+",还剩"+leftAmount+"块钱!");
        //找零
        float charge = 0.0f;
        //另一种水果重量
        int otherFruitGram = 0;

        charge = (float)leftAmount%applePrice;
        otherFruitGram = (int)(leftAmount/applePrice);
        System.out.println("剩下的买了"+otherFruitGram+"斤苹果,找零"+charge+"块钱!");
        charge = (float)leftAmount%graperPrice;
        otherFruitGram = (int)(leftAmount/graperPrice);
        System.out.println("也可以买"+otherFruitGram+"斤葡萄,找零"+charge+"块钱!");

    }
    public static void main(String []args){
        System.out.println("我要开始思考我的购买方案了");

        GrammarUnit grammarUnit = new GrammarUnit();
        System.out.println("买3斤橘子吧,葡萄太贵");
        grammarUnit.calculate("橘子",orangePrice,4,totalAmount);

    }
}

当我们在main方法中实例化Grammar类,然后通过grammarUnit对象调用方法calculate时,发现程序报错了

grammarUnit.calculate("橘子",orangePrice,4,totalAmount);

Non-static field ‘orangePrice’ cannot be referenced from a static context,上下文环境中找不到静态变量,所以究竟在类中要怎么声明静态变量,怎么使用?

从程序中可以发现,我们在calculate函数中声明了leftAmount变量,

这是个局部变量,在语句块结束时即被销毁,只在方法中可见,且需要一个初始值;在类中其实还有两种声明变量的方式,在方法或者语句块之外,一种是

实例变量:实例变量就是我们可以通过实例化的对象访问的变量,对象销毁实例变量也就销毁了,当然我们可以通过访问修饰符来设定实例变量是否对子类可见,可以不指定默认值,不指定就是0,false,null等等,不细说,另一种是

类变量:类变量也叫静态变量,因为它跟着一个static的修饰符,它并不跟着实例对象创建,所以只有跟类相关的一份拷贝,一般被作为常量。

回到刚才的报错:无法从静态上下文中引用非静态变量,既然实例变量在方法中可见,为啥还是不可以,因为main函数是一个静态方法,是一个程序执行的入口,java虚拟机调用它不需要创建实例化对象去访问,而水果价格是一个实例变量,需要对象实例化后去访问,main函数的上下文环境是静态的,不存在对象,就没法访问需要对象才能访问的变量(暂时理解这么多了),所以在main函数中访问实例变量我们需要一个实例化对象,即grammarUnit,或者也可以将价格设为静态变量。totalAmount就没有禁忌了,可以在任意方法中访问。

最终完善一下的代码是这样的:

public class GrammarUnit {
    //这里要扩展学习一下各变量的主要声明方式
    public static double totalAmount = 50;
    public float applePrice=6.0f,orangePrice=7.0f,graperPrice=10.5f;

    //现在我们还不怎么熟悉对象的概念,所以计算函数的参数比较多
    public void calculate(String fruitName, float fruitPrice, int fruitGram,double amount){
        double leftAmount = 0;
        leftAmount = amount - fruitGram * fruitPrice;
        System.out.println("买了"+fruitGram+"斤"+fruitName+",还剩"+leftAmount+"块钱!");

        float charge = 0.0f;
        int otherFruitGram = 0;
        switch(fruitName){
            case "橘子":
                charge = (float)leftAmount%applePrice;
                otherFruitGram = (int)(leftAmount/applePrice);
                System.out.println("剩下的买了"+otherFruitGram+"斤苹果,找零"+charge+"块钱!");
                charge = (float)leftAmount%graperPrice;
                otherFruitGram = (int)(leftAmount/graperPrice);
                System.out.println("也可以买"+otherFruitGram+"斤葡萄,找零"+charge+"块钱!");
                break;
            case "葡萄":
                charge = (float)leftAmount%applePrice;
                otherFruitGram = (int)(leftAmount/applePrice);
                System.out.println("剩下的买了"+otherFruitGram+"斤苹果,找零"+charge+"块钱!");
                charge = (float)leftAmount%orangePrice;
                otherFruitGram = (int)(leftAmount/orangePrice);
                System.out.println("也可以买"+otherFruitGram+"斤橘子,找零"+charge+"块钱!");
        }
    }
    public static void main(String []args){
        System.out.println("我要开始思考我的购买方案了");

        GrammarUnit grammarUnit = new GrammarUnit();
        System.out.println("买3斤橘子吧,葡萄太贵");
        grammarUnit.calculate("橘子",grammarUnit.orangePrice,4,totalAmount);
        System.out.println();
        System.out.println("葡萄比较好吃,我要买葡萄");
        grammarUnit.calculate("葡萄",grammarUnit.graperPrice,3,totalAmount);

    }
}

结果:

我要开始思考我的购买方案了
买3斤橘子吧,葡萄太贵
买了4斤橘子,还剩22.0块钱!
剩下的买了3斤苹果,找零4.0块钱!
也可以买2斤葡萄,找零1.0块钱!

葡萄比较好吃,我要买葡萄
买了3斤葡萄,还剩18.5块钱!
剩下的买了3斤苹果,找零0.5块钱!
也可以买2斤橘子,找零4.5块钱!

总结

自己想了一个模拟场景主要还是熟悉java编程,简单入个门,里面涉及了一些java基础知识:java基本数据类型;java变量类型;java修饰符;
java运算符;java条件语句都可以展开学习,当然最重要的是写出来。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值