java--(一)基本数据类型与数组

基本数据类型与数组

基本数据类型

逻辑类型 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 =12
int b[][] = new int [3] [6];   b.length = 3

数组初始化

创建数组后,系统会给数组的每个元素一个默认的值,如 float 型是0.0
float 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);
	}
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值