Ⅰ.程序分析题
1、分析如下程序,指出哪些语句会出现错误:
publicclass WrapperDemo {
publicstaticvoid main(String[] args) {
String a1="3";
String a2="abc";
String a3="10L";
String a4="012";
Integer x1=new Integer(a1);
Integer x2=new Integer(a2);
Integer x3=new Integer(a3);
Integer x4=new Integer(a4);
Long x5=new Long(a3);
String b1="3.14D";
String b2="3.14F";
String b3="3.14E2D";
String b4="3.14E2F";
String b5="abc";
Float y1=new Float(b1);
Float y2=new Float(b2);
Float y3=new Float(b3);
Float y4=new Float(b4);
Float y5=new Float(b5);
Double z1=new Double(b1);
Double z2=new Double(b2);
Double z3=new Double(b3);
Double z4=new Double(b4);
Double z5=new Double(b5);
Boolean bn1 = new Boolean("true");
Boolean bn2 = new Boolean("false");
Boolean bn3 = new Boolean("aa");
}
}
知识点:字符串转换为包装类、包装类转换为基本数据类型、字符串转换为基本数据类型
2、分析如下程序,并写出结果。
public class WrapperEquals{
public static void main(String[] args) {
Integer x=new Integer(10);
Integer y=new Integer(10);
System.out.println(x==y);
System.out.println(x.equals(y));
}
}
输出结果为:false true
知识点:基本数据类型转换为包装类、自动装箱和自动拆箱
3、分析如下程序,并写出结果。
publicclass WrapperToString{
publicstaticvoid main(String[] args){
Integer x=new Integer(100);
System.out.println(x);
System.out.println(x.toString());
}
}
结果为:100(基本数据类型) 100(字符串类型)
知识点:自动装箱和自动拆箱
4、分析如下程序是如何自动拆箱和装箱的。
publicclass BoxingDemo{
publicstaticvoid main(String[] args) {
Integer x=10;//自动装箱
Integer y=20;
int z=x+y;//自动拆箱
System.out.println(z);
}
}
知识点:自动装箱和自动拆箱
Ⅱ.编程题
1、编写一个程序,实现从命令行参数输入一字符串,统计该字符串中字符“e”出现的次数。
知识点:String中常用的方法
2、解析一个邮箱地址是否合法,如果合法则打印出用户名部分和该邮箱所属的网站域名
如果邮箱地址不合法则显示不合法的原因
提示:邮箱地址不合法的因素:
1) 邮箱地址中不包含@或。
2) 邮箱地址中含有多了@或。
3) 邮箱地址中。出现在@的前面
4) 用户名里有其他字符
实现步骤:
(1) 创建一个类,类名:mailtest
类图如下:
(类名和方法名必须与要求一样。区分大小写)
知识点:String中常用的方法
3、生成十个0~100之间的随机数,放到数组中,然后排序输出。
知识点:Math类取整,获得随机数等
4、分别在控制台输入字符串和子字符串,并计算字符串中子字符串出现的次数。
知识点:String中常用的方法
5、有一个字符串,其中包含中文字符、英文字符和数字字符,请统计和打印出各个字符的个数。
知识点:String中常用的方法
Ⅲ.选做题
1.编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串, 但要保证汉字不被截取半个,如“我ABC”,4,应该截取“我AB”,
输入“我ABC汉DEF”,6,应该输出“我ABC”,而不是“我ABC+汉的半个”。
知识点:String中常用的方法
2.金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)->(一千零一拾一元整)输出。
知识点:String中常用的方法
3.有一种数叫回文数,正读和反读都一样,如12321便是一个回文数。编写一个程序,从命令行得到一个整数,判断该数是不是回文数。
知识点:String中常用的方法
答案:
Ⅰ.程序分析题
1、分析如下程序,指出哪些语句会出现错误:
publicclass WrapperDemo {
publicstaticvoid main(String[] args) {
String a1="3";
String a2="abc";
String a3="10L";
String a4="012";
Integer x1=new Integer(a1);
Integer x2=new Integer(a2); 错
Integer x3=new Integer(a3); 错
Integer x4=new Integer(a4);
Long x5=new Long(a3); 错
String b1="3.14D";
String b2="3.14F";
String b3="3.14E2D";
String b4="3.14E2F";
String b5="abc";
Float y1=new Float(b1);
Float y2=new Float(b2);
Float y3=new Float(b3);
Float y4=new Float(b4);
Float y5=new Float(b5); 错
Double z1=new Double(b1);
Double z2=new Double(b2);
Double z3=new Double(b3);
Double z4=new Double(b4);
Double z5=new Double(b5); 错
Boolean bn1 = new Boolean("true");
Boolean bn2 = new Boolean("false");
Boolean bn3 = new Boolean("aa"); 错
}
}
2、分析如下程序,并写出结果。
public class WrapperEquals{
public static void main(String[] args) {
Integer x=new Integer(10);
Integer y=new Integer(10);
System.out.println(x==y);
System.out.println(x.equals(y));
}
}
False
true
3、分析如下程序,并写出结果。
publicclass WrapperToString{
publicstaticvoid main(String[] args){
Integer x=new Integer(100);
System.out.println(x);
System.out.println(x.toString());
}
}
100
100
4、分析如下程序是如何自动拆箱和装箱的。
publicclass BoxingDemo{
publicstaticvoid main(String[] args) {
Integer x=10; 装箱
Integer y=20; 装箱
int z=x+y; 拆箱
System.out.println(z);
}
}
Ⅱ.编程题
1、编写一个程序,实现从命令行参数输入一字符串,统计该字符串中字符“e”出现的次数。
publicclass Test {
/**
*@paramargs
*/
publicstaticvoid main(String[] args) {
Scanner in = new Scanner(System.in);
String s = in.next();
int num = 0;
for(int i =0;i < s.length();i++){
if(s.charAt(i)=='e'){
num++;
}
}
System.out.println(num);
}
}
2、解析一个邮箱地址是否合法,如果合法则打印出用户名部分和该邮箱所属的网站域名
如果邮箱地址不合法则显示不合法的原因
提示:邮箱地址不合法的因素:
1) 邮箱地址中不包含@或。
2) 邮箱地址中含有多了@或。
3) 邮箱地址中。出现在@的前面
4) 用户名里有其他字符
实现步骤:
(1) 创建一个类,类名:mailtest
类图如下:
(类名和方法名必须与要求一样。区分大小写)
publicclass Mailtest {
publicstaticboolean testMail(){
Scanner in = new Scanner(System.in);
String s = in.next();
if(s.indexOf("@")==-1||s.indexOf(".")==-1){
System.out.println("邮箱地址中不包含@或.");
returnfalse;
}
if(s.indexOf("@")!=s.lastIndexOf("@")||s.indexOf(".")!=s.lastIndexOf(".")){
System.out.println("邮箱地址中含有多了@或.");
return false;
}
if(s.indexOf("@")>s.lastIndexOf(".")){
System.out.println("邮箱地址中.出现在@的前面");
returnfalse;
}
for(int i=0;i<s.indexOf("@");i++){
if( (s.charAt(i)>='a'&&s.charAt(i)<='z')||(s.charAt(i)>='A'&&s.charAt(i)<='Z') ){
}else{
System.out.println("用户名里有其他字符");
returnfalse;
}
}
returntrue;
}
}
publicclass Test {
/**
*@paramargs
*/
publicstaticvoid main(String[] args) {
// TODO Auto-generated method stub
if(Mailtest.testMail()){
System.out.println("邮箱格式合法");
}else{
System.out.println("邮箱格式不合法");
}
}
}
3、生成十个0~100之间的随机数,放到数组中,然后排序输出。
publicclass Test {
publicstaticvoid num(){
int[] a = newint[8];
for(int i = 0;i<a.length;i++){
a[i] = (int)(Math.random()*101);
}
Arrays.sort(a);
for(int i = 0;i<a.length;i++){
System.out.println(a[i]);
}
}
publicstaticvoid main(String[] args) {
num();
}
}
4、分别在控制台输入字符串和子字符串,并计算字符串中子字符串出现的次数。
publicclass Test {
/**
*@paramargs
*/
publicstaticvoid main(String[] args) {
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in);
String s = in.next();
String a = in.next();
int num = 0;//i是循環的次數
for(int i = 0;i<s.length()-a.length();i=s.indexOf(a, i)+1){
if(s.indexOf(a, i)!=-1){
num++;
}
}
System.out.println(num);
}
}
5、有一个字符串,其中包含中文字符、英文字符和数字字符,请统计和打印出各个字符的个数。
publicclass Test {
/**
*@paramargs
*/
publicstaticvoid main(String[] args) {
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in);
String s = in.next();
int num=0,eng=0,china=0;
for(int i =0;i<s.length();i++){
if(s.charAt(i)>='0'&&s.charAt(i)<='9'){
num++;
}elseif((s.charAt(i)>='a'&&s.charAt(i)<='z')||(s.charAt(i)>='A'&&s.charAt(i)<='Z')){
eng++;
}elseif((19968 <= s.charAt(i) && s.charAt(i) <40623)) {
china++;
}
}
System.out.println("数字是:"+num);
System.out.println("英文是:"+eng);
System.out.println("中文是:"+china);
}
}
Ⅲ.选做题
1.编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串, 但要保证汉字不被截取半个,如“我ABC”,4,应该截取“我AB”,
输入“我ABC汉DEF”,6,应该输出“我ABC”,而不是“我ABC+汉的半个”。
publicstaticboolean isLetter(char c){
int k=0X80;
return c/k==0?true:false;
}
publicstaticint lengths(String strSrc){
if (strSrc==null){
return 0;
}
int len=0;
char[] strChar=strSrc.toCharArray();
for (int i=0;i<strChar.length;i++){
len++;
if (!isLetter(strChar[i])) len++;
}
return len;
}
publicstatic String subString(String origin,int len){
if (origin==null || origin.equals("")|| len<1){
return"";
}
if (len>lengths(origin)){
return origin;
}
byte[] strByte=newbyte[len];
System.arraycopy(origin.getBytes(),0,strByte,0,len);
int count=0;
for (int i=0;i<len;i++){
int value=(int)strByte[i];
if (value<0) count++;
}
if (count % 2 !=0){
len=(len==1)?++len:--len;
}
returnnew String(strByte,0,len);
}
publicstaticvoid main(String[] args) {
System.out.println(""+ subString("我ABC汉DEF",6));
}
另一种
publicclass Stringss {
publicstaticvoid main(String[] args) throws Exception{
String a = "我ABC汉DEF" ;
int len = 6 ;
String encoding = "UTF-8" ;
System.out.println( getSubString(a, len,encoding) );
a = "我ABC";
len = 4 ;
encoding = "gbk" ;
System.out.println( getSubString(a, len,encoding) );
}
/**
*
*@paramstr传入字符串
*@paramlen截取字节数
*@paramencoding编码方式
*@return返回截取后的字符串
*@throwsException
*/
publicstatic String getSubString(String str,int len,String encoding) throws Exception{
if(str == null || str.length()<1) returnnull ;
if(len<1) returnnull ;
StringBuffer sb = new StringBuffer();
int all = 0 ;
for(int i=0;i<str.length();i++){
String tmp = str.substring(i,i+1);
sb.append(tmp);
byte[] tmpB = tmp.getBytes(encoding);
all +=tmpB.length ;
if(all>=len){
break ;
}
}
return sb.toString() ;
}
}
2.金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)->(一千零一拾一元整)输出。
publicclass Test {
/**
*@paramargs
*/
publicstaticvoid main(String[] args) {
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in);
int a = in.nextInt();
String s ="",n="";
int wei =1;
boolean ling = false;//判断是否是零
boolean da0=true;//判断是否打出字(连零)
boolean da = true;//判断是否打出字
boolean z = true;
while(a>0){
//判断是否是10000
if(a/10>0){
if(a%10!=0){
z = false;
}
}
n="";
da0=true;
da = true;
if(a%10==0){
da = false;
if(ling){
da0=false;
}
ling=true;
}else{
ling=false;
}
if(da0){
n=foo1(a%10);
}
if(da){
n+=foo2(wei);
}
s = n+s;
a=a/10;
wei++;
}
if(z){
s=s.substring(0, s.length()-1);
}
System.out.println("¥"+s);
}
publicstatic String foo1(int i){
String s = null;
switch(i){
case 0:s="零";
break;
case 1:s="一";
break;
case 2:s="二";
break;
case 3:s="三";
break;
case 4:s="四";
break;
case 5:s="五";
break;
case 6:s="六";
break;
case 7:s="七";
break;
case 8:s="八";
break;
case 9:s="九";
break;
}
return s;
}
publicstatic String foo2(int i){
String s ="";
switch(i){
case 1:
break;
case 2:s="十";
break;
case 3:s="百";
break;
case 4:s="千";
break;
case 5:s="万";
break;
case 6:s="十万";
break;
case 7:s="百万";
break;
case 8:s="千万";
break;
case 9:s="亿";
break;
}
return s;
}
}
3.有一种数叫回文数,正读和反读都一样,如12321便是一个回文数。编写一个程序,从命令行得到一个整数,判断该数是不是回文数。
publicclass Test {
/**
*@paramargs
*/
publicstaticvoid main(String[] args) {
// TODO Auto-generated method stub
if(foo()){
System.out.println("是回数");
}else{
System.out.println("不是回数");
}
}
publicstaticboolean foo(){
Scanner in = new Scanner(System.in);
String s = in.next();
int j = s.length()-1;
for(int i=0;i<s.length()/2;i++){
if(s.charAt(i)!=s.charAt(j)){
returnfalse;
}
j--;
}
returntrue;
}
}