目录
一、数组反转
例如,输入:2 3 4 5 6
输出:6 5 4 3 2
代码:
import java.util.Scanner;
public class fanzhuan {
public static void main(String[] args) {
//数组中的数值反转
int sum[] = new int[5];
Scanner myScanner = new Scanner(System.in);
System.out.println("请输入5个数");
for(int i = 0; i < sum.length; i++) {
sum[i] = myScanner.nextInt();
}
//把 sum[0] 和 sum[4] 进行交换
//. 把 sum[1] 和 sum[3] 进行交换
//. 交换次数为sum.length / 2次
//. 每次交换时,对应的下标 是 sum[i] 和 sum[sum.length - 1 -i]
int temp = 0;//交换时需要第三个瓶子
int len = sum.length;
for(int i = 0; i < len / 2; i++) {//因为是5/2本来取2,不用减1
temp = sum[len - 1 - i ];//5//
sum[len - 1 - i] = sum[i];//1
sum[i] = temp;//5
}
System.out.println("===翻转后数组===");
for(int l = 0; l < sum.length; l++) {
System.out.print(sum[l] + "\t");
}
}
}
首先,创建一个有n个空间大的数组,因为是输入来读取数字,scanner就出现了(类似于scanf)。
1、利用for循环把每一个输入的数字依次放入数组中
2、创建一个变量,来存放交换的值。第二个for是用来循环交换次数的,数组内是5个数,所以交换2次就可。
3、交换部分(!!):我们知道,len就等于整个数组的长度(长度为5),当做交换的时候,由于下标从0开始,第五个数下标也就是4,所以要把最后一个数的下标改成4(len-1) 。
temp = sum[len - 1 - i ];//len == 5// sum[len - 1 - i] = sum[i];//1//
(1.)i = 0,temp = sum[4],sum[4] = sum[0]
(2.)i = 1,temp = sum[3],sum[3] = sum[1] 在中间的则不用动交换
结果
二、冒泡排序
public class BubbleSort {
public static void main(String[] args) {
//做一个冒泡排序
int sum[] = {11,23,2,42,90};
// 0,1,2,3,4
//大的在后面
//共四轮排序
for(int i = 0; i < sum.length - 1; i++) {
//前面的数>后面的数,就交换
for(int j = 0; j < sum.length - 1 - i; j++) {
if(sum[j] > sum[j+1]) {
int temp = 0;
temp = sum[j+1];
sum[j+1] = sum[j];
sum[j] = temp;
}
}
}
for(int i = 0; i < sum.length; i++) {
System.out.print(" " + sum[i]);
}
}
}
第一个for循环中,i 只要小于 sum.length - 1,
第二个for循环中,要两两作比较
i = 0,比较四次
i = 1,比较三次
i = 2,比较两次
i = 3,比较一次
结果
三、杨辉三角
public class YangHui {
public static void main(String[] args) {
/*
1
1 1
1 2 1
1 3 3 1
1.第一行有 1 个元素, 第 n 行有 n 个元素
2. 每一行的第一个元素和最后一个元素都是 1
3. 从第三行开始, 对于非第一个元素和最后一个元素的元素的值. arr[i][j]
arr[i][j] = arr[i-1][j] + arr[i-1][j-1]; //必须找到这个规律
*/
int arr[][] = new int[6][];
for(int i =0; i < arr.length; i++) {
//一维数组开辟空间
arr[i] = new int[i + 1];
for(int j = 0; j < arr[i].length; 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();
}
}
}
结果
四、值拷贝与地址拷贝
public class test_11_23 {
public static void main(String[] args) {
//数组赋值 值拷贝与地址拷贝/引用传递
//值拷贝
int i = 10;//这种传递类似于c语言中的顺序结构,依次执行每一行代码
int i1 = i;
i1 = 12;
System.out.println("i="+i);
System.out.println("i1="+i1);
//地址拷贝/引用传递
int sum[] = {1,2,3};
int sums[] = sum;
sums[0] = 4;
for(int t = 0; t < sum.length; t++) {
//数组默认情况下是引用传递,赋的值是地址,方式是引用传递
//数组是一个地址,sums的变化会影响到sum的值;
System.out.println("sum="+" "+sum[t]);
}
}
}
值拷贝不会影响原变量的值
地址拷贝应该原数组的值
结果