Java基础第5章编程题答案
第五章编程题
1.编写一个程序,实现字符串大小写的转换并倒序输出。要求如下:
(1)使用for循环将字符串“HelloWorld”从最后一个字符开始遍历。
(2)遍历的当前字符如果是大写字符,就使用toLowerCase()方法将其转换为小
写字符,反之则使用toUpperCase()方法将其转换为大写字符。
(3)定义一个StringBuffer对象,调用append()方法依次添加遍历的字符,最
后调用StringBuffer对象的toString()方法,并将得到的结果输出。
【参考答案】
public class Chap5e {
public static void main(String[] args) {
String str="Hell5oWorld";
char[] ch=str.toCharArray();
StringBuffer s=new StringBuffer();
for(int i=ch.length-1;i>=0;i--)
{
if(ch[i]>='A'&&ch[i]<='Z')
s.append(String.valueOf(ch[i]).toLowerCase());
else
if(ch[i]>='a'&&ch[i]<='z')
s.append(String.valueOf(ch[i]).toUpperCase());
else
s.append(String.valueOf(ch[i]));
}
System.out.print(s.toString());
}
}
2. 利用Random类来产生5个20`30之间的随机整数并输出。
【参考答案】
import java.util.Random;
public class Chap5e {
public static void main(String[] args) {
Random r=new Random();
for(int i=0;i<5;i++)
{
System.out.println(r.nextInt(30-20+1)+20);
}
}
}
3. 编程. 已知字符串:”this is a test of java”.
按要求执行以下操作:
(1) 统计该字符串中字母s出现的次数
(2) 取出子字符串”test”
(3) 将本字符串复制到一个字符数组Char[] str中.
(4) 将字符串中每个单词的第一个字母变成大写,输出到控制台。
(5) 用两种方式实现该字符串的倒叙输出。(用StringBuffer和for循环方式分别实现)
(6) 将本字符串转换成一个字符串数组,要求每个数组元素都是一个有意义的英文
单词,并输出到控制台
【参考答案】
public class Chap53e {
public static void main(String[] args) {
// TODO Auto-generated method stub
//(1)
String string="this is a test of java";
char[] s=string.toCharArray();
int count=0;
for(int i=0;i if(s[i]=='s') count++; System.out.println("s出现了"+count+"次"); //(2) String str1; str1=string.substring(string.indexOf('t', 1), https://www.360docs.net/doc/6815204845.html,stIndexOf('t')+1); System.out.println("子字符串为"+str1); //(3) char[] str=string.toCharArray(); String[] str2=string.split(" "); //(4) for(int i=0;i { //方法一 str2[i]=String.valueOf(str2[i].charAt(0)).toUpperCase()+str2[i]. substring(1); // 方法二 str2[i]=str2[i].replaceFirst(String.valueOf(str2[i].charAt(0)), String.valueOf(str2[i].charAt(0)).toUpperCase()); System.out.print(str2[i]+" "); } //(5) StringBuffer sbf=new StringBuffer("this is a test of java"); sbf.reverse(); System.out.println(sbf); for(int i=string.length()-1;i>=0;i--) System.out.print(string.charAt(i)); //(6) String[] strs3=string.split(" "); System.out.println(Arrays.toString(strs3)); } } 4. String str = "svd9876fsb543fdg210";将字符串中所有偶数转为int[] 数组, 再对数组冒泡排序,最后使用Arrays输出数组。 【参考答案一】 import https://www.360docs.net/doc/6815204845.html,ng.reflect.Array; import java.util.Arrays; public class Chap54e { public static void main(String[] args) { String str="svd9876fsb543fdg210"; StringBuffer sf=new StringBuffer(); int a,i,j; for(i=0;i { if(str.charAt(i)>='0'&&str.charAt(i)<='9') { a=Integer.valueOf(String.valueOf(str.charAt(i))); //或 a=Integer.parseInt(String.valueOf(str.charAt(i))); if(a%2==0) {sf.append(a);} } } int[] arr=new int[sf.length()]; for(i=0;i { arr[i]=Integer.valueOf(String.valueOf(sf.charAt(i))); } for(int k:arr) System.out.println(k); System.out.println(""); for(i=0;i for(j=0;j { int temp; if(arr[j]>arr[j+1]) { temp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp;// TODO Auto-generated method stub } } System.out.println(Arrays.toString(arr)); } } 【参考答案二】 import java.util.Arrays; public class Chap54e { public static void main(String[] args) { // 1.String str = "svd9876fsb543fdg210";将字符串中所有偶数转为int[] 数组, // 再对数组冒泡排序,最后使用Arrays输出数组。 String str = "svd9876fsb543fdg210"; StringBuilder sb = new StringBuilder(); // 1.遍历字符串,获取每个字符 for (int i = 0; i < str.length(); i++) { char charAt = str.charAt(i); // 2.判断当前字符是否为数字, if (Character.isDigit(charAt)) {// 如果是数字 // 3.再判断该字符是否为偶数如果是偶数 // char--->String--->int int parseInt = Integer.parseInt(String.valueOf(charAt)); if (parseInt % 2 == 0) { // 保存起来 sb.append(parseInt); } } } System.out.println("sb:" + sb); // 4.根据保存偶数数字的个数来创建int[] int[] arr = new int[sb.length()]; for (int i = 0; i < sb.length(); i++) { char charAt = sb.charAt(i);// 获取sb中下表为i的字符 // 将该字符转为int类型 int parseInt= Integer.parseInt(String.valueOf(charAt)); // 5.将存储的数字赋值给int[] // 将该int类型的值赋值给数组下表为i的元素 arr[i] = parseInt; } System.out.println(Arrays.toString(arr)); // 6.冒泡 maoPao(arr); // 7.输出 System.out.println(Arrays.toString(arr)); } /** * 对数组冒泡排序 * * @param arr * 被排序的数组 */ public static void maoPao(int[] arr) { for (int i = 0; i < arr.length - 1; i++) { for (int j = 0; j < arr.length - 1 - i; j++) { if (arr[j] > arr[j + 1]) { int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } } } 5.利用Math类获取5个随机整数范围在(15,30),不能重复,放在数组中,冒泡排 序后遍历输出。 【参考答案】 public class Chap55e { public static void main(String[] args) { int[] arr=new int[5]; int a; for(int i=0;i<5;i++) { a=(int)(Math.random()*(30-15))+15;// TODO Auto-generated method stub for(int j=0;j<5;j++) if(a==arr[j]) i--; else {arr[i]=a; break; } } for(int k:arr) System.out.print(k+" "); System.out.println(""); for(int i=0;i<4;i++) for(int j=0;j<4-i;j++) { int temp; if(arr[j]>arr[j+1]) { temp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp; } } for(int k:arr) System.out.print(k+" "); } } 6. 如下字符串: 01#张三#20*02#李四#18*03#王五#22*04#赵六#20*05#田七#21 分割出每个人的信息,样式如下: 01 张三 20 02 李四 18 ….. 创建Student类,属性:学号姓名年龄 (1)将这些Student对象放进数组中 (2)查询里面有没有叫田七的学生如果存在则打印学生的具体信息(封装成方法,键盘输入姓名) (3)计算所有学生的平均年龄,最大年龄,最小年龄 (4)如果存在名字叫张三的将名字改为张兵 【参考答案】 import java.util.*; class Student { private String xueHao; private String name; private int age; public String getXueHao() { return xueHao; } public void setXueHao(String xueHao) { this.xueHao = xueHao; } public String getName() { return name; } public void setName(String name) { https://www.360docs.net/doc/6815204845.html, = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Student() {} public Student(String xueHao,String name,int age){ this.xueHao=xueHao; https://www.360docs.net/doc/6815204845.html,=name; this.age=age; } } //测试类: public class Test { public static void main(String[] args){ Scanner input=new Scanner(System.in); String str="01#张三#20*02#李四#18*03#王五#22*04#赵六#20*05#田七#21"; String[] strs=str.split("[#*]"); System.out.println("1.按要求打印如下:"); for(int i=0;i System.out.print(strs[i]+" "+strs[i+1]+" "+strs[i+2]); System.out.println(); } //建立学生数组 Student[] arr=new Student[strs.length/3]; int count=0; for(int i=0;i arr[i]=new Student(strs[count],strs[count+1],Integer.parseInt(strs[count+2] )); count+=3; } System.out.println("2.查询里面有没有叫田七的学生如果存在则打印 学生的具体信息:"); System.out.println("请输入学生姓名:"); String name=input.next(); for(int i=0;i if(name.equals(arr[i].getName())){ System.out.print(arr[i].getXueHao()+" "+arr[i].getName()+" "+arr[i].getAge()); } } System.out.println(); //3.计算所有学生的平均年龄,最大年龄,最小年龄 System.out.println("3.计算所有学生的平均年龄,最大年龄,最小年龄:"); int ageSum=0; int ageMax=arr[0].getAge(); int ageMin=arr[0].getAge(); for(int i=0;i ageSum+=arr[i].getAge(); ageMax=ageMax>arr[i].getAge()?ageMax:arr[i].getAge(); ageMin=ageMin } System.out.println("所有学生的平均年 龄:"+ageSum/arr.length); System.out.println("所有学生中的最大年龄:"+ageMax); System.out.println("所有学生中的最小年龄:"+ageMin); //4.如果存在名字叫张三的将名字改为张兵 System.out.println("4.如果存在名字叫张三的将名字改为张兵:"); for(int i=0;i String temp="张三"; if(temp.equals(arr[i].getName())){ arr[i].setName("张兵"); System.out.println("arr["+i+"]="+arr[i].getName()); } } input.close(); } } 7. 键盘录入一个字符串,统计一个字符串中大写字母字符,小写字母字符,数字 字符出现的次数。(不考虑其他字符) 【参考答案】 import java.util.*; import java.util.Scanner; public class Test { public static void main(String[] args) { // 1、键盘录入一个字符串,统计一个字符串中大写字母字符,小写字母字符,数字字符出现的次数。(不考虑其他字符) // String str = "asdBDGSf1243dSB"; //1.键盘录入一个字符串,包含大写小写和数字 Scanner sc = new Scanner(System.in); System.out.print("录入一个字符串,包含大写小写和数字:"); String str = sc.next(); sc.close(); //2.定义三个统计变量 int upperCaseCount = 0;//大写字符的统计变量 String upperStr = ""; int lowerCaseCount = 0;//小写字符的统计变量 String lowerStr = ""; int digitCount = 0;//数字字符的统计变量 String digitStr = ""; //3.遍历字符串,获取每个字符 for(int i=0;i char charAt = str.charAt(i); //4.判断当前字符是大写,小写还是数字 //5.根据判断结果,让对应的统计变量+1 if(charAt>='A' && charAt<='Z'){//大写字符 upperCaseCount++; upperStr+=charAt; } if(charAt>='a' && charAt<='z'){//小写字符 lowerCaseCount++; lowerStr+=charAt; } if(charAt>='0' && charAt<='9'){//数字字符 digitCount++; digitStr+=charAt; } } //6.输出统计变量的结果 System.out.println(upperStr+"大写字母的个数是: "+upperCaseCount); System.out.println(lowerStr+"小写字母的个数是: "+lowerCaseCount); System.out.println(digitStr+"数字字符的个数是: "+digitCount); } } *8. 用户随便输入一个日期(yyyy-MM-dd), 打印出这个日期所在月的每一天, 格式如下: 日一二三四五六 1 2 3 4 5 6 提示: (1)字符串 --> util.Date (2) Date --> Calendar (3)修改日期 --> set (4)记录用户输入的是哪一天 --> get (5)判断星期几 --> get (6)获取该月份的最大天数 --> calendar.getActualMaximum (7)日期自增 --> add 【参考答案】 import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import java.util.Scanner; public class TestCalendar { //public class test{ public static void main(String[] args) { //创建扫描器 Scanner sc = new Scanner(System.in); while (true){ //提示用户输入 System.out.println("请输入一个日期,格式为:2018-12-05,输入exit 退出"); //接受用户输入 String temp = sc.nextLine(); if(temp.equalsIgnoreCase("exit")){//判断两个字符串是否相等忽略 大小写 System.out.println("ByeBye"); break; } //创建日期格式化对象 //DateFormat日期格式化类 DateFormat format = new SimpleDateFormat("yyyy-MM-dd"); try { //string --> date Date date = format.parse(temp);//此处需添加异常 //date --> Calendar //创建日历对象 Calendar calendar = new GregorianCalendar(); //设置日期为用户输入日期 calendar.setTime(date); //打印日历抬头 System.out.println("日\t一\t二\t三\t四\t五\t六"); //记录用户输入的日 int currentDate = calendar.get(Calendar.DATE); //修改日期为此月的第一天 calendar.set(Calendar.DAY_OF_MONTH,1); //获取第一天是星期几 int week = calendar.get(Calendar.DAY_OF_WEEK);//1-7 //打印缩进 for (int i = 1; i < week; i++) { System.out.print("\t"); } //获取当月的最大天数 int maxDate=calendar.getActualMaximum(calendar.DATE); //循环打印天数 for (int i = 1; i <= maxDate; i++) { //如果是当天,打印一个* if(calendar.get(Calendar.DATE) == currentDate){ System.out.print("*"); } //打印该天 System.out.print(i+"\t"); //如果是周六,打印换行 if(calendar.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) { System.out.println(); } //天数加一 calendar.add(Calendar.DATE,1); }} catch (ParseException e) { e.printStackTrace(); } System.out.println(); } } }