数 组
主要讲解宋老师里面课后题(无答案的),以便后期复习使用。(可以私信我要文档资料)
代码题
- 创建一个char类型的26个元素的数组,分别 放置’A’-‘Z’。
使用for循环访问所有元素并打印出来。
public class Exer1 {
public static void main(String[] args) {
char[] a = new char[26];
for (int i = 0; i < 26 ; i++) {
a[i] = (char)('A'+i);
}
for (int i = 0; i < 26; i++) {
System.out.print(a[i]+" ");
}
}
}
- 创建一个char类型的36个元素的数组,前26个元素放置’A’-‘Z’, 后10个元素放置’0’-‘9’。
使用for循环访问所有元素并打印出来。
提示:char类型数据运算 ‘A’+1 -> ‘B’,‘0’+1 -> ‘1’
public class Exer2 {
public static void main(String[] args) {
char[] a = new char[36];
int j ;
for (int i = 0; i < 26 ; i++) {
a[i] = (char)('A'+i);
}
for (int i = 26; i <36; i++) {
a[i] = (char) ('0'+i-26);
}
for (int i = 0; i < 36; i++) {
System.out.print(a[i]+" ");
}
}
}
- 用数组求出斐波那契数列的前20项值
public class Exer3 { //递归算法,复杂度有点高.
public static int exer(int n){
if (n == 0){
return 0;
}
if (n == 1){
return 1;
}
return exer(n-1) + exer(n-2);
}
public static void main(String[] args) {
int [] arr = new int[20];
for (int i = 1; i < arr.length+1 ; i++) {
arr[i-1] = exer(i);
}
String s = Arrays.toString(arr);
System.out.println(s);
}
}
- 对10个整数进行按照从小到大的顺序排序
public class Exer4 { //用最简单的方法。可以用冒泡,快速等
public static void main(String[] args) {
int [] arr = new int[10];
for (int i = 0; i < arr.length; i++) {
arr[i] = (int)(Math.random()*100+1);//1-100的随机数
}
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
}
}
- 求一个3*3矩阵对角线元素之和
<提示>
程序分析:利用双重for循环控制输入二维数组,再将a[i][i]累加后输出。
public class Exer5 {
public static void main(String[] args) { //这里随机赋值
int [][] arr = new int[3][3];
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
arr[i][j] = (int)(Math.random()*100+1); //1-100
}
}
int sum = 0;
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j]+"\t");
if(i == j)
sum += arr[i][i];
}
System.out.println();
}
System.out.println("对角线和为"+sum);
}
}
- 有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
<提示>
程序分析:首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后此元素之后的数,依次后移一个位置。
public class Exer6 {
public static void main(String[] args) {
int [] arr = new int[]{1,2,3,4,5,7,8,9}; //
System.out.println("请输入一个数");
Scanner scanner = new Scanner(System.in);
int [] arr1 = new int[arr.length+1];
int n = scanner.nextInt();
int index = 0;
for (int i = 0; i < arr.length; i++) {
if(arr[i] < n)
{
index = arr.length;
}
else {
arr1[i] = n;
index = i;
System.out.println(index);
break;
}
}
for (int i = 0; i < index; i++) {
arr1[i] = arr[i];
}
arr1[index] = n;
for (int i = index+1; i <arr1.length ; i++) {
arr1[i] = arr[i-1];
}
System.out.println(Arrays.toString(arr1));
}
}
- 利用随机数生成一个整数数组,数组中有10个元素,每个元素的值都在1-30之间,且要求各个数值不能相同。打印该数组。
public class Exer7 {
public static void main(String[] args) {
int [] arr = new int[10];
for (int i = 0; i < arr.length; i++) {
arr[i] = (int)(Math.random()*30+1);
for (int j = 0; j < i; j++) {
if(arr[i] == arr[j])
i--;
}
}
System.out.println(Arrays.toString(arr));
}
}
- 将一个数组逆序输出。
<提示>程序分析:用第一个与最后一个交换。
public class Exer8 {
public static void main(String[] args) {
int[] arr = new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
for (int i = 0; i < arr.length / 2; i++) {
int temp;
temp = arr[i];
arr[i] = arr[arr.length - 1 - i];
arr[arr.length - 1 - i] = temp;
}
System.out.println(Arrays.toString(arr));
}
}
- 输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。 `
public class Exer9 {
public static void main(String[] args) {
int[] arr = new int[10]; //假设输入10个数
Scanner scanner = new Scanner(System.in);
System.out.println("请输入10个数字");
for (int i = 0; i < arr.length; i++) {
arr[i] = scanner.nextInt();
}
System.out.println("输入的数组为" + Arrays.toString(arr));
int maxNumber = arr[0];
int minNumber = arr[0];
int maxIndex = 0;
int minIndex = 0;
for (int i = 0; i < arr.length; i++) {
if (maxNumber < arr[i]) {
maxNumber = arr[i];
maxIndex = i;
}
}
for (int i = 0; i < arr.length; i++) {
if (minNumber > arr[i]) {
minNumber = arr[i];
minIndex = i;
}
}
if (minIndex != arr.length - 1) {
int temp;
temp = arr[arr.length - 1];
arr[arr.length - 1] = arr[minIndex];
arr[minIndex] = temp;
}
if (maxIndex != 0) {
int temp;
temp = arr[0];
arr[0] = arr[maxIndex];
arr[maxIndex] = temp;
}
System.out.println("输出为" + Arrays.toString(arr));
}
}
- 有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数
public class Exer10 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入有多少个整数n");
int n = scanner.nextInt();
System.out.println("请输入后移的位置m");
int m = scanner.nextInt();
int [] arr = new int[n];
int [] arr1 = new int[n];
System.out.println("请输入n个整数");
for (int i = 0; i < n; i++) {
arr[i] = scanner.nextInt();
}
System.out.println("输入的整数数组为");
System.out.println(Arrays.toString(arr));
for (int i = 0; i < n-m; i++) {
arr1[m+i] = arr[i];
}
for (int i = arr.length -m; i < arr.length; i++) {
arr1[i-arr.length+m] = arr[i];
}
System.out.println("输出的数组为");
System.out.println(Arrays.toString(arr1));
}
}
- 定义一个4行4列的二维数组,逐个从键盘输入值,然后将第1行和第4行的数据进行交换,将第2行和第3行的数据进行交换
public class Exer11 {
public static void main(String[] args) {
int[][] arr = new int[4][4];
Scanner scanner = new Scanner(System.in);
System.out.println("输入数组每4个一行");
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
arr[i][j] = scanner.nextInt();
}
}
System.out.println("输入的数组为");
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j]);
}
System.out.println();
}
for (int i = 0; i < arr.length/2; i++) {
for (int j = 0; j < arr[i].length; j++) {
int temp ;
temp = arr[i][j];
arr[i][j] = arr[arr.length-1-i][j];
arr[arr.length-1-i][j] = temp;
}
}
System.out.println("输出的数组为");
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j]);
}
System.out.println();
}
}
}
- 定义一个3行4列的二维数组,逐个从键盘输入值,编写程序将四周的数据清0
public class Exer12 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int [][] arr = new int[3][4];
System.out.println("请输入");
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
arr[i][j] = scanner.nextInt();
}
}
System.out.println("输入的数组是");
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j]);
}
System.out.println();
}
System.out.println("输出的结果为");
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
if(i == 0 || i == arr.length-1 || j == 0 || j == arr[i].length-1)
arr[i][j] = 0;
System.out.print(arr[i][j]);
}
System.out.println();
}
}
}
- 定义一个3行4列的二维数组,逐个从键盘输入值,将左下三角的值清0
public class Exer13 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int [][] arr = new int[3][4];
System.out.println("请输入");
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
arr[i][j] = scanner.nextInt();
}
}
System.out.println("输入的数组是");
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j]);
}
System.out.println();
}
System.out.println("输出的结果为");
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
if(i>=j)
arr[i][j] = 0;
System.out.print(arr[i][j]);
}
System.out.println();
}
}
}
- 定义一个4行4列的二维数组,逐个从键盘输入值,将对角线的值清0
public class Exer14 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int[][] arr = new int[4][4];
System.out.println("请输入");
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
arr[i][j] = scanner.nextInt();
}
}
System.out.println("输入的数组是");
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j]);
}
System.out.println();
}
System.out.println("输出的结果为");
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
if (i + j == arr.length - 1 || i == j)
arr[i][j] = 0;
System.out.print(arr[i][j]);
}
System.out.println();
}
}
}
- 定义一个N*N二维数组,从键盘上输入值,找出每行中最大值组成一个一维数组并输出
public class Exer15 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入行数和列数的值N");
int n = scanner.nextInt();
int[][] arr = new int[n][n];
System.out.println("请输入");
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
arr[i][j] = scanner.nextInt();
}
}
System.out.println("输入的数组是");
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j] + "\t");
}
System.out.println();
}
System.out.println("输出的结果为");
int[] arr1 = new int[n];
for (int i = 0; i < arr.length; i++) {
int maxNumber = arr[i][0];
for (int j = 0; j < arr[i].length; j++) {
if (maxNumber < arr[i][j]) {
maxNumber = arr[i][j];
}
}
arr1[i] = maxNumber;
}
System.out.println(Arrays.toString(arr1));
}
}