java的几个不错习题

现在定义如下的一个数组: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
点赞