第五章题总结

5.1
在这里插入图片描述
answer1: 利用数据扩容来做哦

import java.util.*;
class test511{
    public static void main(String[] args){
        Scanner scanner =new Scanner(System.in);
        //定义一个空数组
        int [] arr=new int[0];
        //用户请输入数据
        System.out.print("用户请输入数据 ");
        //将数据放到扩容后的新数组中
        while(true){
           int num=scanner.nextInt();
           if(num==0){
               break;
           }
           //验证用户输入数据的正确性
           if(num<1||num>100){
               System.out.print("数据非法 ");
               return;
           }
           arr=copyOf(arr,arr.length+1);
           arr[arr.length-1]=num;
        }
        //按照输出结果,将数据中的数据进行排序
       insertSort(arr);
        //输出连续相等的数字   
        show(insertSort(arr));
    }
    public static int [] copyOf(int [] arr,int len){
        int [] newArr=new int [len];
        for(int i=0;i<arr.length;i++){
              newArr[i]=arr[i];
        }
        return newArr;
    }
    public static int []   insertSort(int [] arr){
        for(int i =1;i<arr.length;i++){
            int e=arr[i];
            int j;
            for( j=i;j>0&&arr[j-1]>e;j--){
             arr[j]=arr[j-1];
            }
            arr[j]=e;
        }
        return arr;
    }
    public static void show(int [] arr){
       // System.out.print(Arrays.toString(arr));
        for(int i=0;i<arr.length;){
            int count=1;
            for(int j=i+1;j<arr.length;j++){
                if(arr[i]==arr[j]){
                    count++;
                }
                else{
                    break;
                }
            }
            System.out.println(arr[i]+"occurs"+count+ (count>1?"times":"time"));
            i+=count;
        }
    }
}

answer2:利用计数原理做哦

import java.util.*;
class test511_02{
    public static void main(String[] args){
        Scanner scanner =new Scanner(System.in);
        //定义一个空数组
        int [] arr=new int[101];
        //用户请输入数据
        System.out.print("用户请输入数据 ");
        while(true){
           int num=scanner.nextInt();
           if(num==0){
               break;
           }
           arr[num]++;
       }
    for(int i=0;i<arr.length;i++){
        if(arr[i]!=0){
            System.out.println(i+"occurs"+arr[i]+ (arr[i]>1?"times":"time"));
        }
    }
    
}
}

5.2
在这里插入图片描述
这道题有三种解法
anwer1:新建一个数组来做,不过这样做比较占用空间

import java.util.*;
class test52_01{
    public static void main(String[] args){
      Scanner scanner =new Scanner(System.in);
      //循环遍历数组并且进行赋值
      int [] arr=new int[10];//空间是S(n) 时间是O(n^2)
      System.out.print("请输入数据 ");
      int num;
      for(int i=0;i<arr.length;i++){
        num=scanner.nextInt();
        arr[i]=num;
      }
      //创建一个新数组,如果这个新数组和arr数组进行比较,如果newArr
      //不包含arr中的数据,然后将arr数据放到newArr中
       System.out.print(method(arr));
    }
    public static int [] method(int [] arr){
        int [] newArr=new int [0];
        for(int i=0;i<arr.length;i++){
            if(!isContains(newArr,arr[i])){
                newArr=copyOf(newArr);
                newArr[newArr.length-1]=arr[i];
            }
        }
           return newArr;
    }
    public static boolean isContains(int [] arr,int key){
        for(int i=0;i<arr.length;i++){
            if(arr[i]==key){
                return true;
            }
        }
        return false;
    }
    public static int [] copyOf(int [] newArr){
        int [] newArr1=new int [newArr.length+1];
        for(int i=0;i<newArr.length;i++){
             newArr1[i]=newArr[i];
        }
        return newArr1;
    }
}

answer2:利用数组数据连续相等的原理来做

/*
利用数据连续相等的原理
*/
import  java.util.*;
class test52_02{
    public static void main(String []  args){
       System.out.print("请输入数据 ");
       Scanner scanner =new Scanner(System.in);
       //创建一个数据  空间是S(1)
       int [] arr=new int [10];
       for(int i=0;i<arr.length;i++){
           arr[i]=scanner.nextInt();
       } 
      // System.out.print(Arrays.toString(arr));
       method(arr);
    }
    public static void method(int [] arr){
        //利用连续相等的原理
        for(int i=0;i<arr.length;i++){
            System.out.print(arr[i]);
            int count=1;
            for(int j=i+1;j<arr.length;j++){
                if(arr[j]==arr[i]){
                    count++;
                }
                else{
                    break;
                }
            }
            i+=count;
        }
    }
}

answer3:这种解法就是当发现有相等的数,就把后面的数往前移,相当于覆盖

import java.util.*;
class test52_03{
    public static void main(String[] args){
        //如果两数不相等,就将后面的数字往前移
        Scanner scanner=new Scanner(System.in);
        System.out.print("请输入十个数字 ");
        int [] arr =new int[10];
        for(int i=0;i<arr.length;i++){
              arr[i]=scanner.nextInt();
        }
        method3(arr);
    }
    public static void method3(int [] arr){
             int i=0;
             int size=arr.length;
             while(i<size){
                 for(int j=i+1;j<size;j++){
                     if(arr[j]==arr[i]){
                     for(int k=j+1;k<size;k++){
                         arr[k-1]=arr[k];
                     }
                     size--;
                     }
                     else{
                        j++;
                     }   
                 }
                 i++;
             }
             for( i=0;i<size;i++){
               System.out.print(arr[i]+" ");
             }
    }
}

5.3遍历数组,通过比较数组中个的每个元素来判断元素是否排好序
在这里插入图片描述

import java.util.*;
class test53{
    public static void main(String[] args){
        //获取数组的长度并对数组进行遍历
        Scanner scanner =new Scanner(System.in);
        System.out.print("输入数组的长度 ");
        int len =scanner.nextInt();
        //新建数组
        int [] arr=new int[len];
        //遍历数组并且赋值
        System.out.print("输入数组的数据 ");
        for(int i=0;i<arr.length;i++){
            arr[i]=scanner.nextInt();
        }
        //对数组进行有序的判断
        if(isSort(arr)){
            System.out.print("数组已经排好序了 ");
        }
        else{
            System.out.print("数组没有排好序 ");
        }
       
        }
        public static boolean isSort(int [] list){
            for(int i=1;i<list.length;i++){
                if(list[i-1]!=list[i]){
                    return false;
                }
            }
            return true;
    }
}


5.4数组在现实中的应用
在这里插入图片描述
在这里插入图片描述
看代码哦

/*
输入数据:球的个数=路径的个数 槽子的个数
创建槽子个数的容器int []  arr
对于每一个小球的下落的路径是字符L或者R
对于每一个小球而言其路径中的步骤是随机产生R和L
1,提示用户输入球的个数和槽子的个数
2,根据已有的槽子的个数区创建槽子容器
3,根据已有的球的个数和槽子的个数区随机创建一个小球下落的路径
4,路径中经过几个钉子?路径的步骤有几步和槽子的个数有关
5,如何通过路径的经过得知最终落入的槽子?
*/
import java.util.*;
class test54{
    public static void main(String [] args){
     Scanner scanner=new Scanner(System.in);
     System.out.print("Enter the number of balls to drop ");
     int balls=scanner.nextInt();
     System.out.print("Enter the number of slots in the bean machine ");
     int slots=scanner.nextInt();
     //创建槽子个数的容器int []  arr
     int [] arr=new int[slots];
     //每一个球对应一种路径
     for(int i=0;i<balls;i++){
         String path=getPath(slots);
         //打印这些球的路径
         System.out.println(path);
         //打印槽子底部球落入的个数 主要是看R的个数
         //一个R代表1号槽,同理其他一样
         arr[getR(path)]++;
     }
     //输出arr槽子的情况
     System.out.println(Arrays.toString(arr));
     show(arr);
    }
    public static void show(int  [] arr){
        int w=arr.length;
        int h=0;
        for(int i=0;i<arr.length;i++){
            //求出高的最大值
            if(h<arr[i]){
                h=arr[i];
            }
        }
        for(int i=h-1;i>=0;i--){
            for(int j=0;j<w;j++){
                if(i<arr[j]){
                    System.out.print("O");
                }
                else{
                    System.out.print(" ");
                }
            }
            System.out.println();
        }
    }

    public static String getPath(int slots){
        Random random =new Random();
        String path=" ";
        //根据槽子的个数计算每个数下落的路径
        //对于每一个小球而言,碰到每一个钉子都有两种路径R和L
         //钉子的个数是slots-1
        for(int j=0;j<slots-1;j++){
            //产生一个随机路径R或者L
            if(random.nextInt(2)==0){
                path+="L";//向左
            }
            else {
                path+="R";//向右
            }
        }
        return path;
    }
    public static int getR(String path){
        int count=0;
        for(int i=0;i<path.length();i++){
            if(path.charAt(i)=='R'){
                count++;
            }
        }
        return count;
    }
}

5.5
先判断长度是否相等,再判断两个数组中的元素是否相等
在这里插入图片描述

/*
判断两个数组是否相等
*/
import java.util.*;
class test55{
    public static void main(String[] args){
     Scanner scanner =new Scanner(System.in);
     System.out.print("输入list1的个数 ");
     int len1=scanner.nextInt();
     int [] list1=new int [len1];
     System.out.print("输入list1的数据 ");
     for(int i=0;i<list1.length;i++){
         list1[i]=scanner.nextInt();
     }
     System.out.print("输入list2的个数 ");
     int len2=scanner.nextInt();
     int [] list2=new int [len1];
     System.out.print("输入list2的数据 ");
     for(int i=0;i<list2.length;i++){
         list1[i]=scanner.nextInt();
     }
   
    }
    public static boolean equals(int [] list1,int [] list2){
        //判断数组长度是否相等
        if(list1.length!=list2.length){
            return false;
        }
        //在判断元素的大小
        for(int i=0;i<list1.length;i++){
            if(list1[i]!=list2[i]){
              return false;
            }
        }
        return true;
    }

}

5.6利用数组相等原理做的,看代码~!
在这里插入图片描述

import java.util.*;
class test56{
    public static void main(String[] args){
    Scanner scanner =new Scanner(System.in);
     System.out.print("输入arr的个数 ");
     int len=scanner.nextInt();
     int [] arr=new int [len];
     System.out.print("输入arr的数据 ");
     for(int i=0;i<arr.length;i++){
         arr[i]=scanner.nextInt();
     }
    }
    public static void method(int [] arr){
        for(int i=0;i<arr.length;i++){
            int count=1;
            for(int j=i+1;j<arr.length;j++){
                if(arr[i]==arr[j]){
                    count++;
                }
                else{
                    break;
                }
            }
            if(count>=4){
                System.out.print(arr[i]);
                break;
            }
            i+=count;
        }
        System.out.print("没有 !");

    }
}

5.7先判断两个是否为空
不为空的话,两数组进行比较,把较小的元素,一次放到第三个数组中
在这里插入图片描述

import java.util.*;
class test57{
    public static void main(String [] args){
        Scanner scanner =new Scanner(System.in);
        System.out.print("输入list1的个数 ");
        int len1=scanner.nextInt();
        int [] list1=new int [len1];
        System.out.print("输入list1的数据 ");
        for(int i=0;i<list1.length;i++){
            list1[i]=scanner.nextInt();
        }
        System.out.print("输入list2的个数 ");
        int len2=scanner.nextInt();
        int [] list2=new int [len2];
        System.out.print("输入list1的数据 ");
        for(int i=0;i<list2.length;i++){
            list2[i]=scanner.nextInt();
        }
         System.out.print(Arrays.toString( merge(list1, list2)));
    }
    public static int[] merge(int [] list1,int [] list2){
        if(list1==null&&list2==null){
            return null;
        }
        if(list1==null){
            return list2;
        }
        if(list2==null){
            return list1;
        }
        //如果两者都不为空
        int[] list3=new int[list1.length+list2.length];
        int p1=0;
        int p2=0;
        int p3=0;
        while(true){
            if(p1==list1.length&&p2==list2.length){  //说明p1和p2都已经走完了
                 break;
        }
        if(p1==list1.length&&p2<list2.length){
            list3[p3++]=list2[p2++];
        }
        else if(p1<list1.length&&p2==list2.length){
            list3[p3++]=list1[p1++];
        }
        else{
            if(list1[p1]<list2[p2]){
                list3[p3++]=list1[p1++];
            }
            else{
                list3[p3++]=list1[p2++]; 
            }
        }
    }
    return list3;
    }
}

5.8
数组在现实中的应用
在这里插入图片描述

扫描二维码关注公众号,回复: 10173899 查看本文章
/*
数据 一组单词的明文 一组单词的密文 单词的状态
******
p***** 输入p时显示p
*/
import java.util.*;
class test58{
public static void main(String[] args){
    Scanner scanner =new Scanner(System.in);
    Random random=new Random();
    //1创建一个单词表
    String [] words={"rerer","sttfdg","java","gddfg","program"};
    //2随机从单词表中抽取一个单词
    while(true){
    String word=words[random.nextInt(words.length)];
    //3创建一个该单词默认值(false)密文
    boolean [] status=new boolean[word.length()];
     int miss=0;//猜错的个数
     while(true){
     //4开始第一个单词
     //5根据单词和密文表,决定密文的形式
     String ciphertext=getCipherText(word,status);
     //6输出密文并提示用户输入字母
     System.out.print("Enter a letter in word"+ciphertext+">");
      char letter =scanner.nextLine().charAt(0);
      //判断单词中是否有字母
      if(isContainsLetter(word,letter)){
          //单词有的话是分两种情况,已经修改和未修改
          if(!changeWordStatus(word, status, letter)){
              //如果为true说明是已经修改了
              //如果是false说明没有修改
             System.out.print(letter+"is already in word ");
          }
      }
     else {
        System.out.print(letter+"is  not in word ");
        miss++;
     }
         //是否结束
         if(isFinished(status)){
           System.out.print("The word is"+word +"you miss"+miss+"times");
             break;
        }
        }
         System.out.print("Do you want to guess annother word?Enter n or y");
         String choice =scanner.nextLine();
         if(choice.equals("n")){
          System.out.print("welcome!Thank you ");
              break;
         }
        }
       }
public static boolean isFinished(boolean[] status){
            for(int i=0;i<status.length;i++){
                if(!status[i]){
                    return false;
                }
            }
            return true;
}
public static boolean   changeWordStatus(String word,boolean[] status,char letter){
           for(int i=0;i<word.length();i++){
               if(letter==word.charAt(i)){
                   if(status[i]){ //表示已经修改了
                       return false;
                   }
                   else{
                       status[i]=true;
                   }
               }
           }
           return true;
}
public static boolean isContainsLetter(String word,char letter){
                  for(int i=0;i<word.length();i++){
                      if(word.charAt(i)==letter){
                          return true;
                      }
                  }
                  return false;
}
public static String getCipherText(String word,boolean[] status){
       String ciphertext=" ";
       for(int i=0;i<status.length;i++){
           if(status[i]){
               ciphertext+=word.charAt(i);
           }
           else{
            ciphertext+="*";
           }
       }
       return ciphertext;
}
}

未完待续!!!!!!!

发布了52 篇原创文章 · 获赞 0 · 访问量 1209

猜你喜欢

转载自blog.csdn.net/qq_37244548/article/details/104378412