一、查找
线性查找
用于数字个数量不大的时候
public class Demo12 {
public static void main(String[] args) {
int[] nums= {23,1,45,89,203,49};
int n=4;
boolean f=false;//false 没找到 true找到了
for (int i = 0; i < nums.length; i++) {
if(nums[i]==n) {
System.out.println("找到了");
f=true;
break;
}
}
if(!f) {
System.out.println("没找到");
}
}
}
二分查找
在有序的数列基础查找的
public class Demo13 {
public static void main(String[] args) {
int[] nums= {1,24,35,46,57,78,90,98};
int n=98;
int start=0;
int end=nums.length-1;
int mid;
boolean f=false;//false没找到 true找到了
do {
mid=(start+end)/2;
if(nums[mid]==n) {
System.out.println("找到了");
f=true;
break;
}else if(nums[mid]<n) {
start=mid+1;
}else {
end=mid-1;
}
}while(start<=end);
if(!f) {
System.out.println("没找到");
}
}
}
二、二维数组
定义数组,然后对其遍历:
方法一:
public class Demo01 {
public static void main(String[] args) {
int[][] nums=new int[3][];
String[][] strs=new String[4][5];
nums[0]=new int[] {1,2,3};
nums[1]=new int[] {23,4,12};
nums[2]=new int[] {1};
boolean[][] ds= {
{true,false,true},
{true,false},
{false}
};
//遍历 nums[][]
System.out.println(nums.length);
for (int i = 0; i < nums.length; i++) {
int[] n=nums[i];
for (int j = 0; j < n.length; j++) {
System.out.print(n[j]+" ");
}
System.out.println();
}
}
}
方法二:
public class Demo01 {
public static void main(String[] args) {
int[][] nums=new int[3][];
String[][] strs=new String[4][5];
nums[0]=new int[] {1,2,3};
nums[1]=new int[] {23,4,12};
nums[2]=new int[] {1};
boolean[][] ds= {
{true,false,true},
{true,false},
{false}
};
//遍历 nums[][]
for (int j = 0; j < nums[i].length; j++) {
System.out.print(nums[i][j]+" ");
}
System.out.println();
}
}
}
键盘输入赋值,进行遍历:
public class Demo01 {
public static void main(String[] args) {
double[][] dd=new double[2][3];
Scanner input=new Scanner(System.in);
for (int i = 0; i < dd.length; i++) {
for (int j = 0; j < dd[i].length; j++) {
dd[i][j]=input.nextDouble();
System.out.print(dd[i][j]+" " );
}
System.out.println();
}
}
二维数组练习题
求最大的行和列
编写一个程序,在一个4*4的矩阵中随机填入0和1,打印该矩阵,找到一个具有最多1的行和列。下面是程序运行示例:
0010
0011
1101
1010
最多1的行是:2
最多1的列是:2
package se0606;
import java.util.Scanner;
public class Demo02 {
public static void main(String[] args) {
int[][] nums=new int[4][4];
Scanner input=new Scanner(System.in);
//循环输入,给二维数组赋值
for (int i = 0; i < nums.length; i++) {
for (int j = 0; j < nums[i].length; j++) {
nums[i][j]=input.nextInt();
}
}
//求最多1 的行
int max=0;
int row=0;//最多1对应的row的下标
for (int i = 0; i < nums.length; i++) {
int count=0;//存储每一行1的个数
for (int j = 0; j < nums[i].length; j++) {
if(nums[i][j]==1) {
count++;
}
}
//求最值
if(max<count) {
max=count;
row=i;
}
}
//求最多1 的列
int lie=nums[0].length;
int max2=0;//最多1的个数
int column=0;//1最多的列
for (int i = 0; i < lie; i++) {//遍历每一列
//遍历这一列的每一行
int cCount=0;//每一列的1的个数
for (int j = 0; j < nums.length; j++) {
if(nums[j][i]==1) {
cCount++;
}
}
if(max2<cCount) {
max2=cCount;
column=i;
}
}
System.out.println("最多1的行是:"+row);
System.out.println("最多1的列是:"+column);
}
}
判断一个数组是否有序
package se0606;
//判断一个数组是否有序
public class Demo03 {
public static void main(String[] args) {
// int[] nums= {1,2,3,4,5,16,7,8,9};
int[] nums= {9,8,7,6,6,4,3,2,1,0};
int count1=0;//记录<=的次数
int count2=0;//记录>=的次数
for (int i = 0; i < nums.length-1; i++) {
if(nums[i]<=nums[i+1]) {
count1++;
}
if(nums[i]>=nums[i+1]) {
count2++;
}
}
if(count1==nums.length-1
||count2==nums.length-1) {
System.out.println("该数列有序");
}else {
System.out.println("该数列无序");
}
}
}
打印不同的数
编写一个程序,读入10个数并且显示互不相同的数(即一个数出现多次,但仅显示一次)输入之后,数组包含的都是不同的数。
package se0606;
import java.util.Scanner;
public class Demo04 {
public static void main(String[] args) {
int[] nums=new int[10];
//从键盘输入10个数
int index=0;
Scanner input=new Scanner(System.in);
for (int i = 0; i < nums.length; i++) {
int num=input.nextInt();
//判断下数组中是否已经存储了num
boolean f=false;//false 没 true 已经有了
for (int j = 0; j < index; j++) {
if(nums[j]==num) {
f=true;
break;
}
}
if(f)continue;
nums[index]=num;//确保数组中没有num的时候,才赋值
index++;
}
//1 3 3 4 3 2 0 2 1 5
int[] nums2= new int[index];
for (int i = 0; i < index; i++) {
nums2[i]=nums[i];
}
for (int i : nums2) {
System.out.print(i+" ");
}
}
}
判断一个数组中是否有四个连续相同的数
方法一:
package se0606;
public class Demo05 {
public static void main(String[] args) {
int[] nums= {1,1,1,2,3,4,4,4,3,6,6,6};
boolean flag=true;//flase 没有四个连续的数 true有
for (int i = 0; i < nums.length-3; i++) {
// boolean f=true;//true 想等 false不等
flag=true;
for (int j = i+1; j <=i+3; j++) {
if(nums[i]!=nums[j]) {
flag=false;
break;
}
}
if(flag) {
System.out.println("有四个连续的数");
flag=true;
break;
}
}
if(!flag) {
System.out.println("没有");
}
}
}
方法二:
package se0606;
public class Demo06 {
public static void main(String[] args) {
int[] nums= {1,1,1,2,3,4,4,4,3,6,6,6,6};
int count=1;
boolean f=false;//true 有 false 没有
for (int i = 1; i < nums.length; i++) {
if(nums[i]==nums[i-1]) {
count++;
if(count==4) {
f=true;
break;
}
}else {
count=1;
}
}
if(f) {
System.out.println("有四个连续的数");
}else {
System.out.println("没有");
}
}
}
游戏:豆机
package se0606;
import java.util.Scanner;
public class Demo07 {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.print("请输入小球的个数:");
int balls=input.nextInt();
System.out.println("请输入槽子的个数:");
int caozi=input.nextInt();
int[] caos=new int[caozi];
for (int i = 0; i < balls; i++) {
String path="";
int count=0;
for (int j = 0; j < caozi-1; j++) {
//[0.0,1.0)*2 [0,2.0)
int random=(int)(Math.random()*2);//产生0,1随机数
if(random==0) {
path+="L";
}else {
path+="R";
count++;
}
}
caos[count]++;
System.out.println(path);
}
for (int i : caos) {
System.out.print(i+" ");
}
System.out.println("---------------");
//求槽子中最多的小球数
int max=caos[0];//槽子中最多的小球数
for (int i = 0; i < caos.length; i++) {
if(max<caos[i]) {
max=caos[i];
}
}
//输出
// for (int i = max; i >=0; i--) {
// for (int j = 0; j < caozi; j++) {
// if(i<=caos[j]-1) {
// System.out.print("O");
// }else {
// System.out.print("X");
// }
// }
// System.out.println();
// }
for (int i = max; i >=0; i--) {
for (int j = 0; j < caozi; j++) {
if(i<caos[j]) {//caos[j]
System.out.print("O");
}else {
System.out.print("X");
}
}
System.out.println();
}
}
}