实验四:数组
实验目的
1.掌握数组的声明、定义、初始化和使用。
2.掌握对一维或二维数组元素的访问方法。
实验内容
1. 编写程序,完成下列功能:
(1)输入20个整数到数组中;
(2)对20个数按从大到小的顺序排序,输出排序后的数组;
(3)输入一个整数x;
(4)在数组中查找x。如果找到了输出x在数组中的下标,找不到输出-1。
package code41;
import java.util.Scanner;
import java.util.Arrays; //导入Arrays类
public class code41 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Scanner in = new Scanner(System.in);
int []numbers=new int[20];
System.out.println("请输入20个整数:");
for(int i=0;i<20;i++) {
numbers[i]=in.nextInt(); //通过nextInt方法依次读取用户输入数字并存入数组中
}
Arrays.sort(numbers); //将20个整数从小到大排序
for(int i = 19;i>=0;i--) {
System.out.println(numbers[i]); //逆序输出,也就是将其转换为从大到小排序
}
System.out.println("请输入一个整数x:");
int x=in.nextInt(),j=0;
for(int i=0;i<20;i++) {
if(x==numbers[i]) //在数组中查找x
{
System.out.println(i); //输出x在数组中的下标
j=1;
}
}
if(j!=1)
{
System.out.println("-1"); //找不到就输出-1
}
}
}
- 输出一个保存在二维数组中3*3矩阵,并求对角线元素之和。
package code42;
import java.util.Scanner;
public class code42 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
int numbers[][]=new int[3][3]; //定义这个数组再给其分配内存空间
int i,j,sum=0;
System.out.println("请输入3*3矩阵的元素:");
Scanner in = new Scanner(System.in);
for(i=0;i<3;i++) {
for(j=0;j<3;j++) {
numbers[i][j]=in.nextInt(); //输入数组元素
if(i==j) //判断是否是对角线元素
{
sum+=numbers[i][j]; //求和
}
}
}
System.out.println("对角线元素之和为:"+sum);
System.out.println("输出3*3的数组:");
for(i=0;i<3;i++) {
for(j=0;j<3;j++) {
System.out.print(" "+numbers[i][j]); //输出二维数组
}
System.out.println();
}
}
}
3. 打印如下形式的杨辉三角形
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
........................
输出前10行。
package code43;
public class code43 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
int[][]num=new int[10][10]; //定义一个十行十列的一个杨辉三角
for(int i=0;i
for(int j=0;j
num[i][0]=1;
num[i][j]=1; //每一行的第一列和最后一列都为1
}
}
for(int i=2;i
for(int j=1;j
num[i][j]=num[i-1][j]+num[i-1][j-1]; //每个数等于它上方两个数的和
}
}
for(int i=0;i
for(int j=0;j<=i;j++) {
System.out.print(num[i][j]+" "); //输出杨辉三角
}
System.out.println();
}
}
}
4. 有M个人围成一圈,每人一个的编号(1.2.3.....M),从第一个人数起,报到N时这个人就出圈。再继续数,数到N时这个人又出圈。直到只剩下一个人为止,输出出圈人的顺序。M、N从键盘输入。
package code44;
import java.util.Scanner;
public class code44 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Scanner in=new Scanner(System.in);
System.out.println("请输入共有多少人:");
int M=in.nextInt();
System.out.println("报到多少时这个人就出圈:");
int N=in.nextInt();
int num[]=new int[M];
int a=M,b=-1,c=0;
for(int i=0;i
c++;
num[i]=c; //给数组编号
}
System.out.println("原排序:");
for(int i=0;i
System.out.print(num[i]+"t");
}
System.out.println();
System.out.println("输出出圈人的顺序:");
while(a!=1) { //控制循环结束
for(int i=0;i
b++;
if(b==M)
{
b=0; //计数
}
if(num[b]==0)
{
i--; //防止重复计数
}
}
if(num[b]!=0)
{
System.out.print(num[b]+"t"); //输出数到的排序号
num[b]=0; //将选出的号排除
}
a--;
}
}
}
实验小结
- 定义数组时,除了要给定数组的名称、成员类型,还要为其分配内存空间,并进行初始化;
- 定义数组时,不允许在[]内指定数组元素的个数;
- 数组也不能整体赋值;
- 导入Arrays类,使用Arrays.sort()方法可将指定数组内的元素从小到大排序;
- Java数组实验题中的一些例题如矩阵、杨辉三角、约瑟夫环问题等等都有其固定的算法。



