第四题:
代码如下:
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;
}
}