整理笔记--Java基础(数组)

时间:2022-03-27 22:13:58

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:

/*请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母
*/

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();

}}}}