JAVA--数组的一些简单知识与应用

    科技2022-07-11  95

      数组就是若干个相同的数据类型得元素按一定的顺序排列的集合。元素可以由简单数据类型的量组成,也可以由对象组成。   一维数组的两种遍历方法:

    int[] a= {1,2,3,4,5}; //第一种: for (int i = 0; i < a.length; i++) { System.out.println("a["+i+"] = "+a[i]); } //第二种: for (int i : a) { System.out.println("a["+i+"] = "+i); }

      由此可推出多维数组的遍历方法:

    //三维数组的遍历: //法一: int[][][] a = { { { 1, 2 }, { 3, 4 } }, { { 5, 6 }, { 7, 8 } } }; for (int i = 0; i < a.length; i++) { for (int j = 0; j < a[i].length; j++) { for (int k = 0; k < a[i][j].length; k++) { System.out.println("a[" + i + "]" + "[" + j + "]" + "[" + k + "] = " + a[i][j][k]); } } } //法二: for (int[][] i : a) { for (int[] j : i) { for (int k : j) { System.out.print(k+"\t"); } } }

      问题一:约瑟夫环问题:设有N个人围坐成一个圈,从1到N编号,从第S个人开始从1到M报数,报到第M的人出圈,再从他的下一个人重新开始从1到M报数,每次报到M的人都出圈,直到所有人都出圈为止。给出这N个人出圈的顺序。   代码:

    public class YueSeFuHuan { public static void main(String[] args) { final int N = 13, S = 3, M = 5; int i = S - 1, k = N, g = 1; int[] a = new int[N]; for (int h = 0; h < a.length; h++) { a[h] = h + 1; //给每个人编号从1到13 } System.out.println("出圈的顺序为:"); do { i = i + (M - 1); while (i >= k) { i = i - k; } System.out.print(" " + a[i]); for (int j = i; j < k - 1; j++) { a[j] = a[j + 1]; //出圈后,后面的人要前进一个位置 } k--; g++; } while (g <= N); } }

      问题二:输出杨辉三角:   1   1 1   1 2 1   1 3 3 1   1 4 6 4 1   1 5 10 10 5 1   1 6 15 20 15 6 1   分析:第一列和每行的最后一列都为1 ,其余的数的规律:一个数=它上方的数+左上方的数   代码:

    public class YangHuiTriangle { public static void main(String[] args) { int i, j; int[][] YH = new int[7][]; for (i = 0; i < YH.length; i++) { YH[i] = new int[i + 1];// 定义第i行有i+1列 // System.out.println(YH[i].length); } YH[0][0] = 1; // 第一行第一列元素为1 for (i = 0; i < YH.length; i++) { // 按行 YH.length:YH的行数 YH[i][0] = 1; // 第一列为1 for (j = 1; j < YH[i].length - 1; j++) { // 按列 YH[i].length:第i+1行的元素个数即列数 YH[i][j] = YH[i - 1][j] + YH[i - 1][j - 1]; } YH[i][YH[i].length - 1] = 1; // 每行的最后一列为1 } for (int[] row : YH) { // 按行遍历 for (int col : row) { // 每一行再按列遍历 System.out.print(col + " "); } System.out.println(); } } }

      问题三:判断回文字符串:回文是从前往后读和从后往前读都是相同的字符串。   分析:判断字符左右两边是否对称,将字符分成对称的两半str1和str2,(若字符串长度为奇数则去掉最中间的那个字符)将str2字符的顺序颠倒得到str3,再与前一半字符(str1)比较,若结果为true则是回文,否则反之。   代码:

    public class HuiWen { public static void main(String[] args) { String str1, str2, str3 = ""; Scanner sc = new Scanner(System.in); System.out.println("请输入一个字符串:"); String str = sc.nextLine(); int n = str.length(); // 得到字符的前一半 substring(index1,index2):返回从index1开始到index2-1的子串 str1 = str.substring(0, n / 2); System.out.println("str1=" + str1); // 得到字符的后一半,分奇偶数考虑 if (n % 2 == 0) { str2 = str.substring(n / 2, n); } else { str2 = str.substring(n / 2 + 1, n); } System.out.println("str2=" + str2); // 将后一半字符的顺序颠倒再与前一半字符比较 for (int i = 0; i < str2.length(); i++) { String tempString = str2.substring(i, i + 1); str3 = tempString + str3; } System.out.println("str3=" + str3); // 比较两半字符串 if (str1.equals(str3)) { System.out.println(str + "是回文"); } else { System.out.println(str + "不是回文"); } } }

      希望我的总结对您有所帮助,感谢您的观看!

    Processed: 0.047, SQL: 8