标签:建议 对组 lse 程序员 bool 强制 允许 ima 程序设计语言
目录
基本类型概述
1、布尔类型 boolean:
只有true,或者false两种值,默认是false
2、字节类型 byte:
byte 字节,1 byte = 8 bits (8位)
存储有符号的,以二进制补码表示的整数
最小值-128,最大值127,默认值0
byte 类型用在大型数组中可以显著节约空间,主要代替小整数,因为 byte 变量占用的空间只有 int 类型的四分之一
byte 在二进制文件读写中使用较多
3、整数类型:
short,16位,2个字节,有符号的以二进制补码表示的整数
int, 32位,4个字节,有符号的以二进制补码表示的整数
long, 64位,8个字节,有符号的以二进制补码表示的整数
4、浮点数类型:
float,单精度,32位,4个字节
double,双精度,64位,8个字节
5、字符类型 char:
单一的 16 位 Unicode 字符
最小值是 \u0000(即为0)
最大值是 \uffff(即为65,535)
char 数据类型可以储存任何字符
在Java中,整型的范围与运行Java代码的机器无关,这就解决了软件从一个平台移植到另一个平台,或者在同一个平台的不同操作系统之间进行移植给程序员带来的诸多问题
double 类型的数值精度是 float 的两倍,因此很少情况使用 float 类型,如需要单精度数据的库,需要存储大量数据等
特别说明:
- 不能这样检测一个特定值是否等于 Double.NaN:
if(x == Double.NaN) // is never true
- 所有"非数值"的值都认为是不相同的,但可以使用 Double.isNaN方法:
if(Double.isNaN(x)) // check whether x is "not a number"
char类型的字面量值要用单引号括起来;其值可以表示为十六进制值,范围从 \u0000 到 \Uffff
警告!
- Unicode转义序列会在解析代码之前得到处理,如 "\u0022+\u0022" 是由引号包围加号构成的字符串,实际上, \u0022 会在解析之前转换为 " ,这会得到 " "+" ",即一个空串
- 当心注释中的 \u:
- 注释?
// \u00A0 is a newline
会产生一个语法错误,因为读程序时 \u00A0 会替换成换行符- 注释?
// Look inside c:\users
会产生一个语法错误,因为 \u 后并未跟着4个十六进制数
强烈建议:
有时候,变量的取值只在 有限集合 中。如果分别对其编码存在一定隐患,变量中很可能保存的是一个错误的值,因此设置枚举类型
例如,披萨的尺寸有小,中,大,超大4种,可自定义枚举类型:
enum Size { SMALL, MEDIUM, LARGE, EXTRA_LARGE };
声明这种类型的变量:
Size s = Size.MEDIUM;
Size类型的变量只能存放这个类型中给定的某个枚举值,或者 null 值(null 表示该变量没有设置任何值)
如果基本的整数和浮点数精度不能满足需求,可以使用 Java.math 包中的 BigInteger 类和 BigDecimal 类,处理包含任意长度数字序列的数值
特别注意,大数值的计算中不再使用简单运算符,而是使用方法
import java.util.*;
import java.math.*;
/**
* This program discribes big number that is about luck draw
* @version 11:27 2019-09-29
* @auther xxwang1018
*/
public class BigNumberTest{
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
System.out.println("总共几个数?");
int total=in.nextInt();
System.out.println("要抽几个数?");
int number=in.nextInt();
BigInteger lotteryOdds=BigInteger.valueOf(1);
for(int i=1; i<=number; ++i)
lotteryOdds=lotteryOdds.multiply(BigInteger.valueOf(total-i+1)).divide(BigInteger.valueOf(i));
/**
* 中奖概率 n*(n-1)*(n-2)*...*(n-k+1)/(1*2*3*...*k)
*/
System.out.println("你的中奖率为1/"+lotteryOdds);
}
}
/*
测试结果:
总共几个数?
490
要抽几个数?
60
你的中奖率为1/716395843461995557415116222540092933411717612789263493493351013459481104668848
1、隐式类型转换
当两个不同数据类型的数值进行二元操作时,先转换为同一数据类型再进行运算
2、强制类型转换
浮点类型转换为整型通过截断小数部分实现
如果试图讲一个数值从一种类型强制转换为另一种类型,又超出了目标类型的表示范围,结果会大不相同,如 (byte)300 的实际值是44
处理整型类型时,可以直接对组成整型数值的各个位进行操作;可以使用掩码技术得到整数中的各个位
位运算符包括:
&
运算符:对应位都为1,结果值对应位才为1,如:0110 & 1011=0010|
运算符:对应位都为0,结果值对应位才为0,如:0110 |?1011=1111应用在布尔值上时,& 和 | 运算符也会得到一个布尔值
它们与 && 与 || 运算符类似,但前者不采用 "短路" 方式求值,即运算符两侧的操作数都需要计算
^
运算符:对应位相同结果值对应位为0,对应位不同结果值对应位为1,如:0110 ^ 1011=1101~
运算符:结果值与初始值正好相反,如:~ 1011=0100<<
运算符:左移,N << S 的值是将?N 左移?S 位,右边空出来的位填充0,相当于乘以2的?S 次方,如:11111000 << 1=11110000>>
运算符:右移,N >> S 的值是将?N 右移?S 位,左边空出来的位如果是正数则填充0,如果是负数则填充1,相当于除以2的?S 次方,如:00010111 >> 2=00000101,11110110 >> 3=1111110>>>
运算符:无符号右移,无论正数还是负数,无符号右移后左边空出来的位都填充0,如:11111000 >>> 2=00111110移位运算符的右操作数要完成模32的运算(除非左操作数是 long 类型,此时需要对右操作数模64),如1 << 32的值等于1 << 3或8
Java没有内置的字符串类型,而是在标准Java库中提供了一个预定义类String
与绝大多数程序设计语言一样,Java语言允许使用 + 号连接两个字符串
当一个字符串与一个非字符串的值拼接时,后者被转换成字符串(任何一个Java对象都可以转换成字符串)
空串是一个Java对象,有自己的串长度(0)和内容(空)
String变量可以存放一个特殊值,名为NULL,表示目前没有任何变量与该变量关联
若要检查一个字符串既不是null也不是空串,需要使用语句 if(str != 0 && str.length() != 0),首先要检查 str 不为 null
声明数组有两种方式,int[] a或int a[],多数人喜欢使用第一种,它将类型?int[](整型数组)与变量名分开
Java中,数组长度可以是变量:new int[n] 表示创建一个长度为 n 的数组;还可以是0,但与null不同
1、一维数组
for(value: collection)
//do something with value
collection 集合表达式必须是一个数组或者是一个实现?Iterable 接口的类对象
2、二维数组
for(double[] row : a)
for(double value : row)
//do something with value
for each 语句不能自动处理二维数组的每一个元素,它是按照行,也就是一维数组处理的
1、静态初始化:初始化时显式指定每个数组元素的初始值,系统决定数组长度arrayName = new type[]{ element1, element2, element3... };
int[] intArr;
intArr = new int[]{1,2,3,4,5,9};
2、简化的静态初始化type[] arrayName =? {element1, element2, element3... };
String[] strArr = {"张三","李四","王二麻子"};
3、动态初始化:初始化时指定数组的长度,由系统初始化每个数组元素的默认值arrayName = new type[length];
int[] price = new int[4];
注意:不要同时使用静态初始化和动态初始化,即不要在进行数组初始化时,既指定数组的长度,又为每个数组元素分配初始值
Java中允许将一个数组变量拷贝给另一个数组变量,这时两个变量引用同一个数组
int[] luckNumber=intArr; //接上面的数组
luckNumber[5]=12; //now kakaka[5] is also 12
若想把一个数组的所有值拷贝到新的数组,可使用 Arrays 类的 copyOf 方法,该方法通常用来增加数组大小
int[] copyLuckNumber= Arrays.copyOf(luckNumber, luckNumber.length);
import java.util.*;
/**
* This program demonstrates a YanghuiTriangle arrey
* @version 12:29 2019-09-29
* @auther xxwang1018
*/
public class YanghuiTriangle{
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.print("请输入杨辉三角的行数:");
int n = in.nextInt();
int[][] triangle = new int[n][];
for (int i=0; i<triangle.length; i++) {
triangle[i] = new int[i+1];
for (int j = 0; j < triangle[i].length; j++) {
if (i == 0 || j == 0 || i == j) {
triangle[i][j] = 1;
} else {
triangle[i][j] = triangle[i - 1][j] + triangle[i - 1][j - 1];
}
System.out.print(triangle[i][j] + " ");
}
System.out.println();
}
}
}
/*
测试结果:
请输入杨辉三角的行数:8
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
标签:建议 对组 lse 程序员 bool 强制 允许 ima 程序设计语言
原文地址:https://www.cnblogs.com/xxwang1018/p/11606876.html