前言
我把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条件语句都可以展开学习,当然最重要的是写出来。