基本数据类型与数组
基本数据类型
逻辑类型 boolean
boolean male = true, on = true, off = false, isTriangle;
整数类型byte
型 分配1个字节内存,占8位short
型 分配2个字节内存int
型 4个字节内存long
型 用后缀L表示,分配8个字节
long width = 12L, height = 2005L, length;
字符类型 char
使用单引号,分配2个字节内存
char x = 'a';
char x = 97; // 97是字符a在Unicode表中的排序位置
char ch1 = '\n', ch2 = '\"', ch3 = '\\';
\n
换行
\b
退格
\t
水平制表
\'
单引号
\"
双引号
浮点类型float
型 后边必须有后缀 f 或 F,分配8个字符内存, 保留8位有效数字
float x = 22.76f, tom = 1234.987f, weight = 1e-12F;
double
型 后面可以有后缀 d 或 D, 但允许省略,分配8个字节内存,保留16位有效数字
double height = 23.345, width = 34.56D, length = 1e12;
例子1
public class Emaple2_1 {
public static void main(String args[]) {
char chinaWord = '好', japanWord = 'い';
char you = '\u4F60';
int position = 20320;
System.out.println("汉字:"+chinaWord+"的位置:"+(int)chinaWord);
System.out.println("日文:"+japanWord+"的位置:"+(int)japanWord);
System.out.println(position+"位置上的字符是:"+(char)position);
position = 21319;
System.out.println(position+"位置上的字符是:"+(char)position);
System.out.println("you:"+you);
}
}
类型转换运算
不包括逻辑类型,类型按精度从低到高排序
byte, short , char, int, long, float, double
当把级别的变量的值赋给级别高的变量时,系统自动完成数据类型的转换
例子2
public class Example2_2 {
public static void main(String args[]) {
byte b = 22;
int n = 129;
float f = 123456.6789f;
double d = 123456789.123456789;
System.out.println("b= "+b);
System.out.println("n= "+n);
System.out.println("f= "+f);
System.out.println("d= "+d);
b = (byte)n;
f = (float)d;
System.out.println("b= "+b);
System.out.println("f= "+f);
}
}
输入数据
import java.util.Scanner;
public class Example2_3 {
public static void main(String args[]) {
System.out.println("请输入若干个数,每输入一个数回车确认:");
System.out.println("最后输入数字0结束输入操作");
Scanner reader = new Scanner(System.in);
double sum = 0;
double x = reader.nextDouble();
while(x!=0) {
sum = sum+x;
x = reader.nextDouble();
}
System.out.println("sum= "+sum);
}
}
输出数据
System.out.println()
可输出串值,表达式的值,输出数据后换行System.out.print()
输出数据后不换行System.out.printf("格式控制部分",表达式1,表达式2,...,表达式n);
%d, 输出int类型数据
%c, 输出char型数据
%f, 输出浮点型数据,小数部分最多保留6位
%s, 输出字符串数据
%md, 输出的int型数据占m列
%m.nf, 输出的浮点型数据占m列,小数点保留n位
System.out.printf("%d,%f",12.38,23.78);
数组
数组是相同类型的变量按顺序组成的一种符合数据类型(数组是一些类型相同的变量组成的集合)
声明数组
声明一维数组:
数组的元素类型 数组名[ ];
数组的元素类型 [ ] 数组名;
声明二维数组:
数组的元素类型 数组名[ ] [ ];
数组的元素类型 [ ] [ ] 数组名;
特殊:
int [ ] a,b;
等价于 int a[ ], b[ ];
int [ ] a, b [ ];
等价于 int a [],b[][];
java不允许在声明数组中的方括号内指定数组元素个数
创建数组(为数组分配元素)
声明数组仅仅是给出了数组的名字和元素的数据类型,想真正地使用数组还需创建数组,即给数组分配元素数组名 = new 数组元素的类型[数组元素的个数];
eg. boy = new float[4];
1x4x1
数组的引用:
数组变量boy中存放着这些元素的首地址,该地址称做数组的引用,这样数组就可以通过索引使用分配给它的变量,即操作它的元素
声明数组和创建数组一起完成:
float boy[ ] = new float [4]
java采用“数组的数组”声明多维数组
二维数组的声明和创建int mytwo [][] = new int[3][4];
等价于 int mytwo[][];
3x4x1 3行4列 mytwo = new int[3][4]
该二维数组mytwo
是由3个长度为4的一维数组 mytwo[0],mytwo[1],mytwo[2]
构成的
创建二维数组时可以分别制定构成该二维数组的一维数组的长度
int a[][] = new int [3][]; \\创建一个二维数组a, 由3个一维数组a[0],a[1],a[2]构成
a[0] = new int[6]; \\确定一维数组的长度,为一维数组分配元素
a[1] = new int[12];
a[2] = new int[8];
java允许实用 int型变量的值指定数组的元素个数
int size = 30;
double number[] = new double[size];
索引号0开始int a [][] = new int[6][8];
第一个索引的变化范围从0到5,第二个索引变化范围从0到7
数组的长度
float a[] = new float[12];
a.length =12int b[][] = new int [3] [6];
b.length = 3
数组初始化
创建数组后,系统会给数组的每个元素一个默认的值,如 float 型是0.0float boy[] = {21.3f, 23.89f, 2.0f, 23f. 778.98f};
等价于
float boy[] = new float[5];
boy[0] =21.3f;
boy[1] = 23.89f;
boy[2] = 2.0f;
boy[3] = 23f;
boy[4] = 778.98f
可以如下初始化:直接用若干个一维数组初始化一个二维数组,这些二维数组的长度不尽相同int a[][] = {{1},{1,1},{1,2,1},{1,3,3,1},{1,4,6,4,1}};
public class Example2_4 {
public static void main(String args[]) {
int a[] = {1,2,3,4};
int b[] = {100,200,300};
System.out.println("数组a的元素个数="+a.length);
System.out.println("数组b的元素个数="+b.length);
System.out.println("数组a的引用"+a);
System.out.println("数组b的引用"+b);
a = b;
System.out.println("数组a的元素个数="+a.length);
System.out.println("数组b的元素个数="+b.length);
System.out.println("a[0]="+a[0]+",a[1]="+a[1]+",a[2]"+a[2]);
System.out.println("b[0]="+b[0]+",b[1]="+b[1]+",b[2]="+b[2]);
}
}
eg. 对已排序数据,使用折半法判断一个数据是否在一个数组中
折半法思想:
对于从小到大排序的数组,只要判断数据是否和数组中间的值相等,如果不相等,当该数据小于数组中间元素的值,就在数组的前一半数据中继续折半找,否则就在数组的后一半数据中继续折半找
import java.util.*;
public class Example2_5 {
public static void main(String args[]) {
int start = 0, end, middle;
int a[] = {12,45,67,89,123,-45,67};
int N = a.length;
//选择法排序数组
for (int i=0; i<N; i++) {
for (int j=i+1; j<N; j++) {
if(a[j]<a[i]) {
int t = a[j];
a[j] = a[i];
a[i] = t;
}
}
}
Scanner scanner = new Scanner(System.in);
System.out.println("输入整数,程序判断该整数是否在数组中:");
int number = scanner.nextInt();
int count = 0;
end = N;
middle = (start+end)/2;
while(number!=a[middle]) {
if (number > a[middle])
start = middle;
else if (number < a[middle])
end = middle;
middle = (start+end)/2;
count++;
if(count>N/2)
break;
}
if (count>N/2)
System.out.printf("%d不在数组中.\n",number);
else
System.out.printf("%d在数组中.\n",number);
}
}