目录
2、Scanner sc = new Scanner(System.in)
课前先导
我们前面也做了几个程序,可程序中的数据都是我们自己给的,而我们做开发,开发的项目是给客户的,要客户能自己输入数据,但不能让客户通过代码来修改数据,不然我们的代码谁都可以拿去用,谁都可以赋复制,所以,我们不能让客户看到我们的代码,我们要让客户通过控制台输入,这就要用到Scanner类的用法。
Scanner类是Java中util包中封装好的一个类,我们不需要去写这个类,直接引用就可以了。
一、Scanner类的用法
首先我们定义个早餐类Breakfast,我早餐一般是吃包子的,一块五一个,我们定义个字符串类型的变量foodName来存包子,定义个double变量来存单价。我每次去买包子,老板不会想给我拿几个就拿几个吧,他会问:要几个啊?我们定义个int变量的num来存我们要买的包子个数,这个是要我们自己输入的
接下来要顾客自己来输入包子的数量,要是老板想给几个就给几个,我不买了
上图就是运行的结果,因为程序是按顺序结构运行的,当程序运行到"num = sc.nextInt()"时;这条语句代表我们要输入一个int类型的数据,然后把这个数据赋值给num,我们没输入,程序就不会向下运行,最后一条语句就不会输出。
我早餐平稳发挥4个包子,超常发挥没试过,时间不够,就是感觉没吃饱
我们输入个4,然后回车,程序就会继续运行了,如果输入的数据不是int类型,那么机会报错!
二、Scanner语句分析
1、Scanner类
Scanner是java中util包中封装好的一个类,所以我们如果要用Scanner类的话一定要导入这个包;"import java.util.Scanner";我们在写代码的时候可以先不写这条语句,等输入完“Scanner sc = new Scanner(System.in)”会报错;我们把鼠标放在Scanner上,点击一下,就会在输入界面自动生成导包语句;导包语句的位置,一定要在包名和类名之间,否则会报错。
2、Scanner sc = new Scanner(System.in)
这里我们是声明了一个Scanner类的对象,java语言不就是面向对象编程嘛;这是我们跟对象这个概念的第一次接触,但我们还没学到对象,目前知道怎么用就好了,我们看下图
运用Scanner类不一定要先导包,但一定要导包。上图我们可以看到,我们声明了两个变量,都没有报错,这说明什么?类也可以做数据类型!!!这个我们先了解一下就好。
Scanner sc = new Scanner(System.in) 中 sc是对象名,就像变量名一样,可以随便定义;Scanner(System.in)是一个有参方法,目前我们还没学方法,知道一下就行。
3、Scanner获取不同类型的方法以及成员运算符(.)
import java.util.Scanner;
public class Draft {
public static void main(String[] args) {
Scanner draft = new Scanner(System.in);
byte a;
short b;
int c;
long d;
float e;
double f;
char g;
boolean h;
String x;
System.out.println("获取byte类型的数据a:");
a = draft.nextByte();
System.out.println("获取short类型的数据b:");
b = draft.nextShort();
System.out.println("获取int类型的数据c:");
c = draft.nextInt();
System.out.println("获取long类型的数据d:");
d = draft.nextLong();
System.out.println("获取float类型的数据e:");
e = draft.nextFloat();
System.out.println("获取double类型的数据f:");
f = draft.nextDouble();
System.out.println("获取char类型的数据g:");
g = draft.next().charAt(0);
System.out.println("获取boolean类型的数据h:");
h = draft.nextBoolean();
System.out.println("获取字符串数据x:");
x = draft.next();
}
}
nextByte() 从控制台获取byte类型的数据;
nextShort() 从控制台获取short类型的数据;
nextInt() 从控制台获取int类型的数据;
nextLong() 从控制台获取long类型的数据;
nextFloat() 从控制台获取float类型的数据;
nextDouble() 从控制台获取double类型的数据;
next().charAt(0) 从控制台获取字符类型的数据,Java编程语言中没有获取字符串的方法,只有通过charAt()输出字符串的第一个字符来获得;
nextBoolean() 从控制台获取boolean类型的数据;
next() 从控制台获取字符串;
语句中的" . "是成员运算符
运行结果:
获取byte类型的数据a:
1
获取short类型的数据b:
2
获取int类型的数据c:
3
获取long类型的数据d:
4
获取float类型的数据e:
1.2
获取double类型的数据f:
1.23
获取char类型的数据g:
A
获取boolean类型的数据h:
true
获取字符串数据x:
Hello
三、数据类型转换
继续我们上面的买包子程序
我买了4个包子,应该付给老板6块钱,我们定义个int类型的变量sunMoney去接收,
出问题了朋友们,报错了!
我先声明一点,我的电脑没问题,可能是开发工具MyEclipse的问题,垃圾软件,卸载。
再声明一点,MyEclipse是没问题的,
有发现:num是int类型的数据,price是double类型的数据,那他们的乘积应该是什么类型的呢?看下图
我们把sumMoney的数据类型改为double型,代码就不报错了,为什么?
因为超市的金额都是两位小数的,所以改为double保存两位小数就对了。完全是扯。
前面我们讲了数据类型在内存中的大小(详情请参考:http://t.csdn.cn/wtgXg),int类型占4个字节,double类型占8个字节,我们把4个字节内存里面的数据放入8个字节内存里面是完全可以的,把8个字节的内存放进4个字节的内存,明显是不行的。
比如我一顿能干三碗饭,婴儿一顿饭两勺奶粉,把我胃里的食物放到他的胃里放得下吗,请大家爱护生命。但两勺奶粉是不是我随便就能吃下。这就是小的内存能放进大的内存,大的内存放不进小的内存
总结:
(1)不同的基本数据类型之间进行运算时需要进行类型转换。
(2)除布尔类型外,所有基本数据类型进行运算时都要考虑类型转换,主要应用在算术运算时和赋值运算时。
算术运算时
存储位数越多,类型的级别越高。类型转换如下
byte-->short-->int-->long-->float-->double
char-->int-->long-->float-->double
赋值运算的自动转换有两种方式:
1、赋值运算时的自动类型转换
将低级别的类型赋值给高级别类型时将进行自动类型转换。
2、赋值运算是的强制类型转换
利用强制转换,我们继续用int类型的sumMoney来接收付款金额,把包子的单价转成int类型
付款金额不对了!!因为我们是把包子的单价1.5元转int类型变成了1元,参与运算的是1,所以运算结果是4;我们要转的是计算后的金额,如下图
强制类型转换有一个缺点,比如我们的金额如果不是整数,int取整就会导致小数部分丢失。
总结:
(1)强制类型转换,可能会丢失数据;
(2)存在继承关系的引用数据类型也可以进行自动转换和强制类型转换。
四、字符型的运算(char)
字符类型的运算时通过ASCLL码的值进行运算的
我们只要记住几个特殊的就够用了:
NULL(空值) 0 ; 空格 32 ; 字符0 48 ; 字符9 57 ;大写字母A 65 ; 小写字母a 97 。
大写字母和小写字母相差32;
五、print与println的区别
print输出完不会换行,println输出完会换行
六、Java中的转义字符
在java字符常量中,转义字符是用反斜杠(\)表示,作用是用来转义后面一个字符,转义后的字符通常用来表示一个不可见的字符或者有特殊作用的字符。
public static void main(String[] args) {
System.out.println("我是张三\n练习两年半;"); // \n表示换行符,将\n后面的内容进行换行
System.out.println("**********************************");
System.out.println("喜欢唱\t跳\trap\t篮球!"); // \t表示制表符,将光标移到下一个制表符的位置,相当于Tab键
System.out.println("**********************************");
System.out.println("练习两\r年\r半;"); // \r表示回车符,(换行)
System.out.println("**********************************");
System.out.println("我是\'张三\';"); // \'表示单引号字符
System.out.println("**********************************");
System.out.println("我是\"张三\";");// \"表示双引号字符
System.out.println("**********************************");
System.out.println("我是\\张三\\;");// \\表示反斜杠字符
System.out.println("**********************************");
}
运行结果:
我是张三
练习两年半;
**********************************
喜欢唱 跳 rap 篮球!
**********************************
练习两
年
半;
**********************************
我是'张三';
**********************************
我是"张三";
**********************************
我是\张三\;
**********************************
今天的学习内容就这些,其实没什么内容,大家只要记住Scanner类的固定用法就行了,数据类型转换记一下格式,基本没什么内容。关于Java的学习也有一段时间了,我们也应该做一下练习提升自己的技能,我的新栏目——Java试炼:超越上一秒,已开启,题目是和目前这个栏目所对应的,欢迎大家浏览。
1、初识Java:http://t.csdn.cn/eKTsI;
2、变量、常量和基本数据类型:http://t.csdn.cn/wovXK
今天就到此结束,我是一米八有腹肌,低于半小时你报警的ikun,觉得内容不错的点点关注,我们下篇博文见,拜拜!