1、【难】如下字符串:01#张三#2002#李四#1803#王五#2204#赵六#2005#田七#21
创建Student类,属性:学号 姓名 年龄
1.将这些Student对象放进数组中
2.查询里面有没有叫田七的学生如果存在则打印学生的具体信息(封装成方法,键盘输入姓名)
3.计算所有学生的平均年龄,最大年龄,最小年龄
4.如果存在名字叫张三的将名字改为张兵
package expression.practice;
import java.util.Arrays;
import java.util.Scanner;
public class Demo2 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
//1.将这些Student对象放进数组中
Student[] students = getData();
System.out.println(Arrays.toString(students));
//2.查询里面有没有叫田七的学生如果存在则打印学生的具体信息(封装成方法,键盘输入姓名)
System.out.println("请输入学生的姓名:");
printStudentInfo(students,scanner.next());
//3.计算所有学生的平均年龄,最大年龄,最小年龄
queue(students);
getValue(students);
//4.如果存在名字叫张三的将名字改为张兵
change(students);
System.out.println(Arrays.toString(students));
}
public static Student[] getData() {
String string = "01#张三#20*02#李四#18*03#王五#22*04#赵六#20*05#田七#21";
String[] strings = string.split("\\*");
Student[] students = new Student[strings.length];
for (int i = 0; i < strings.length; i++) {
String[] strings1 = strings[i].split("#");
Student student = new Student(strings1[0],strings1[1],Integer.parseInt(strings1[2]));
students[i]=student;
}
return students;
}
public static void printStudentInfo(Student[] student,String name){
for (int i = 0; i < student.length; i++) {
if (student[i].getName().equals(name)){
System.out.println(student[i].toString());
return;
}
}
System.out.println("没有叫田七的同学");
}
public static void queue(Student[] students){
for (int i = 0; i < students.length-1; i++) {
for (int j = 0; j < students.length-1-i; j++) {
if (students[j].compareTo(students[j+1])>0){
Student t = students[j];
students[j]=students[j+1];
students[j+1]=t;
}
}
}
}
public static void getValue(Student[] students){
System.out.println("最大年龄是:"+students[students.length-1].getAge());
System.out.println("最大年龄是:"+students[0].getAge());
double sum = 0;
for (Student student : students) {
sum+=student.getAge();
}
System.out.println("平均年龄是:"+sum/students.length);
}
public static void change(Student[] students){
for (int i = 0; i < students.length; i++) {
if (students[i].getName().equals("张三")){
students[i].setName("张兵");
return;
}
}
System.out.println("没有叫张三的");
}
}
interface MyComparable{
public int compareTo(Object o);
}
class Student implements MyComparable {
private String ID;
private String name;
private int age;
public Student() {
}
@Override
public int compareTo(Object o) {
if (!(o instanceof Student)){
throw new ClassCastException("不是stu对象");
}
Student student = (Student) o;
return this.age-student.age;
}
public Student(String ID, String name, int age) {
this.ID = ID;
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"ID='" + ID + '\'' +
", name='" + name + '\'' +
", age=" + age +
'}';
}
public String getID() {
return ID;
}
public void setID(String ID) {
this.ID = ID;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
总结:此题考查的就是接口、匿名内部类的知识。
2、【难】从控制台输入一个字符串,记录出现次数最多的字符,并输出这个字符出现了多少次
package expression.practice; import java.util.Scanner; public class Demo1 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("请输入字符串:"); String string = scanner.next(); char[] chars = string.toCharArray(); int maxcount = 0; int count = 1; char maxchar = ' '; int index; for (int i = 0; i < chars.length; i++) { index = i; for (int j = i+1; j < chars.length; j++) { if (chars[index] == chars[j]){ count++; } if (chars[index]!=chars[j]){ if (maxcount<count){ maxcount=count; maxchar=chars[index]; } count=1; } } } System.out.println("出现次数最多的字符为:"+maxchar+"出现的次数为:"+maxcount); } }
总结:此题考查其实就是字符串的常用的非静态方法与逻辑上的想法。
3、验证ean-13条码的验证码是否正确
String code = "6921168509256";
取前12位的奇数位的和
取前12位的偶数位的和
将"奇数位和"与"偶数位和的三倍"相加求和
取和的个位数,然后用10减去这个个位数,相减的结果就是条码的验证码
如果条码的第13位数字和这个验证码相同就说明验证码正确
此题示例代码如下:
package com.homework.task; /** * 1. 验证ean-13条码的验证码是否正确 * String code = "6921168509256"; * 取前12位的奇数位的和 * 取前12位的偶数位的和 * 将"奇数位和"与"偶数位和的三倍"相加求和 * 取和的个位数,然后用10减去这个个位数,相减的结果就是条码的验证码 * 如果条码的第13位数字和这个验证码相同就说明验证码正确 */ public class BigData01 { public static void main(String[] args) { String code = "1238"; int sum1 = 0; int sum2 = 0; int count = 1; int a = Integer.parseInt(code); int t = a%10; while(a!=0){ a = a/10; t = a%10; if (count%2==1){ sum1+=t; } if (count%2==0){ sum2+=t; } count++; } System.out.println("奇位数 = "+sum1); System.out.println("偶位数 = "+sum2); int num = sum1+sum2*sum2*sum2; int aa = num%10; int aaa = 10-aa; System.out.println("aaa = "+aaa); int q = Integer.parseInt(code); if (aaa == q%10){ System.out.println("验证码正确"); } } }
4、【难】给定一个长度,生成一个指定长度的字符串,这个字符串由随机的字母、数字或下划线组成。(不用必须同时包含字母、数字、下划线)
private static String get(int length) { String data = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890_"; Random random = new Random(); String str = ""; for (int i = 0; i < data.length; i++) { str = str.concat(String.valueOf(data.charAt(random.nextInt(data.length())))); } return str; }
Note:此题主要考察了字符串与常用类的结合运用。
5、【中】将一个字符串中最后一次出现的指定字符替换成大小写翻转的字符。 replace("hello", 'l') -> helLo replace("HELLO", 'L') -> HELlO
package com.homework.task; import java.util.Scanner; /** * 【中】将一个字符串中最后一次出现的指定字符替换成大小写翻转的字符。 */ public class BigData03 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("请输入字符串:"); String string = scanner.next(); System.out.println(string); char[] ch = string.toCharArray(); System.out.println("请输入指定的字符:"); String s = scanner.next(); char c = s.charAt(0); System.out.println(c); int index = string.lastIndexOf(c); if (ch[index]>='a'&&ch[index]<='z'){ c-=32; } if (ch[index]>='A'&&ch[index]<='Z'){ c+=32; } StringBuffer stringBuffer = new StringBuffer(new String(ch)); stringBuffer.setCharAt(index, c); System.out.println(stringBuffer); } }
Note: 从控制台输入的字符串其实其本身无法改变,只有借助StringBuffer类对象实现对字符串的改变。StringBuffer类不是一个字符串类,而是一个操作字符串的类。
6、已知字符串:"this is a test of java". 按要求执行以下操作:
(1) 【简】统计该字符串中字母s出现的次数
(2) 【简】取出子字符串"test"
(3) 【简】将本字符串复制到一个字符数组Char[] str中.
(4) 【中】将字符串中每个单词的第一个字母变成大写, 输出到控制台。
package com.homework.task; /** * 4. 已知字符串:"this is a test of java". 按要求执行以下操作: * (1) 【简】统计该字符串中字母s出现的次数 * (2) 【简】取出子字符串"test" * (3) 【简】将本字符串复制到一个字符数组Char[] str中. * (4) 【中】将字符串中每个单词的第一个字母变成大写, 输出到控制台。 */ public class BigData04 { public static void main(String[] args) { //(1) 【简】统计该字符串中字母s出现的次数 String string = "this is a test of java"; char[] ch = string.toCharArray(); int count = 0; for (int i = 0; i < ch.length; i++) { if (ch[i]=='s'){ count++; } } //(2) 【简】取出子字符串"test" String[] string1 = string.split(" +"); String s = null; for (int i = 0; i < string1.length; i++) { if (string1[i].equals("test")){ // s = "test"; s = new String(string1[i]); } } System.out.println(s); //(3) 【简】将本字符串复制到一个字符数组Char[] str中. char[] str1 = s.toCharArray(); //(4) 【中】将字符串中每个单词的第一个字母变成大写, 输出到控制台。 System.out.println(new String(str1)); } }