基本数据类型(续)
a. 当long类型数据的值超过int的范围时候,需要在数据后面添加L或者l标记该数据是一个long类型
b. 当小数赋值给float的时候,必须在数据的后面添加f或者F,标记是单精度,因为小数数据默认为double,赋值给float的时候有一点的损失
c. double的数据后面加不加D都可以
转义字符
\n 换行
\t tab键的效果
\“ 引号
public class Dome1{
public static void main(String[] args){
System.out.println("宝宝\n我love你");
System.out.println("123\t123");
System.out.println("这个很重要:\"我爱宝宝\"");
}
}
进制转换
二进制
逢二进一 0 1 10 …
八进制
逢八进一 0 1 2 3 4 5 6 7 10 11 …
十进制
逢十进一 0 1 2 3 4 5 6 7 8 9 10 11 …
十六进制
逢十六进一 0 1 2 3 4 5 6 7 8 9 A B C D E F 10 11…
基本类型转换
a.自动转换(小到大)
byte a=10;
int b=a;
System.out.println(b);
b.强制转换(大到小)---->强转有一定的精度损失
(需要转换的数据类型)大类型的变量名
int a=11;
byte b=(byte)a;
System.out.println(b);
基本类型之间的大小顺序(boolean不参与转换)
整型<浮点型
byte<short<int<long<float<double
char<int
char类型有2中赋值方式
①直接赋值(单引号)
char a='b';
char a='爱';
② 赋值ASCLL码值(65535以内)
char a=97
char b=29233; //爱
String转化与基本类型转化不一样(后面学习)
运算符
①算术运算符
+ - * / % ++ –
+
1.加法的加
+的两端都是数值类型(整型,浮点型,字符型)
2.连接符
+ 当两端出现字符串的时候(以后可以把别的基本类型 +”“转化为字符串)
-
1.减法的减号
2.负数的符号
*
1.乘法的乘号
/
1.当两端都是整数类型的时候 求商
2.当两端出现浮点类型的时候 求准确值
%
1.求余数
练习一:输出下列表
注意以后代码我会在eclispe里面写
public class buy {
public static void main(String[] args) {
java.util.Scanner sc =new java.util.Scanner(System.in);
//定义变量
String[] name = {"T恤","网球鞋","网球拍"};
double[] unitPrice = {245,570,320};//单价
int[] num = new int[name.length];//数量
for (int i = 0; i < name.length; i++) {
System.out.print("请输入购买"+name[i]+"数量:");
num[i]=sc.nextInt();
}
double rental = 0;//总额
double money = 0;//钱
System.out.print("请输入你付的钱的数额:");
money=sc.nextDouble();
System.out.println("* * * * * * * *消费单* * * * * * * *");
System.out.println("购买物品"+" "+"单价"+" "+"个数"+" "+"金额");
for (int j = 0; j < name.length; j++) {
System.out.println(name[j]+" "+"¥"+unitPrice[j]+" "+num[j]+" "+unitPrice[j]*num[j]);
rental+=unitPrice[j]*num[j];
}
System.out.println("折扣:"+" "+8+"折");
System.out.println("消费总金额:"+" "+"¥"+rental*0.8);
System.out.println("实际缴费金额:"+" "+"¥"+money);
System.out.println("找零金额:"+" "+"¥"+(money-rental*0.8));
System.out.println("本次购物积分:"+" "+((int)(rental*0.8/100))*3);
}
}
练习二:随机生成4位数,求各位数的和
提示:Math.random();//随机生成一个[0-1)的数
方法一:以我们学习的知识
public class Test1 {
public static void main(String[] args) {
int num=(int)(Math.random()*9000+1000); //[1000,10000) 保证了四位数
System.out.println("这个数是:"+num);
int a1=num%10;
int a2=num/10%10;
int a3=num/100%10;
int a4=num/1000;
System.out.println(a1+a2+a3+a4);
}
}
方法二:写一个方法,调用方法(可以保留小数位随机选择,这里是4位小数)
import java.math.BigDecimal;
public class NumAdd {
public static void main(String[] args) {
double random = Math.random();
// double random=0.71239;
BigDecimal b = new BigDecimal(random);//把double类型转化为BigDecimal
BigDecimal num=b.setScale(4,BigDecimal.ROUND_DOWN);//只保留四位小数
System.out.println(num);
double doubleValue = num.doubleValue();//把BigDecimal转化为double
int a = (int) (doubleValue*10000);//强转
for(;DaffodilNumber.count(a)!=4;) { //判断最后*10000后是否是4为数 DaffodilNumber为自定义函数,count返回值为数位
random = Math.random();
b = new BigDecimal(random);
num=b.setScale(4,BigDecimal.ROUND_DOWN);
System.out.println(num);
doubleValue = num.doubleValue();
a = (int) (doubleValue*10000);
}
System.out.println("最后=="+num);
System.out.println(a);
int daffodilNumber = DaffodilNumber.daffodilNumber(a);//DaffodilNumber为自定义函数,daffodilNumber分裂数位
System.out.println();
System.out.println(daffodilNumber);
}
}
public class DaffodilNumber {
/**
* 数位分裂
* @param num
* @return
*/
public static int daffodilNumber(int num) {
// boolean flat = false;
int add=0;
int count=DaffodilNumber.count(num);
int[] b =new int[count];//定义数组
for(int i=0;i<b.length;i++,count--) {
int num1= (int) Math.pow(10, count-1);
b[i]=(int)num/num1;
if(num>10) {
num=num-b[i]*num1;
}
}
for (int i : b) {
System.out.print("*****"+i);
add+=i;
}
return add;
// return flat;
}
/**
* 数位计算器
* @param num
* @return
*/
public static int count(int num) {
int count=0; //计数器
int temp=num;//中间量
while (temp>=1) { //判断数位
temp/=10;
count++;
}
return count;
}
}
++
1.++在前
int i=10;
int j=++i; //①i的值先自增 ②再把i的值赋值给++i; ③将++i的值赋值给j
System.out.println("i="+i); //11
System.out.println("j="+j); //11
2.++在后
int i=10;
int j=i++; //①先把i的值赋值给i++ ②i在自增; ③将i++的值赋值给j
System.out.println("i="+i); //11
System.out.println("j="+j); //10
--
同++一样
练习:
1.写出下面的结果
public class TestSign{
public static void main(String[] args){
int i1 = 10;
int i2 = 20;
int i = i1++;
System.out.print(“i=”+i);//10
System.out.println(“i1=”+i1);//11
i = ++i1;
System.out.print(“i=”+i);//12
System.out.println(“i1=”+i1);//12
i = i2--;
System.out.print(“i=”+i);//20
System.out.println(“i2=”+i2);//19
i = --i2;
System.out.print(“i=”+i);//18
System.out.println(“i2=”+i2);//18
}
}
2.写出下面的结果
int i=5;
int j=10;
int k=i++ + ++j;//从左到右 4+11
System.out.println(k);//16
int h=i++ + i+j;//6+7+11
System.out.println(h); //24
②关系运算符 结果都为boolean类型
> >= < <= == !=
1. > >= < <= 的两端为数值类型
int a=10;
System.out.println(a>6); //false
2. == != 可以为boolean类型
boolean a=true;
System.out.println(true!=false); //true
③赋值运算符
= += -= *= /= %=
int a=10;
a+=6; //a=a+6
a*=8; //a=a*8;
a%=3; //a=a%3;
④逻辑运算符
并且 :同真为真,一假为假
&&(短路与)
前面的不成立,则不执行后面的
&
前面的不成立,则不执行后面的
int a=10;
boolean flst=(a>15&&a++>9);
System.out.println(flst); //false
System.out.println(a); //10
int b=10;
boolean falt=(b>15&b++<9);
System.out.println(falt); //false
System.out.println(b); //11
或者 :同假为假,一真为真
||(短路或)
前面的成立,则不执行后面的
|
前面的不成立,则不执行后面的
int a=10;
boolean flst=(a>1||a++>19);
System.out.println(flst); //true
System.out.println(a); //10
int b=10;
boolean falt=(b>1|b++<19);
System.out.println(falt); //false
System.out.println(b); //11
非
! 取反
异或:相同为假,不同为真
^
int a=10;
boolean flst=(a>1^a++>19);
System.out.println(flst); //true
System.out.println(a); //11
int b=10;
boolean falt=(b>1^b++<9);
System.out.println(falt); //false
System.out.println(b); //11
⑤三目运算符
语法: 条件?语句1:语句2;
int a=10;
double b=20;
System.out.println(5>3?a:b); //10.0 注意类型转换
⑥位运算符 (了解)
主要了解 <<(左移) >>(右移)这两个
二进制运算
System.out.println(5<<2); //相当与5*2^2 20
System.out.println(8>>2); //相当于8/2^2 2
现在不考虑负数, 负数涉及源码,反码,补码
运算符的优先级
提示说明:
(1)表达式不要太复杂
(2)先算的使用()