int[ ]arr = new int[3]==>动态初始化。
int[ ]arr = {1,2,3}==>静态初始化。
Java没有多维数组,二维数组实际上是一维数组的一维数组。
例子1:
/*分析以下需求,并用代码实现: (1)打印由7,8,9三个数组组成的三位数,要求该三位数中任意两位数字不能相同 (2)打印格式最后的三位数字以空格分隔,如789 798 879 897 978 987 提示: 考虑使用for循环的嵌套 */ public class Test1 { public static void main(String[] args) { //这种方法最简单 for(int i=789;i<=987;i++){ String s = String.valueOf(i); if(s.contains("7")&&s.contains("8")&&s.contains("9")){ System.out.println(s); /*char[] ch = { ‘7‘, ‘8‘, ‘9‘ }; StringBuffer sb = new StringBuffer(); // 要是比较四个数 就多加一个for循环 把比较条件添加上就行了 for (int i = 0; i < ch.length; i++) { for (int j = 0; j < ch.length; j++) { for (int j2 = 0; j2 < ch.length; j2++) { if (i != j && j != j2 && i != j2) { sb.append(ch[i]).append(ch[j]).append(ch[j2]).append(" "); }}}} System.out.println(sb);*/ }}}}
例子2:
/*数组去重问题 存在该数组: int[] arr = { 16, 23, 9, 6, 1, 23, 6, 7, 8, 23 }; 去除上面定义的数组中的重复元素,把去重复后的元素存入新数组中,并打印新数组中的元素*/ public class Test2 { public static void main(String[] args) { int[] arr = { 16, 0, 23, 0, 9, 6, 0, 1, 23, 6, 0, 7, 8, 23 }; // 1.创建新数组 int[] newArr = new int[arr.length]; int count = step1(arr, newArr); print(newArr); int[] newArr2 = new int[count]; step2(newArr, newArr2, count); print(newArr2); } public static void step2(int[] newArr, int[] newArr2, int count) { for (int i = 0; i < count; i++) { newArr2[i] = newArr[i]; }} public static int step1(int[] arr, int[] newArr) { int count = 0; for (int i = 0; i < arr.length; i++) { boolean b = true; for (int j = 0; j < count; j++) {//这一步 把j if (arr[i] == newArr[j]) { b = false; break; }} if (b) { newArr[count] = arr[i];//要出现重复的元素 就必须是两个以上 所以进入上面判断的时候 count就起码等于1 循环成立 count++; }} return count; } public static void print(int[] arr) { for (int i = 0; i < arr.length; i++) { System.out.print(arr[i] + " "); } System.out.println(); }}
例子4:
/*请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母 思路: 1.定义以星期的字母开头的数组 String[] arr = { "", "M", "Tu", "W", "Th", "F", "Sa", "Su" }; 2.定义汉字数组 String[] arrWeek = { "", "一", "二", "三", "四", "五", "六", "日" }; 3.死循环. 当键盘录入M,W等唯一的字母时, 直接打印对应的星期 当键盘录入T,S时, 继续录入第二个字母进行判断 当录入其他字母时, 直接要求继续录入*/ public class Test4 { public static void main(String[] args) { /*String[] arr = { "", "M", "Tu", "W", "Th", "F", "Sa", "Su" }; String[] arrWeek = { "", "一", "二", "三", "四", "五", "六", "日" }; Scanner sc = new Scanner(System.in); while(true){ System.out.println("请输入第一个字母:"); String s1 = sc.nextLine(); for (int i = 0; i < arr.length; i++) { if(arr[i].toUpperCase().equals(s1.toUpperCase())){ System.out.println("星期"+arrWeek[i]); return; } if(arr[i].toUpperCase().startsWith(s1.toUpperCase())){ System.out.println("请输入第二个字母"); String s2 = sc.nextLine(); s1+=s2; //i--;//很重要!!! }} System.out.println("未查找到对应星期, 请重新输入"); }*/ Scanner sc = new Scanner(System.in); System.out.println("请输入对应的星期"); while (true) { String line = sc.nextLine(); if ("M".equals(line) || "W".equals(line) || "F".equals(line) || "".equals(line)) { print(line); break; } else if ("T".equals(line)) { String line2 = sc.nextLine(); if ("u".equals(line2) || "h".equals(line2)) { print(line + line2); // 这里要传入两次判断的字符串 即T+h或者T+u 只传入单一的line不能匹配 break; } } else if ("S".equals(line)) { String line3 = sc.nextLine(); if ("a".equals(line3) || "u".equals(line3)) { print(line3); break; } } else { System.out.println("请继续录入"); }}} // 打印方法 private static void print(String line) { int index = getIndex(line); System.out.println(index); String st = getWeek(index); System.out.println("星期" + st); } // 找到索引后 进入这个查找对应的星期 private static String getWeek(int index) { String[] arrWeek = { "", "一", "二", "三", "四", "五", "六", "日" }; String s = ""; for (int i = 0; i < arrWeek.length; i++) { if (index == i) { s = arrWeek[i]; }} return s; } // 当用户输入字母的时候 进入这个方法查询对应的索引 public static int getIndex(String line) { String[] arr = { "", "M", "Tu", "W", "Th", "F", "Sa", "Su" }; int index = -1; for (int i = 0; i < arr.length; i++) { if (line.equals(arr[i])) { index = i; }} return index; }}
例子5:
public class Test5 { public static void main(String[] args) throws IOException { Scanner xx = new Scanner(System.in); System.out.println("请输入行数:"); int row = xx.nextInt(); System.out.println("请输入列数:"); int coulumn = xx.nextInt(); pdd(row,coulumn); } public static void pdd(int a,int b){ for(int x=1;x<=a;x++){ for(int y=1;y<=x && y<=b;y++){ System.out.print(y+"*"+x+"="+y*x+"\t"); } System.out.println(); }}}
例子6:
public class Test6 { public static void main(String[] args) { int i,j; for(i=1;i<=5;i++){ for(j=2;j<=6-i;j++){ System.out.print(" "); } for(j=2;j<=i*2;j++){ System.out.print("*"); } System.out.println(); } for(i=6;i<=9;i++){ for(j=1;j<=i-5;j++){ System.out.print(" "); } for(j=1;j<=(10-i)*2-1;j++){ System.out.print("*"); } System.out.println(); }}}
例子7:
/** * 打印1-100之间的所有素数及个数 提示: 大于1的且只能被1和其本身整除的数叫素数 如:2 3 5 7 11 */ public class Test7 { public static void main(String[] args) { // 1.遍历1~100 for (int i = 2; i <= 100; i++) { // 2.调用判断素数的方法 if (isPrime(i)) { System.out.print(i + " "); }}} /*返回值类型: boolean 方法名: isPrime 参数列表: int x 当该方法返回值为true时是素数 */ private static boolean isPrime(int x) { // 1.定义布尔类型的标识符b boolean b = true; // 2.从2开始遍历一直到x-1 for (int i = 2; i < x; i++) {// 这里可以试数进行验证 // 3.只要满足对i取模等于0,则证明不是素数,此时将b置为false,并结束循环 if (x % i == 0) { b = false; break; }} // 4.将值返回 return b; }}
例子8:
public class Test08 { /*二维数组问题 假如2019CBA赛季要开始了,每个人会有三个单场篮球比赛,博彩公司预测一下几个人的单场得分分别是: 姚明:22,33,44 易建联:12,8,14 王治郅:33,45,65 朱芳雨:11,66,99 (1)求四个人的总得分之和 (2)求四个人中单场得分最高分 (3)求去掉单场最高分和最低分,四个人的得分总和的平均分*/ static int i,j; static int count; public static void main(String[] args) { int[][]arr={{22,33,44},{12,8,14},{33,45,65},{11,66,99}}; int a=getZongFen(arr); System.out.println("总分为"+a); int b=getZhongChang(arr); System.out.println("四人中场最高分是"+b); int max = getZuiMax(arr); int min = getZuiMin(arr); System.out.println("四人总和的平均分是"+1.0*(a-max-min)/(count-2)); } //4.求单场最低分 private static int getZuiMin(int[][] arr) { int min=arr[0][0]; for (i = 0; i < arr.length; i++) { for (j = 0; j < arr[i].length; j++) { if(min>arr[i][j]){ min=arr[i][j]; } } } return min; } //3.求单场最高分 private static int getZuiMax(int[][] arr) { int max=arr[0][0]; for (i = 0; i < arr.length; i++) { for (j = 0; j < arr[i].length; j++) { if(max<arr[i][j]){ max=arr[i][j]; } } } return max; } //2.求中场得分最高的 private static int getZhongChang(int[][] arr) { int max=arr[0][1]; for (i = 0; i < arr.length; i++) { for (j = 1; j < arr[i].length-1; j++) { if(max<arr[i][j]){ max=arr[i][j]; } } } return max; } //1.求总分 private static int getZongFen(int[][]arr) { int sum=0; for (i = 0; i < arr.length; i++) { for (j = 0; j < arr[i].length; j++) { sum+=arr[i][j]; count++; } } return sum; } }
例子9:
/** * 打印1到100之内的整数,但数字中包含9的要跳过 每行输出5个满足条件的数,之间用空格分隔 */ public class Test9 { public static void main(String[] args) { int count = 0; for (int i = 1; i <= 100; i++) { int ge = i % 10; int shi = i / 10; if (ge == 9 || shi == 9) { continue; } System.out.print(i + "\t"); count++; if (count % 5 == 0) { System.out.println(); }}}}