美文网首页
java的几个不错习题

java的几个不错习题

作者: 知识学者 | 来源:发表于2018-07-30 22:38 被阅读24次

    现在定义如下的一个数组:intoldArr[]={1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5},要求将以上数组中值为0的去掉,将不为0的值存入一个新的数组,
    生成的新数组为:intnewArr[]={1,3,4,5,6,6,5,4,7,6,7,5},并且把这个数组打印出来。请你写出完整的代码。

    code如下

    首先采用一个计数器,算出非0的数字位数,然后new一个新的数组,再把原来非0的数字放进去。 感觉还可以采用一个vector把非0的数字放进去,在吧它变成数组

    
    public class TestDem {
        
        /*
         * 主要是数组不是动态的,需要确定数组的大小。
         */
        
        public static int[] getArry(int[] arr)
        {
            int count=0;
        for(int i=0; i<arr.length; i++)
        {
            if(arr[i]!=0)
                count++;
        }
            
        int[] newArr=new int[count];
        
        
        count=0;
        for(int j=0; j<arr.length; j++)
        {
        
            if(arr[j]!=0)
            {
                newArr[count]=arr[j];
                count++;
            }else
            {
                continue;
            }
            
        }
        
            return newArr;
            
        }
        
        public static void display(int[] arr)
        {
            for(int i=0; i<arr.length; i++)
            {
                System.out.print(arr[i]+" ");
            }
        }
    
        public static void main(String[] args) {
    
         int[] arr={1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5};
        
         int[] newArry=getArry(arr);
         
         display(newArry);
         
         
        }
    
    }
    
    

    结果如下

    1 3 4 5 6 6 5 4 7 6 7 5

    已知一个很长的字符串,英文字母之间有很多数字(多位数),要求把所有这样的多位数全部找到(例如bpbn39ewi之间的39).求他们的和

    代码如下

    关键找出数字字符串,这个可以采用flag判断,连续的次数,为0就是非数字,在把数字字符串转成long形数,放到ArrayList中,在求和就行了。

    public class AddSum {
        
        /*
         * 
         * static long parseLong(String s) 
              将 string 参数解析为有符号十进制 long。   
                
           Character(char value) 
              构造一个新分配的 Character 对象,用以表示指定的 char 值。
              
         */
        
        public static long addsum(String str)
        {
            //String str="dffff21retop0py63uytpp16resddddp100oop900kkytwt";
        
            //集合应该放入对象,javad基本类
            List<Long> numlist=new ArrayList<Long>();
            List<String> chlist=new ArrayList<String>();
            
            int flag=0;
            String stg=null;
            long sum=0;
    
            for(int i=0; i<str.length(); i++)
            {
                char c=str.charAt(i);
                if(c>='0'&&c<='9')
                {
                    flag++;
                    System.out.println("-----"+c+"flag:"+flag);
                    
                }else
                {
                    System.out.println("第-"+i+"flag:"+flag);
                    
                    if(flag==0)
                        continue;
                    if(flag==1)
                    {
                        Character ch=new Character(str.charAt(i-1));
                        long num=Long.parseLong(ch.toString());                 
                        numlist.add(num);
                    }
                    if(flag>1)
                    {
                        char[] cr=new char[flag];
                    //注意顺序,不然得到的数字会是反着的。    
                        for(int j=0; j<flag; j++)       
                         cr[flag-j-1]=str.charAt(i-j-1);    
                       String sr=new String(cr);
                       chlist.add(sr);  
                    }
                    
                    flag=0;
                    
                    System.out.println("flag=0的时候continue执行不到这里啊");
                }   
            }
            
            
            for(int i=0;i<numlist.size(); i++)
                System.out.println("*****"+numlist.get(i));
            
            for(int i=0;i<chlist.size(); i++)
            {
                stg=chlist.get(i);
                numlist.add(Long.parseLong(stg));
                System.out.println("+++"+chlist.get(i));
            }
            
            System.out.println("成功的情况如下");
            for(int i=0;i<numlist.size(); i++)
            {
                System.out.print(numlist.get(i)+" ");
                sum+=numlist.get(i);
            }
            
            return sum;
        }
        
        
    
        public static void main(String[] args) {
    
            String str="dffff21retop0py63uytpp16resddddp100oop900kkytwt1gt8ty9999p";
            addsum(str);
                    
            System.out.print("sum="+addsum(str));       
            
            
    
        }
    
    }
    
    

    结果如下

    第-0flag:0
    第-1flag:0
    第-2flag:0
    第-3flag:0
    第-4flag:0
    -----2flag:1
    -----1flag:2
    第-7flag:2
    flag=0的时候continue执行不到这里啊
    第-8flag:0
    第-9flag:0
    第-10flag:0
    第-11flag:0
    -----0flag:1
    第-13flag:1
    flag=0的时候continue执行不到这里啊
    第-14flag:0
    -----6flag:1
    -----3flag:2
    第-17flag:2
    flag=0的时候continue执行不到这里啊
    第-18flag:0
    第-19flag:0
    第-20flag:0
    第-21flag:0
    -----1flag:1
    -----6flag:2
    第-24flag:2
    flag=0的时候continue执行不到这里啊
    第-25flag:0
    第-26flag:0
    第-27flag:0
    第-28flag:0
    第-29flag:0
    第-30flag:0
    第-31flag:0
    -----1flag:1
    -----0flag:2
    -----0flag:3
    第-35flag:3
    flag=0的时候continue执行不到这里啊
    第-36flag:0
    第-37flag:0
    -----9flag:1
    -----0flag:2
    -----0flag:3
    第-41flag:3
    flag=0的时候continue执行不到这里啊
    第-42flag:0
    第-43flag:0
    第-44flag:0
    第-45flag:0
    第-46flag:0
    -----1flag:1
    第-48flag:1
    flag=0的时候continue执行不到这里啊
    第-49flag:0
    -----8flag:1
    第-51flag:1
    flag=0的时候continue执行不到这里啊
    第-52flag:0
    -----9flag:1
    -----9flag:2
    -----9flag:3
    -----9flag:4
    第-57flag:4
    flag=0的时候continue执行不到这里啊
    *****0
    *****1
    *****8
    +++21
    +++63
    +++16
    +++100
    +++900
    +++9999
    成功的情况如下
    0 1 8 21 63 16 100 900 9999 第-0flag:0
    第-1flag:0
    第-2flag:0
    第-3flag:0
    第-4flag:0
    -----2flag:1
    -----1flag:2
    第-7flag:2
    flag=0的时候continue执行不到这里啊
    第-8flag:0
    第-9flag:0
    第-10flag:0
    第-11flag:0
    -----0flag:1
    第-13flag:1
    flag=0的时候continue执行不到这里啊
    第-14flag:0
    -----6flag:1
    -----3flag:2
    第-17flag:2
    flag=0的时候continue执行不到这里啊
    第-18flag:0
    第-19flag:0
    第-20flag:0
    第-21flag:0
    -----1flag:1
    -----6flag:2
    第-24flag:2
    flag=0的时候continue执行不到这里啊
    第-25flag:0
    第-26flag:0
    第-27flag:0
    第-28flag:0
    第-29flag:0
    第-30flag:0
    第-31flag:0
    -----1flag:1
    -----0flag:2
    -----0flag:3
    第-35flag:3
    flag=0的时候continue执行不到这里啊
    第-36flag:0
    第-37flag:0
    -----9flag:1
    -----0flag:2
    -----0flag:3
    第-41flag:3
    flag=0的时候continue执行不到这里啊
    第-42flag:0
    第-43flag:0
    第-44flag:0
    第-45flag:0
    第-46flag:0
    -----1flag:1
    第-48flag:1
    flag=0的时候continue执行不到这里啊
    第-49flag:0
    -----8flag:1
    第-51flag:1
    flag=0的时候continue执行不到这里啊
    第-52flag:0
    -----9flag:1
    -----9flag:2
    -----9flag:3
    -----9flag:4
    第-57flag:4
    flag=0的时候continue执行不到这里啊
    *****0
    *****1
    *****8
    +++21
    +++63
    +++16
    +++100
    +++900
    +++9999
    成功的情况如下
    0 1 8 21 63 16 100 900 9999 sum=11108
    
    

    第1题
    有一个很长的字符串
    yknysjmaazcoeyzjxpbqjklhpmflno klftkyrkgmddxsupkygcyajymhssiwbktddjpubfbtvg bngnrtuwcusewcspisorblkicfsqyrbyjerzvtiqhuhhkuerqoxzbycblepbhsmkkbcofbiyemnd
    oshipacmhztfjxueevkaqrbjdxbpoghmxuyruuqaioichmmbwbthisisanswer89712345669827202overnumbervzetsnuvntmqjtnzwoa aatyacxdtnhstdfnkfbckadibybixwzpgcketqospaljavkomnopgbfmzzxgeejsaxlconbywktswlwdvhpvwalvxnqshptcfyfrtzvnfef !eiobbkjtyilnbtqcayxbainnmtycutjkpnarstqcbamzzokyzvwneobybuyddrhipkygyx11qyci
    在thisisanswer和overnumber之间有一个数字,已知这个数字的10次方,就是一个系统的密码。求这个密码是多少?

    就是找出字符串之间的字符串,在找出数字,不过这个大幂指数计算,我放弃了。 在字符串,大佬可以kmp或者bf算法。

    相关的代码

    public class AlthDem {
        
        /*
         * int indexOf(String str) 
              返回指定子字符串在此字符串中第一次出现处的索引。 
              
         *   String substring(int beginIndex, int endIndex) 
              返回一个新字符串,它是此字符串的一个子字符串。 
              
          char charAt(int index) 
              返回指定索引处的 char 值。 
              
          StringBuilder append(char c) 
              将 char 参数的字符串表示形式追加到此序列 
              
              
         */
        
        public static String getNum(String str)
        {
            String tag1="thisisanswer";
            String tag2="overnumber";
            String tag=null;
            byte[] b;
            StringBuilder sb=new StringBuilder();
            
            int x1=str.indexOf(tag1);
            int x2=str.indexOf(tag2);
            
            tag=str.substring(x1, x2);
            b=tag.getBytes();
            System.out.println(tag+" ");
            
    
            for(int i=0; i<tag.length(); i++)
            {
                if(tag.charAt(i)>='0'&&tag.charAt(i)<='9')
                {
                    System.out.println(tag.charAt(i));
                    sb.append(tag.charAt(i));
                }
            }
            
            String end=new String(sb);
            
             System.out.println(end);
            
            
            return end;
        }
    
        public static void main(String[] args) {
            
            String str="yknysjmaazcoeyzjxpbqjklhpmflno  klftkyrkgmddxsupkygcyajymhssiwbktddjpubfbtvg bngnrtuwcusewcspisorblkicfsqyrbyjerzvtiqhuhhkuerqoxzbycblepbhsmkkbcofbiyemnd "
                    + " oshipacmhztfjxueevkaqrbjdxbpoghmxuyruuqaioichmmbwbthisisanswer89712345669827202overnumbervzetsnuvntmqjtnzwoa  aatyacxdtnhstdfnkfbckadibybixwzpgcketqospal"
                    + "javkomnopgbfmzzxgeejsaxlconbywktswlwdvhpvwalvxnqshptcfyfrtzvnfef  !eiobbkjtyilnbtqcayxbainnmtycutjkpnarstqcbamzzokyzvwneobybuyddrhipkygyx11qyci";
            
            getNum(str);
    
        }
    
    }
    
    

    结果如下

    thisisanswer89712345669827202 
    8
    9
    7
    1
    2
    3
    4
    5
    6
    6
    9
    8
    2
    7
    2
    0
    2
    89712345669827202
    
    

    相关文章

      网友评论

          本文标题:java的几个不错习题

          本文链接:https://www.haomeiwen.com/subject/zdmqvftx.html