飞道的博客

尚学堂第七章编码题(有误望指出)

375人阅读  评论(0)

1. 数组查找操作:定义一个长度为10 的一维字符串数组,在每一个元素存放一个单词;然后运行时从命令行输入一个单词,程序判断数组是否包含有这个单词,包含这个单词就打印出“Yes”,不包含就打印出“No”。
思路:拆分题目定义数组不用说,命令行输入则想到之前讲的获取键盘输入Scanner。接着封装方法,定义一个判断指标,循环遍历数组比对数组里的值是否相等,相等则返回YES,若无就返回NO。

public class Test02 {
    public static void main (String[] args){
        String[] arr=new String[10];
        for(int i =0;i<10;i++){
            String a="a"+(int)(Math.random()*26);//生产随机字符串,便于测试
            arr[i]= a;
        }
        System.out.println("随机字符串:"+Arrays.toString(arr));
        System.out.println("请输入字符串:");
        Scanner scanner=new Scanner(System.in);
        String s=scanner.nextLine();
        is(arr,s);//调用方法

    }

    public  static  void is(String[] arr,String s){
        boolean flag=true;
        for(int i=0;i<10;i++){
                if(arr[i].equals(s)){//判断值是否相等
                    System.out.println("YES");
                    flag=false;
                }
            }
        if (flag){
            System.out.println("NO");
        }

    }


运行结果如下:

2. 获取数组最大值和最小值操作:利用Java的Math类的random()方法,编写函数得到0到n之间的随机数,n是参数。并找出产生50个这样的随机数中最大的、最小的数,并统计其中>=60的有多少个。
提示:使用 int num=(int)(n*Math.random());获取随机数。

思路:题干中变量有两个n和生成的随机数组,则接下来围绕这两个展开。获取最大最小值,就想到了既然我之前学了冒泡排序何不利用起来到时候只用取数组中的第一位和最后一位。接着统计就很好实现,定义计数器记数就是了。

public class Test03 {
    public static void main (String[] args){
        System.out.println("请输入随机数n:");
        Scanner scanner=new Scanner(System.in);
        int n= scanner.nextInt();
        int temp=0;//计数器
        int[] arr=new int[50];
        for (int i=0;i<50;i++){
            int num=(int)(n*Math.random());//生成0-n之间的int数值
            arr[i]=num;
            if(arr[i]>60){
                temp++;
            }
    }
        TestBubbleSort.Test(arr);//调用之前封装好的冒泡排序
        System.out.println(Arrays.toString(arr));//打印排序好的数组
        System.out.println("最小值:"+arr[0]+"最大值:"+arr[49]);
        System.out.println("大于60的个数:"+temp);
        }
}

public static void Test(int[] arr) {//冒泡排序
		if (n <= 1) return; //如果只有一位就不用排序了
        int temp;
        for (int i = 0; i < arr.length - 1; i++) {
            boolean log = false;
            for (int j = 0; j < arr.length - i - 1; j++) {
                if (arr[j] > arr[j + 1]) {
                    temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                    log = true;
                }
            }
            if (!log) break;
        }
    }

运行结果如下:

3.数组逆序操作:定义长度为10的数组,将数组元素对调,并输出对调前后的结果。
思路:把0索引和arr.length-1的元素交换,把1索引和arr.length-2的元素交换……
只要交换到arr.length/2的时候即可。

思路:哦题干中有,那没事了。

public class Test04 {
    public static void main (String[] args){
        int[] arr=new int[10];
        System.out.println("请输入随机数n:");//依旧是生产指定范围的随机10位数字
        Scanner scanner=new Scanner(System.in);
        int n= scanner.nextInt();
        for(int i=0;i<10;i++){
            arr[i]=(int)(n*Math.random());
        }
        System.out.println(Arrays.toString(arr));//打印调序前的数组
        s(arr);
        System.out.println(Arrays.toString(arr));//打印调序后的数组
    }
    static void s(int[] arr){
            int temp=0;
        for(int i=0;i<arr.length/2;i++){//想到冒泡;至于为啥-1,因为序列下标是从0开始的
            temp=arr[i];
            arr[i]=arr[arr.length-1-i];
            arr[arr.length-1-i]=temp;
        }
    }
}


第一次发文章有错望指出。嘻嘻!


转载:https://blog.csdn.net/weixin_43094046/article/details/106745582
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场