什么是数组
变量类型在定义或是使用时,一次只能代表一个变量。当用户传入多个变量是,便需要多个变量来进行取值和使用,过多的变量,在使用时不免显得驳杂,且易于混淆。所以数组的引入可以很好的解决这一问题。将一组数据存在同一地址块内,根据交表不同进行区分。
数组格式为:int[] arr = new int[n];其中数组类型可以根据实际使用情况进行更改(String double等均可)arr为数组名,不同的实在定义时,数组名不能重复,因数组的单词为array,所以多用arr;等号后面的int中n代表数组长度,可根据数组的实际需要进行定义。
int[] arr = {a,b,c,d};数组的另外一种定义方式,知道数组具体内容是可以根据此方式定义,两种定义没有太明显的区别,均可使用
其中a,b,c,d等为数组中的元素。
注意事项
1.数组输出时,不能直接输出数组,若直接输出数组,结果是数组存放的物理地址,而不是数组内的元素,想输出数组内的元素应通过角标的方式进行输出,例如arr[0];
2.数字的索引(俗称下角标)从零开始,既最大的长度为数组长度-1;
3.输出时不超出数组长度,超出时将报错(数组越界)
如何从数组中取值
1.若已确定要取出数组中的某一个数,可直接用起索引来进行取值,例如arr[n];n为角标;
2.若取出数组中的每一位数,可利用for循环进行取值,代码如下
for (int i = 1; i < arr.length-1; i++) {
int j = arr[i];
system.out.println(j);
}
3.foreach循环遍历数组,代码如下,其中括号内为新定义一个变量用来记录数组中每个元素的内容,:后为需遍历的数组名
int[] arr = {1,3,5,7,9}
for(int e: arr){
system.out.println(e)
}
练习题及答案
习题
【程序1】定义5个长度的整数数组,将1,2,3,4,5装进数组中,并将数组中的值输出
【程序2】创建5个长度的整数数组,要求得到整数数组中所有整数的和
例:int[] a = {1, 2, 3, 4, 5} ----> 15
(扩展题) 定义5个长度的整数数组,从控制台接值,将数据装到数组中,并求数组的和
【程序3】创建三个长度的整 数数组,随意赋值,求数组中的最大值
(扩展题) 创建五个长度的整数数组,随意赋值,求数组中的最大值
(扩展题) 唱歌比赛中,共有6位评委对选手进行打分,去掉一个最高分,
去掉一个最低分,剩下四个评委的平均分就是选手的最终成绩,
现在要求从控制台接到评委的打分,装进数组中,
并求出选手最终成绩。
请输入第1个评委分数 :200
请输入第2个评委分数 :300
请输入第3个评委分数 :100
请输入第4个评委分数 :400
去掉一个最高分:400
去掉一个最低分:100
选手最终得分为:250
【程序4】创建两个长度的整数数组,把数组的第一个值,与第二个值互换
【程序5】得到整数数组拼接逗号后的结果
例:int[] b ={11, 22, 33, 44, 55} ----> 11, 22, 33, 44, 55
【程序6】得到字符串数组中的数据拼接后的结果
例:String[] c ={"辽宁省", "大连市", "高新区", "敬贤街26号902室"}
----> 辽宁省大连市高新区敬贤街26号902室
【程序7】统计数组中包含多少个0
int[] oldArr = {1, 3, 4, 5, 0, 0, 6, 6, 0, 5, 4, 7, 6, 7, 0, 5};
【程序8】统计成绩中及格的人数
int[] scores = {60,59,77,53,66,12};
【程序9】统计数组中 正数和 与 负数和各是多少
int[] scores = {-60,59,-77,53,66,-12};
【程序11】现在有一个数组,例:int[] oldArr = {1,0,3,4,2,0,7,0,5};
要求将不为0的值存入一个新的数组中,
【程序10】创建三个长度的整数数组int[] arr = {3, 8, 2}
要求将数组中的数据从小到大排序,并且打印数组中的数据
(扩展题) 创建五个长度的整数数组int[] arr = {2, 8, 6, 10, 1}
要求将数组中的数据从大到小排序,并打印数组中的数据
【程序11】现在有一个数组,例:int[] oldArr = {1,0,3,4,2,0,7,0,5};
要求将不为0的值存入一个新的数组中,
生成新的数组为 : int[] newArr={1,3,4,2,7,5};
【程序12】创建4个长度的布尔类型的数组,将true, true, false, true装进数组中,然后将所有的true变成false,所有的false变成true。输出数组中的数据。
(扩展题)
1. 大厅里有100盏灯,每盏灯都编了号码,分别为1-100。每盏灯由一个开关来控制。(开关按一下,灯亮,再按一下灯灭。开关的编号与被控制的灯相同。)开始时,灯是全灭的。现在按照以下规则按动开关。
第一次,将所有的灯点亮。
第二次,将所有2的倍数的开关按一下。
第三次,将所有3的倍数的开关按一下。
以此类推。第N次,将所有N的倍数的开关按一下。
最后还有哪几盏灯亮着?
2. 输入某年某月某日,判断这一天是这一年的第几天?
答案
public class Test {
//变量类型 变量名 = 真实值
//数组定义方式1:变量类型[] 变量名(多为arr) = {};
//数组定义方式2(指定长度):变量类型[] 变量名(多为arr) = new int[n];序号叫索引。俗称下角标;
//i = i+1;i++;i+=1;均代表自增1,数字可替换。
static Scanner in = new Scanner(System.in);
public static void main(String[] args) {
/*第一题
int[] arr = new int[]{1,2,3,4,5};
for(int a:arr){
System.out.println(a);
}
*/
/*第二题
int[] arr = new int[]{1,2,3,4,5};
int a = 0;
for (int i = 0; i < arr.length; i++) {
int j = arr[i];
a = a+j;
}
System.out.println("所有整数和为"+a);
*/
/*拓展题
int[] a = new int[5];
for (int i = 0; i < a.length; i++) {
System.out.println("请输入第"+(i+1)+"个数字");
int b = in.nextInt();
a[i] = b;
}
for(int b:a){
System.out.println(b);
}
*/
/*第三题
int[] arr = {5,8,3};
int temp;
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr.length; j++) {
if (arr[j]>arr[i]) {
temp = arr[j];
arr[j] = arr[i];
arr[i] = temp;
}
}
}
for(int a:arr){
System.out.println(a);
}
System.out.println("数组中的最大值为"+arr[2]);
*/
/*拓展题
int[] arr = {5,8,3,185,555};
int temp;
for (int i = 0; i < arr.length; i++) {
for (int j = 1; j < arr.length; j++) {
if (arr[j]>arr[i]) {
temp = arr[j];
arr[j] = arr[i];
arr[i] = temp;
}
}
}
for(int a:arr){
System.out.println(a);
}
System.out.println("数组中的最大值为"+arr[2]);
*/
/*拓展题2,排序反了?!
int[] arr = new int[6];
int temp;
for (int i = 1; i < 7; i++) {
System.out.println("请输入第"+i+"位评委的成绩");
int a = in.nextInt();
arr[i-1] = a;
}
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr.length - 1; j++) {
if ( arr[0]>arr[ 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
int sum = 0;
for (int i = 1; i < arr.length-1; i++) {
int j = arr[i];
sum = sum + j;
}
System.out.println("去掉一个最低分:"+arr[0]);
System.out.println("去掉一个最高分"+arr[5]);
System.out.println("选手最终得分为"+(sum/4));
*/
/*拓展2方法2
int[] arr = new int[6];
int temp;
for (int i = 1; i < 7; i++) {
System.out.println("请输入第"+i+"位评委的成绩");
int a = in.nextInt();
arr[i-1] = a;
}
int a = arr[0];
int b = arr[0];
for (int i = 0; i < arr.length; i++) {
int j = arr[i];
if (arr[i]>a) {
a = arr[i];
}
if (arr[i]<b) {
b = arr[i];
}
}
for (int i = 0; i < arr.length; i++) {
int j = arr[i];
}
int sum = 0;
for (int i = 0; i < arr.length; i++) {
int j = arr[i];
sum = sum + j;
}
System.out.println("最高分为"+a);
System.out.println("最低分为"+b);
System.out.println("最后得分为"+((sum-a-b)/4));
*/
/*程序5
int[] b = {11,22,33,44,55};
for (int i = 0; i < b.length; i++) {
int j = b[i];
System.out.print(b[i]);
if (i<b.length-1) {
System.out.print(",");
}
}
*/
/*程序6,最好进行字符串拼接,方便传值
String[] c ={"辽宁省", "大连市", "高新区", "敬贤街26号902室"};
for (int i = 0; i < c.length; i++) {
String st = c[i];
System.out.print(st);
}
*/
/*程序7
int a = 0;
int[] oldArr = {1, 3, 4, 5, 0, 0, 6, 6, 0, 5, 4, 7, 6, 7, 0, 5};
for (int i = 0; i < oldArr.length; i++) {
int j = oldArr[i];
if (j==0) {
a = a+1;
}
}
System.out.println("数组中包含"+a+"个0");
*/
/*程序8
int[] scores = {60,59,77,53,66,12};
int a = 0;
for (int i = 0; i < scores.length; i++) {
int j = scores[i];
if (j>=60) {
a = a+1;
}
}
System.out.println("及格人数为"+a);
*/
/*程序9
int[] scores = {-60,59,-77,53,66,-12};
int sum = 0;
int sum1 = 0;
for (int i = 0; i < scores.length; i++) {
int j = scores[i];
if (j>0) {
sum = sum + j;
} else {
sum1 = sum1+j;
}
}
System.out.println("正数和为"+sum);
System.out.println("负数和为"+sum1);
*/
/*第十题
int[] arr = {3,2,8};
int temp = 0;
//作用是让排序和比较的过程重复执行
for (int i = 0; i < arr.length; i++) {
//作用是对三个数字进行两两进行比较,并将较大值换到最后面
for (int j = 0; j < arr.length-1; j++) {
if (arr[j]>arr[j+1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
System.out.println(arr[i]);
}
*/
/*拓展
int[] arr = {2, 8, 6, 10,1 };
int temp = 0;
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr.length-1; j++) {
if (arr[j]<arr[j+1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
System.out.print(arr[i]);
}
//为什么放在外层循环内前两个会错位:本题前两位是通过第二次循环来进行判断的
// for(int a:arr){
// System.out.print(a);
// }
*/
/*第十一题??
int[] oldArr = {1,0,3,4,2,0,7,0,5};
int temp = 0;
int a = 0;
for (int i = 0; i < oldArr.length; i++) {
for (int j = 0; j < oldArr.length-1; j++) {
if (oldArr[j]>oldArr[j+1]) {
if (oldArr[j]==0) {
a= a+1;
}
temp = oldArr[j];
oldArr[j+1] = oldArr[j];
oldArr[j] = temp;
}
}
}
int[] newarr = new int[oldArr.length - a];
for (int i = a; i < newarr.length; i++) {
newarr[i-a] = oldArr[i];
}
for(int c:newarr){
System.out.print(c);
}
*/
/*11题
int[] oldArr = {1,0,3,4,2,0,7,0,5};
int a = 0;
for (int i = 0; i < oldArr.length; i++) {
if (oldArr[i] == 0) {
a = a+1;
}
}
// System.out.println(a);
int[] Newarr = new int[oldArr.length-a];
int b = 0;
for (int i = 0; i < oldArr.length; i++) {
if (oldArr[i] != 0) {
Newarr[b] = oldArr[i];
b = b+1;;
}
}
for(int c :Newarr){
System.out.print(c+",");
}
/*程序12
boolean b[] = {true,true,false,true,};
for(boolean a:b){
System.out.println(!a);
}
*/
/*拓展1
boolean[] b = new boolean[100];
for (int i = 0; i < b.length; i++) {
b[i] = false;
}
System.out.println("请输入点击次数");
int a = in.nextInt();
for (int i = 0; i < b.length; i++) {
if (i%a==0) {
b[i] = !b[i];
}
}
int d = 0;
for(boolean c:b){
if (c==true) {
d = d + 1;
}
}
System.out.println("最后还有"+d+"灯亮着");
*/
/*拓展2
System.out.println("请输入年份");
int y = in.nextInt();
System.out.println("请输入月份");
int m = in.nextInt();
System.out.println("请输入日期");
int d = in.nextInt();
int[] mod = {31,28,31,30,31,30,31,31,30,31,30,31};
int sum = 0;
for (int i = 0; i < m-2; i++) {
int j = mod[i];
sum = sum +j;
}
if (y%4==0&&y%100!=0&&m>2) {
sum = sum+1;
}
System.out.println("该天是这一年的第"+(sum+d)+"天");
*/
/*面试题,创建一个新数组其元素值为老数组除对应位数以外的和
int[] oldarr = {1,3,5,7,9};
int[] newarr = new int[oldarr.length];
int sum = 0;
for (int i = 0; i < oldarr.length; i++) {
int j = oldarr[i];
sum = sum+j;
for (int j2 = 0; j2 < newarr.length; j2++) {
newarr[j2] = sum - oldarr[j2];
}
}
for(int e : newarr){
System.out.println(e);
}