for循环练习题

第四题:

代码如下:

package com.webserver.http;

import java.util.Arrays;

public class MainTest {

    public static void main(String[] args) {
        String[] a="1,5,3,2,3,4,5,1,3,5".split(",");
        String[] b = new String[0];
        int[]  c=new int[0];
        for (int i = 0; i < a.length; i++) {
            boolean   isContains=false;
            int j = 0;
            for (     ; j < b.length; j++) {
                if (a[i] .equals(b[j]) ) {
                    isContains=true;
                    c[j]=c[j]+1;
                }
            }
            if(isContains==false) {
                b = Arrays.copyOf(b, b.length + 1);
                b[b.length - 1] = a[i];
                c = Arrays.copyOf(c, c.length + 1);
                c[j] = 1;

            }
        }

        for (int i = 0; i <c.length-1 ; i++) {
            for (int j = 0; j <c.length-i-1 ; j++) {
                if(c[i]<c[i+1]){
                    int t=c[i];
                    c[i]=c[i+1];
                    c[i+1]=t;

                    String te=b[i];
                    b[i]=b[i+1];
                    b[i+1]=te;
                }
            }
        }

        for (int i = 0; i < b.length; i++) {
            System.out.println("数字"+b[i]+":出现===" +c[i] +  "次");
        }
    }
}







//        数字1:出现===2次
//        数字5:出现===3次
//        数字3:出现===3次
//        数字2:出现===1次
//        数字4:出现===1次






//            if(b.length==0){
//                b = Arrays.copyOf(b, b.length + 1);
//                b[b.length-1] = a[i];
//            }else{
//                for (int j = 0; j < b.length; j++) {
//                    System.out.println("a"+i+a[i]+"---"+"b"+j+b[j]);
//                    if (a[i] .equals(b[j]) ) {
//                        isContains=true;
//                    }
//                }
//                if(isContains==false) {
//                    System.out.println(a[i]);
//                    b = Arrays.copyOf(b, b.length + 1);
//                    b[b.length-1] = a[i];
//                }
//            }

将ArrayList集合元素反转

List<String> list = new LinkedList<>();
list.add("a");  list.add("b");
list.add("c");  list.add("d");
list.add("e");  list.add("f");
System.out.println("list集合反转前="+list);
for (int i = 0; i < list.size()/2; i++) {
      String e=list.get(i);
      String rsEle=list.set(list.size()-i-1 , e);
     list.set(i, rsEle);
}
System.out.println("list集合反转后="+list);

扩展: 按照上边的思路将数组元素反转


    public static void main(String[] args) {
        char[]  chs={'a', 'b','c', 'd','e'};
        //请写一个方法,将数组chs传入,在方法中将数组的第0位和length-1位交换, 将第1位和length-2位交换,
        //将第2位和length-3位交换。  来实现数组反转。 然后将反转后的数组返回
        //注意: 如果方法的使用还不太会,就直接在main方法中写反转代码,然后打印结果就可以了
        char[] result=reverse(chs);
    }
    private static char[] reverse(char[] chs) {
        //反转代码
        return  chs;
    }


答案:
import java.util.Arrays;

public class Demo16 {
    public static void main(String[] args) {
        char[] chs = {'a', 'b', 'c', 'd', 'e'};
        char[] result = reverse(chs);
        System.out.println(Arrays.toString(result));
    }

    private static char[] reverse(char[] chs) {
        for (int i = 0; i < chs.length / 2; i++) {
            char s = chs[i];
            chs[i] = chs[chs.length - i - 1];
            chs[chs.length - i - 1] = s;
        }
        return chs;
    }
}

元素修改位置练习:

package com.zyq.se.collection;

/**
 * author zhaoYQ
 * 考察独立思考问题, 用代码解决问题的能力
 */
public class Test {
    public static void main(String[] args) {
        int[] x={2,7,3,6,4};
        //如果方法不太会用请直接将这段逻辑代码在这里完成
        int[] rs=moveArrElements(x,2);
    }

    private static int[] moveArrElements(int[] x,int count) {
        //笔试题1 :
        // 有n个整数组成的int数组x,使其前面各数顺序向后复制count个位置,最后count个数变成最前面的count个数
        //举例说明:有5个整数组成的int数组int[] x={3,6,4,2,7},
        //                                   0 1 2 3 4
        // 使其前面的5-2个数(前边三个数)顺序向后复制2个位置
        // (先将元素4复制到x[4]处,再将元素6复制到x[3]处,再将元素3复制到x[2]处),
        // 最后m个数变成最前面的m个数
        // (需要在复制之前先存储最后两位, 在最后将最后两位 复制到左数前两位)
        //最终变成: int[] x={2,7,3,6,4}, 并返回此数组
        return  x;
    }
}



答案

答案2:

答案3:

删除数组元素练习:
 

package com.zyq.se.collection;

/**
 * author zhaoYQ
 * 考察独立思考问题, 用代码解决问题的能力
 */
public class Test {
    public static void main(String[] args) {
        String[] x={"潜艇0","潜艇1","潜艇2","潜艇3","潜艇4"};
        //如果方法不太会用请直接将这段逻辑代码在这里完成
        String[] rs=deleteBombSubMarine(x,2);
        System.out.println("删除元素之后数组变为 = " + rs);
    }

    private static String[] deleteBombSubMarine(String[] seaObject,int num) {
        //笔试题1 :
        //将数组seaObject中 元素编号是num的倍数的元素删除
        //提示: 如果满足if条件, 就将当前元素和最后一个元素交换,
        // 然后用seaObject=Arrays.copyOf(seaObject,seaObject.length-1)对数组缩容
        // (删除最后一个元素)
        return  seaObject;
    }
}

截取文件后缀名练习:

public class Day01Test01 {
	public static void main(String[] args) {
		String fileName1 = "logo.png";//要截取png
		char[] fileName1Arr = fileName1.toCharArray();
		// fileName1.toCharArray()是将"logo.png"中的每个字符放入到字符数组
		//结果是char[] fileName1Arr ={ 'l', 'o', 'g', 'o', '.', 'p', 'n', 'g' }
		//请用循环方式将字符数组fileName1Arr中的最后一个.之后的所有内容获取出来(.png),然后拼接为字符串在下边显示
		//提示,将字符转字符串写法:   '.'+ "" + 'p' +'n' + 'g'
		System.out.println("logo.png中截取图片后缀名,结果:  ");
	}
}

答案:

public static void main(String[] args) {
		String fileName = "123.png";
		
		boolean check = fileName.endsWith(".png");
		//判断以 .png 结尾用错方法了,应该用endsWith()
		if(check) {
			System.out.println("是png图片!");
		}else {
			System.out.println("不是png图片!");
		}
	}

其他答案:

package Day07;

import java.util.Scanner;

public class CutSuffix {
    public static void main(String[] args) {
        System.out.println("请输入一个后缀为.png的字符串:");
        String fileName1 = new Scanner(System.in).nextLine();
        String rs=cut(fileName1);
		if(rs.equalsIgnoreCase(".png")) {
			System.out.println("是png图片!");
		}else {
			System.out.println("不是png图片!");
		}
    }


    //截取最后一个小数点后的所有字符并输出
    public static String cut(String s) {
        char[] ch = s.toCharArray();
        int index = -1;
        for (int i = ch.length - 1; i >= 0; i--) {
            if (ch[i] == '.') {
                index = i;
                break;
            }
        }
        if (index == -1) {
            System.out.println("没有.");
            return;
        }
        char[] c = new char[ch.length - index];
        String str = "";
        for (int i = 0; i < ch.length - index; i++) {
            c[i] = ch[index + i];
            str = str + c[i];
        }
        return str;
    }
}

其他答案:

生成一个4位验证码(数字和字母的组合)然后输出到控制台并提示用户输入该验证码,只要用户输入正确(无论大小写都算),

/*
 * 生成一个4位验证码(数字和字母的组合)
 * 然后输出到控制台并提示用户输入该验证码,只要用户输入正确(无论大小写都算),
 * 就输出:验证码正确,否则输出:验证码错误
 *  注意: 字符串比较用equals(), 举例 "hello".equals(输入的字符串)
 *
 * 验证码如何生成?
 * 思路导向填空:
 * 1:要先确定生成的内容范围(列出所有可以出现的字符):
 */
class T{

}

答案:

package com.zyq.homeWorkSE;

import java.io.File;
import java.util.Scanner;

/**
 * 生成一个4位验证码(数字和字母的组合)
 * 然后输出到控制台并提示用户输入该验证码,只要用户输入正确(无论大小写都算),
 * 就输出:验证码正确,否则输出:验证码错误
 *  注意: 字符串比较用equals(), 举例 "hello".equals(输入的字符串)
 *
 * 验证码如何生成?
 * 思路导向填空:
 * 1:要先确定生成的内容范围(列出所有可以出现的字符):
 * 	 
 * 2:先思考如何生成其中的一个字符呢?
 *   2.1:确定怎么保存这些可以出现的字符:
 *   2.2:怎么能随机抽选一个
 *   
 * 3:既然可以生成一个,如何做到生成4个或更多个?  
 *  
 * 4:怎么在生成这些字符的过程中将他们组成一个字符串?
 * 
 * 5:获取到用户输入的字符串后怎么与之比较,要利用到哪些字符串操作?
 *
 * @author zhaoYQ
 *
 */
public class Day01Test06 {
	public static void main(String[] args) {
		//一、产生所有可能的字母数组
		//1.char[]codes数组用来存储所有可能的字符
		char[] codes=new char[62];

		//2.循环26次产生: 产生26个小写字符放入,产生26个大写字母放入
		// 逻辑: (每次给上一个字母+1得到下一个字母)
		int lowerLetter='a';
		int upperLetter='A';
		for (int i = 0; i <26 ; i++) {
			codes[i]=(char)(lowerLetter++);
			codes[i+26]=(char)(upperLetter++);
		}

		//3.循环10次产生: 产生10个数字字符放入(从倒数第10位开始循环)
		// 逻辑: (每次给上一个数字字符+1得到下一个数字字符)
		int numLetter='0';
		for (int i = codes.length-10; i < codes.length; i++) {
			codes[i]=(char)numLetter++;
		}

		Scanner scan=new Scanner(System.in);
		StringBuilder verifCode=new StringBuilder();
		while(true){
			//二、生成验证码
			for (int i = 0; i <4 ; i++) {
				int letterIndex=(int)(Math.random()*codes.length);
				char aLetter=codes[letterIndex];
				verifCode.append(aLetter+"");
			}
			System.out.println("生成的验证码verifCode为  " + verifCode.toString());
			//三、输入
			System.out.println("请输入您看到的验证码:");
			String answer=scan.nextLine();
			//四、判断
			if((!"".equals(verifCode.toString()))
					&&verifCode.toString()!=null
					&&verifCode.toString().equalsIgnoreCase(answer)){
				System.out.println("恭喜您,输入正确");
				break;
			}else{
				System.out.println("您输入有误,请重试");
				//下一次生生验证码时清空此时的验证码内容
				verifCode.delete(0,verifCode.length());
			}
		}
	}
}

/*
		提示代码:
		需要用到的语句,尝试按照正确顺序将下列代码并放在main方法中完成需求,
		并在注释中标注每句话的作用,

		//【在这里标注该句代码意义】
		String line = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

		//【在这里标注该句代码意义】
		String code = "";

		//【在这里标注该句代码意义】
		Random random = new Random();

		//【在这里标注该句代码意义】
		for(int i=0;i<4;i++) {

		}
		//【在这里标注该句代码意义】
		char c = line.charAt(index);

		//【在这里标注该句代码意义】
		int index = random.nextInt(line.length());

		//【在这里标注该句代码意义】
		code+=c;

		//【在这里标注该句代码意义】
		System.out.println("请输入验证码:");

		//【在这里标注该句代码意义】
		Scanner scanner = new Scanner(System.in);

		//【在这里标注该句代码意义】
		if(code.equalsIgnoreCase(input)){

		}else{

		}

		//【在这里标注该句代码意义】
		System.out.println("验证成功!");

		//【在这里标注该句代码意义】
		System.out.println("验证失败!");

		//【在这里标注该句代码意义】
		String input = scanner.nextLine();

		//【在这里标注该句代码意义】
		System.out.println("验证码:"+code);
 */

其他答案1:

package com.zyq.homeWorkSE;

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

public class Day01Test06 {
    public static void main(String[] args) {
        //System.out.println(Arrays.toString(createChar()));
        String s = createVerCode(createChar());
        System.out.println(s);
        System.out.println("请输入验证码:");
        String str = new Scanner(System.in).nextLine();
        verification(str, s);
    }

    //生成字符集
    public static char[] createChar() {
        char[] chars = new char[62];
        for (int i = 0; i <= 9; i++) {
            chars[i] = (char) (i+ '0');
        }
        for (int i = 0; i < 26; i++) {
            chars[10 + i] = (char) (i + 97);
        }
        for (int i = 0; i < 26; i++) {
            chars[36 + i] = (char) (i + 65);
        }
        return chars;
    }

    //生成验证码
    public static String createVerCode(char[] chars) {
        Random rd = new Random();
        String s = "";
        for (int i = 0; i < 4; i++) {
            int nextInt = rd.nextInt(62);
            s = s + chars[nextInt];
        }
        return s;
    }

    //比较验证码
    public static void verification(String str, String s) {
        if (str.equalsIgnoreCase(s)) {
            System.out.println("验证码正确");
        } else {
            System.out.println("验证码错误");
        }
    }
}

其他答案2:

package Demo5;

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

public class Demo2 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String code = RandomCode(4);
        System.out.println("随机生成的四位验证码为:"+code);
        String inputCode = sc.next();
        System.out.println("请输入验证码:");
        System.out.println(inputCode);
        if (code.equalsIgnoreCase(inputCode)) {
            System.out.println("输入正确!");
            return;
        }else {
            System.out.println("输入错误!请重输!");
        }
        System.out.println();
    }


    public static String RandomCode(int num){
        String rcode = "";
        Random random = new Random();
        for (int i = 0; i < num; i++) {
            int a = random.nextInt(3);
            switch (a){
                case 0:
                    char chrcode=(char)(random.nextInt(26) + 65);//A 65-----90
                    rcode = rcode+chrcode;
                    break;
                case 1:
                    char chrcode1=(char)(random.nextInt(26) + 97);//97 --- 122
                    rcode = rcode+chrcode1;
                    break;
                default:
                    char chrcode2=(char) (random.nextInt(10)+48);//48--- 58
                    rcode = rcode+chrcode2;
                    break;
            }
        }
        return rcode;
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值