栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

[Java] 多维数组算法题

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

[Java] 多维数组算法题

一:

答案:be

解析: ① int []x,y [] 相当于: int [] x; int [] y []; ②同类型的才可以相互赋值 ③满足字符类型提升的也可以赋值

二: 打印一个10行的杨辉三角

package zzx.com;

import java.util.Scanner;

public class yyds {
public static void main(String[] args){
        int [][] arr = new int[10][];//由于每一行中的列数不同,所以第二个[]内不填数据
        for(int i = 0;i < arr.length;i++){
            arr[i] = new int[i + 1];
            arr[i][0] = arr[i][i] = 1;
            if(i > 1){
                for(int j = 1;j < arr[i].length - 1;j++){
                 //注意,只有有这两种对应数据的数才能存在于循环之中
                    arr[i][j] = arr[i-1][j-1] + arr[i-1][j];
                }
            }
        }
        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();
        }
      }
  }

回顾: ①输出杨辉三角可以先把外框输出:首尾均为1,其余为系统默认值0 ② 注意数组的定义,需要按照不同行进行每一行的一维数组的创建 ③注意赋值时循环的范围

三:

package zzx.com;

import java.util.Scanner;

public class yyds {
public static void main(String[] args){
    int [] arr = new int[6];
    for(int i = 0 ;i < arr.length;i++){
        arr[i] = (int)(Math.random() * 30 + 1);
        for(int j = 0;j < i;j++){//当i为0时,此循环不进行
            if(arr[i] == arr[j]){
                i--;
                break;
            }
    }
    }
    for(int i = 0;i < arr.length;i++)
        System.out.print(arr[i] + " ");
    System.out.println();
      }
  }

四: 定义一个含10个元素的数组arr1,将arr1复制给arr2

package zzx.com;

import java.util.Scanner;

public class yyds {
public static void main(String[] args) {
    int [] arr1,arr2;//声明两个int[]类型的数组
    arr1 = new int[]{2,3,5,7,11,13,17,19};//arr1数组初始化
    for(int i = 0;i< arr1.length;i++)//arr1数组内容展示
        System.out.print(arr1[i] + " ");
    System.out.println();
    //arr1的复制
    arr2 = new int[arr1.length];
    for(int i = 0;i 
解析: ①arr2 = arr1不是复制操作,而是使arr2与arr1共同管理arr1本身所管理的数组空间,arr1或者arr2改变,都会引起数组的改变

五: 数组的反转

①方法一:二分法

package zzx.com;

import java.util.Scanner;

public class yyds {
    public static void main(String[] args) {
        String [] arr = new String[]{"JJ","DD","MM","BB","GG","AA"};
        
        //"二分法"的使用
        
        // 数组的长度从1开始数,i为数组的索引(下角标),从0开始,不要搞混
        //i < arr.length / 2中的<加不加=,需要根据题目来定
        //如果只是i < arr.length,则数组不变,因为一开始改变了,后来又变回去了
        for(int i = 0;i < arr.length / 2;i++){
            //数组元素交换位置
            String temp = arr[i];
            arr[i] = arr[arr.length - i - 1];
            arr[arr.length - i - 1] = temp;
        }
        for(int i = 0;i < arr.length;i++)
            System.out.print(arr[i] + " ");
        System.out.println();
    }
}

②方法二:

package zzx.com;

import java.util.Scanner;

public class yyds {
    public static void main(String[] args) {
        String [] arr = new String[]{"JJ","DD","MM","BB","GG","AA"};
        //方法二
        for(int i = 0,j = arr.length - 1;i < j;i++){
            //数组元素交换位置
            String temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
        for(int i = 0;i < arr.length;i++)
            System.out.print(arr[i] + " ");
        System.out.println();
    }
}

六: 查找算法(搜索)

①方法一:线性查找

package zzx.com;

import java.util.Scanner;

public class yyds {
    public static void main(String[] args) {
        String [] arr = new String[]{"JJ","DD","MM","BB","GG","AA"};
        for(int i = 0;i < arr.length;i++)
            System.out.print(arr[i] + " ");
        System.out.println();
        //线性查找
        String dest = "BB";
        boolean isFlag = true;
        for(int i = 0;i < arr.length;i++){
            if(dest.equals(arr[i])){
                System.out.println("找到了,位置为:" + i);
                isFlag = false;
                break;
            }
        }
        //只在这种情况下输出未找到,可以采用此方式
        if(isFlag)
            System.out.println("未找到!");
    }
}

②二分法:只适用于有顺序的一组数

package zzx.com;

import java.util.Scanner;

public class yyds {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int [] arr = new int[]{1,7,15,55,67,86,94,100};//递增的一组数
        System.out.println("请输入你想查找的数:");
        int dest = in.nextInt();
        int head = 0;
        int end = arr.length - 1;
        boolean isFlag = true;
        while(head <= end){
            int middle = (head + end) / 2;
            if(dest == arr[middle]){
                System.out.println("所查找数的位置为:" + middle);
                isFlag = false;
                break;
            } else if(dest > arr[middle])
                head = middle + 1;
            else
                end = middle - 1;
        }
        if(isFlag = true)
            System.out.println("未找到你所要的数据!");
    }
}

③差值法  当数据之间差值较小时,可以采取此方法。即:(要求的数 — 数组末尾的数)/(数组末尾的数—数组开头的数),通过找出此数在数组中的占比情况进行分割,类似二分法

解析: ①线性查找在数据较多时效率较低,二分法只适用于有顺序的一组数 ②二分法的操作流程为:

③当想输出的语句写在循环里面or外面都未符合我们想要的输出需求,可以采取boolean变量 ④x.equals()是内容之间(String型等)进行比较。即为:x的内容在()内的变量的内容中有没有相同的 ⑤整型之间可以直接用==进行比较

七: 排序算法之一:冒泡排序

package zzx.com;

import java.util.Scanner;

public class yyds {
    public static void main(String[] args) {
        int [] arr = new int[]{43,32,76,-98,0,64,33,-21,32,99};
        //冒泡排序,使数据从小到大排列
        for(int i = 0;i < arr.length - 1;i++){
            for(int j = 0;j < arr.length - 1 -i;j++){
                if(arr[j] > arr[j + 1]){
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
        for(int i = 0;i < arr.length;i++)
            System.out.print(arr[i] + " ");
    }
}

解析:

 回顾: ①循环中 i 和 j 一定不要混!

 八: 数组中Arrays工具的使用

package zzx.com;

import java.util.Arrays;
import java.util.Scanner;

public class yyds {
    public static void main(String[] args) {
        //1.boolean equals(int []a,int []b)
        int [] arr1 = new int []{1,2,3,4};
        int [] arr2 = new int []{1,3,2,4};
        boolean isArrays = Arrays.equals(arr1,arr2);
        System.out.println(isArrays);

        //2.String toString(int []a) 输出数组信息
        System.out.println(Arrays.toString(arr1));

        //3.void fill(int []a,int val) 将指定值填充到数组中
        Arrays.fill(arr1,10);
        System.out.println(Arrays.toString(arr1));
        //4.void sort(int []a) 对数组进行排序
        Arrays.sort(arr2);
        System.out.println(Arrays.toString(arr2));

        //5.int binarySearch(int []a,int key) 二分查找某数的位置
        int [] arr3 = new int[]{-98,-34,2,54,66,79,105,210,333};
        int index = Arrays.binarySearch(arr3,210);
        //System.out.println(index);   只要返回的是个负数,就一定是没有找到
        //可以更合适地写:
        if(index >= 0)
            System.out.println(index);
        else
            System.out.println("未找到");
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/867326.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号