Java基本数据类型+包装类
这一博客简单的介绍一下Java的基本数据类型以及数据的运算、类型转换、赋值
今晚补齐,稍安勿躁。
基本数据类型对应包装类
基本类型 包装类(java.lang)
byte Byte
short Short
int Integer
long Long
float Float
double Double
boolean Boolean
char Character
#包装类支持的常量和方法:
MAX_VALUE:获取相对应基本类型的最大值
MIN_VALUE:获取相对应基本类型的最小值
parseXXX(String str):可以将字符串转转为对应的基本类型数据
进制
bit位、byte字节、
进制转换【系数、基数、权】、八进制0、十六进制0x
原码、反码、补码
运算符运算
-
算术运算符
+ - * / %(取余) ++ --
-
赋值运算符
= += -= *= /= %=
-
比较运算符,false|true
> >= < <= == !=
-
逻辑运算符,一错全错|全对才对
&(与)并且 |(或)或者 !(非)否则 短路与&& 短路或||
-
三目运算符,结果二选一
A=B?C:D
类型转换
包装类、基本数据类型、字符串、数组
基本类型和包装类互转
#jdk1.5新特性:自动拆装箱
int num = Integer.valueOf(1); //自动拆箱(Integer->int) 通过valueOf(xx)方法生成对应的包装类
Integer num1 = 1; //自动装箱(int->Integer)
#包装类转换为基本类型数据:xxxValue()
Double d = new Double(1.1); //此处的1.1是double类型的字面量,通过new的方式生成对应的包装类
double dou = d.doubleValue(); //通过xxxValue()方法生成对应的基本类型
同种类型相互转换:大范围 <==> 小范围
#向下转型/强转 #向上转型/自动转
Object[] arr = new Object[10];
arr[0] = Integer.valueOf(1); //向上转型(Integer->Object)
Integer i = (Integer)arr[0]; //向下转型(Object->Integer)
arr[1] = 2; //jdk1.5之后合法(原因:自动拆装箱)
数字转换为大类型:double =>BigDecimal int=>BigInteger
#BigDecimal也支持valueOf()方法 加:add() 减:subtract() 乘:multiply() 除:divide()
#BigInteger也支持valueOf()方法 加:add() 减:subtract() 乘:multiply() 除:divide()
BigDecimal d1 = BigDecimal.valueOf(3.0); //通过valueOf(xx)方法生成对应的大类型
BigDecimal d2 = BigDecimal.valueOf(2.6);
BigDecimal d3 = d1.subtract(d2);
字符串转换为数字:String =>int String =>double
#字符串转换为基本类型数据:parseXXX(String str) 注意:字符串的格式必须要完全匹配基本类型的值
String doubleStr = "12.3"; //字符串String
double d = Double.parseDouble(doubleStr); //浮点型double
字符串转换为数组:String =>char[] String =>String[] String =>byte[]
#字符串转换为char数组:String.toCharArray()
String str = "123abc"; //字符串
char[] arr = str.toCharArray(); //char数组
#字符串转换为String数组:String.split()
String str = "123abc";
String[] arr = str.split("");
for (int i = 0; i < arr.length; i++) { // String数组
System.out.print(arr[i]); // 输出 1 2 3 a b c
}
#字符串转换为byte数组:String.getBytes()
String str = "123abc" ; //字符串
byte [] arr = str.getBytes(); //byte数组
使用 split() 方法注意如下:
如果用“.”或“|”作为分隔的话,必须是如下写法,String.split("\.") 或 String.split("\|"),这样才能正确的分隔开,不能用 String.split(".") 或 String.split("|")。
如果在一个字符串中有多个分隔符,可以用“|”作为连字符,如“acount=? and uu =? or n=?”,把三个都分隔出来,可以用 String.split(“and|or”);
数组转换为字符串:String[] =>String char[] =>String
#String字符串数组转化为字符串:通过字符串拼接
String[] arr = { "123", "abc" };
StringBuffer sb = new StringBuffer();
for (int i = 0; i < arr.length; i++) {
sb.append(arr[i]); // String并不拥有append方法,所以借助 StringBuffer
}
String sb1 = sb.toString();
System.out.println(sb1); // 输出123abc
#char字符数组转化为字符串:String.copyValueOf(charArray)
char[] arr = { 'a', 'b', 'c' };
String string = String.copyValueOf(arr);
System.out.println(string); // 输出abc
#common-lang3的jar包:StringUtils.join()
String[] str = { "1", "2", "a", "b" };
StringUtils.join(str); // 将数组变成字符串
StringUtils.join(str, ","); // 将数组用逗号分隔变成字符串
时间和时间互转:String =>Date =>Calendar =>Date =>String
#字符串时间转换为Date时间:SimpleDateFormat("日期格式").parse(str)
String str = "2008-08-08 20:08:08"; //时间字符串
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //转换类
Date date = sdf.parse(str); //Date时间
#Date时间转换为Calendar时间:calendar.setTime(date)
Calendar calendar =Calendar.getInstance(); //Calendar时间
Date date = new Date(); //Date时间
calendar.setTime(date); //Calendar时间
#Calendar时间转换为Date时间:calendar.getTime()
Calendar calendar = Calendar.getInstance(); //Calendar时间
Date date = calendar.getTime(); //Date时间
#Date时间转换为字符串时间:SimpleDateFormat("日期格式").format(date);
Date date = new Date(); //Date时间
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒"); //转换类
String str1 = sdf.format(date); //时间字符串
流程赋值
流程:if、switch、where、do where、for、for for
控制:continue、break、return
循环
#水仙花数(三位数中各位数字的立方和等于该数本身)
public static void main(String[] args) {
int count = 0;//计数器
for(int i = 100;i<=999;i++) {
int gw = i%10;
int sw = i/10%10;
int bw = i/100;
if(gw*gw*gw+sw*sw*sw+bw*bw*bw==i) {
count++;
System.out.println(i+"是水仙花数");
}
}
System.out.println("水仙花数有"+count+"个");
}
#乘法口诀表
public static void main(String[] args) {
for(int i = 1;i<=9;i++) {//控制行数
for(int j = 1;j<=i;j++) {//控制列数
System.out.print(j+"*"+i+"="+i*j+'\t');
}
System.out.println();
}
}
#百钱百鸡(5元公鸡、3元母鸡、1元三只小鸡)
public static void main(String[] args) {
for(int x = 0;x<=20;x++) {//表示公鸡数
for(int y = 0;y<=33;y++) {//表示母鸡数
if(5*x+3*y+(100-x-y)/3==100&&(100-x-y)%3==0) { //钱数一百,小鸡整只
System.out.println("公鸡:"+x+",母鸡:"+y+",小鸡:"+(100-x-y));
}
}
}
}
#随机两个整数的平方和等于50
public static void main(String[] args) {
Random rd = new Random();
int x,y;
int count = 0;
do {
x = rd.nextInt(10);//[0,9]
y = rd.nextInt(10);
count++;
}while(x*x+y*y!=50);
System.out.println(x+","+y);
System.out.println("循环了"+count+"次");
}
三目
#奇偶
int num = 5;
String str = num%2==0?(num+"是偶数"):(num+"是奇数");
#分页(总行数rows,行数size,页数pages)
int rows=101;
int size=10;
int pages = rows%size==0?rows/size:rows/size+1;
#三目嵌套:等级ABC
int score =59;
char grade = score>=90?'A':(score<60?'C':'B');
判断
#比较大小,顺序输出(从小到大)
if(a>b) {
int temp = a;
a = b;
b = temp;
}
System.out.println(a+","+b);
#成绩,对应的等级,判定奖学金的金额
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个百分制成绩:");
int score = sc.nextInt();
String level = "";
switch(score/10) {
case 10:
case 9:level = "优秀";break;
case 8:level = "良好";break;
case 7:level = "中等";break;
case 6:level = "及格";break;
default:level = "不及格";break;
}
System.out.println("等级:"+level);
int bonus;
switch(level) {
case "优秀":bonus = 2000;break;
case "良好":bonus = 500;break;
case "中等":bonus = 50;break;
default:bonus = 0;break;
}
System.out.println("奖学金:"+bonus+"元");
}
累加
#累加:计算PI值(3.1415926……):PI=4*(1-1/3+1/5-1/7+1/9-1/11+1/13-1/15...)
double sum = 0;
for(int i = 1;i<=1000001;i+=4) {
double n = 1.0/i-1.0/(i+2);
sum += n; //相当于sum = sum+n;
}
System.out.println(sum*4);
递归
#递归:斐波那契数
public static long f(int n) {
if(n==1||n==2) {
return 1;
}
return f(n-1)+f(n-2);
}
双色球
import java.util.Arrays;
import java.util.Random;
public class DoubleColorBalls_v1 {
/**
* 双色球随机选号
* 1.红球:01~33里面随机的取出6个,
* 不能重复,按顺序排序(升序)
* 2.篮球:01~16里面随机的取出1个
*/
public static void main(String[] args) {
//红球池
String[] redPools = {"01","02","03",
"04","05","06","07","08","09",
"10","11","12","13","14","15",
"16","17","18","19","20","21",
"22","23","24","25","26","27",
"28","29","30","31","32","33"};
//定义一个用于存放红球的数组(球管)
String[] balls = new String[6];
//创建一个Random随机对象
Random rd = new Random();
int i = 0;
while(true) {
//随机下标
int index = rd.nextInt(redPools.length);
//通过随机下标取出一个红球并放置到球管中
balls[i] = redPools[index];
//让红球池中最后一个元素覆盖掉取出的元素
redPools[index] =
redPools[redPools.length-1];
//通过缩容的方式删除红球池最后一个元素
redPools =
Arrays.copyOf(redPools,redPools.length-1);
i++;
//当球管中放满6个红球,循环结束
if(i==6) {
break;
}
}
Arrays.sort(balls);
System.out.println(Arrays.toString(balls));
//篮球池
String[] bluePools = {"01","02","03",
"04","05","06","07","08","09",
"10","11","12","13","14","15",
"16"};
//取出一个随机的篮球
String blueBall =
bluePools[rd.nextInt(16)];
//把球管扩容一位
balls =
Arrays.copyOf(balls,balls.length+1);
//把篮球放置到球管的最后一个位置
balls[balls.length-1] = blueBall;
System.out.println(Arrays.toString(balls));
}
}
import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;
public class DoubleColorBalls_v2 {
public static void main(String[] args) {
/*
* 需求:
* 控制台输入你要购买的注数,
* 打印对应注数的双色球号码
*/
Scanner sc = new Scanner(System.in);
System.out.println("请输入你要购买的注数:");
int num = sc.nextInt();
for(int i = 0;i<num;i++) {
System.out.println(Arrays.toString(gen()));
}
}
//将随机生成一注双色球号码的代码封装成方法
public static String[] gen() {
//红球池
String[] redPools = {"01","02","03",
"04","05","06","07","08","09",
"10","11","12","13","14","15",
"16","17","18","19","20","21",
"22","23","24","25","26","27",
"28","29","30","31","32","33"};
//定义球管
String[] balls = new String[6];
//创建Random随机对象
Random rd = new Random();
//给每一个红球贴一个标签,标签的初始状态为false
boolean[] flags = new boolean[33];
int i = 0;
do {
//随机下标
int index = rd.nextInt(33);
//取红球前判断红球对应的标签状态
//如果标签状态为true,结束当次循环
if(flags[index]) {
continue;
}
//通过随机下标取出红球放置到球管中
balls[i++] = redPools[index];
//取出红球后,把对应的标签状态改为true
flags[index] = true;
}while(i!=6);
Arrays.sort(balls);
//将球管扩容一位存放篮球
balls = Arrays.copyOf(balls,7);
balls[6] = redPools[rd.nextInt(16)];
return balls;
}
}