1.数组逆转
给定一个数组 int[] arr = { 1, 2, 3, 4, 5}
思路:
1.找规律 arr[0] 和 arr[4] 交换 -> arr[ 5, 2, 3, 4, 1] arr[1] 和 arr[3] 交换 -> arr[ 5, 2, 3, 4, 1] 一共交换两次 = arr.length /2
- 第一个和第五个 第二个和第四个 也就是 arr[i] 和 arr[arr.length-1-i]
代码实现
import javax.swing.*;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int[] arr = { 1, 2 ,3, 4, 5};
System.out.print( "逆序前:");
for(int i = 0; i < arr.length; i++){
System.out.print(arr[i] + " ");
}
for (int i = 0; i < (arr.length /2); i++){
int temp = 0;
temp = arr[i];
arr[i] = arr[arr.length-1-i];
arr[arr.length-1-i] = temp;
}
//验证
System.out.println();
System.out.print( "逆序后:");
for(int i = 0; i < arr.length; i++){
System.out.print(arr[i] + " ");
}
}
}
编译结果
2.数组扩容
扩容数组 int[] a = { 1 , 2 ,3 ,4 ,5} ,增加6到数组中 完成上述任务后让用户是否添加,添加成功后是否继续 y/n;
代码及思路
import javax.swing.*;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int[] arr = { 1, 2 ,3, 4, 5};
int[] arrNew = new int[arr.length + 1];
//拷贝数组arr
for(int i = 0; i < arr.length; i++){
arrNew[i] =arr[i];
}
//添加数字6
arrNew[arr.length] = 6;
//引用数组arrNew 使之和arr共享堆内存 arr原来的内存则会被销毁
arr = arrNew;
// 验证 ——————遍历数组
for(int i = 0; i < arr.length; i++){
System.out.println(arr[i]);
}
}
}
编译结果
用户判断是否添加思路及代码
import javax.swing.*;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int[] arr = { 1, 2 ,3, 4, 5};
Scanner sc = new Scanner(System.in);
while (true){
int[] arrNew = new int[arr.length + 1];
//拷贝数组arr
for(int i = 0; i < arr.length; i++){
arrNew[i] =arr[i];
}
//添加数字
System.out.println("请输入添加的数字:");
arrNew[arr.length] = sc.nextInt();
//引用数组arrNew 使之和arr共享堆内存 arr原来的内存则会被销毁
arr = arrNew;
// 验证 ——————遍历数组
System.out.println("添加后:");
for(int i = 0; i < arr.length; i++){
System.out.println(arr[i]);
}
System.out.println("是否继续添加: y/n ?");
char a = sc.next().charAt(0);
if (a == 'n'){
break;
}
}
}
}
编译结果
3.有一个数组 {1, 2, 3, 4, 5}, 可以将该数组进行缩减,提示用户是否继续缩减,每次缩减最后那个元素。当只剩
下最后一个元素,提示,不能再缩减。
代码及思路
import javax.swing.*;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int[] arr = { 1, 2 ,3, 4, 5};
Scanner sc = new Scanner(System.in);
while (true){
int[] arrNew = new int[arr.length -1];
//拷贝数组arr
for(int i = 0; i < arr.length -1; i++){
arrNew[i] =arr[i];
}
//引用数组arrNew 使之和arr共享堆内存 arr原来的内存则会被销毁
arr = arrNew;
// 验证 ——————遍历数组
System.out.println("缩减后:");
for(int i = 0; i < arr.length; i++){
System.out.println(arr[i]);
}
if (arr.length == 1){
System.out.println("当前只剩一个元素,不可继续缩减");
break;
}
System.out.println("是否继续缩减: y/n ?");
char a = sc.next().charAt(0);
if (a == 'n'){
break;
}
}
}
}
编译结果
4.冒泡排序
import javax.swing.*;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int[] arr = { 5,4,3,2,1};
//冒泡排序
for(int i = 0; i < arr.length -1; i++){
for (int j = 0; j < arr.length -1 -i; j++){
if(arr[j] > arr[j+1]){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
for ( int i = 0; i < arr.length; i++){
System.out.print(arr[i] + " ");
}
}
}
编译结果
5.看一个需求:动态创建下面二维数组,并输出
i = 0: 1
i = 1: 2 2
i = 2: 3 3 3
代码
import javax.swing.*;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int[][] arr = new int[3][];//开辟动态二维数组
for (int i = 0; i < arr.length; i++){
arr[i] = new int[i+1];//为每一行数组开辟空间
for(int j = 0; j < arr[i].length; j++){
arr[i][j] = i + 1;
}
}
for (int i = 0; i < arr.length; i++){
for (int j =0; j < arr[i].length; j++){
System.out.print( "i=" + i + ": " +arr[i][j]);
}
System.out.println();
}
}
}
编译结果
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h9tqU8X8-1680880662857)(C:\Users\22014\AppData\Roaming\Typora\typora-user-images\image-20230407220622783.png)]
**分析:**这里主要就是int[][] arr = new int[3][];要注意,如果不给每一行开辟空间会报错null,还有在for(int j = 0; j < arr[i].length; j++){
arr[i][j] = i + 1;
}中注意数组长度,每一行长度不一样,需要和每一行数组长度保持一致。
7.int arr[][]={{4,6},{1,4,5,7},{-2}}; 遍历该二维数组,并得到和
代码
import javax.swing.*;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int arr[][]={{4,6},{1,4,5,7},{-2}}; //遍历该二维数组,并得到和
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]+ " ");
sum+= arr[i][j];
}
System.out.println();
}
System.out.println("总和:" + sum);
}
}
编译结果
8.打印杨辉三角
import javax.swing.*;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
//打印杨辉三角前十行
int[][] arr = new int[10][];
for (int i = 0; i < arr.length; i++){
arr[i] = new int[i+1];//给每一行数组开辟空间
for (int j = 0; j < arr[i].length-1; j++){
if( j == 0 || j == arr[i].length-1 ){
arr[i][j] = 1;
}
else {
arr[i][j] = arr[i-1][j] + arr[i-1][j-1];
}
}
}
//打印杨辉三角
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();
}
}
}
编译结果
总结
今天之前都认真了很多,但是效率很低,容易犯小错误,需要再短时间内提高学习效率!