1、目的要求:
(1.掌握Java字符串的概念和使用。
(2.能够使用字符串的查找、替换、索引等功能。
(3.学会使用字符串的拆分方法。
(4.掌握字符串比较的方法。
(5.培养使用Java字符串解决实际问题的能力。
2、实验内容:
(1.创建一个类(DoubleConverter),该类的作用是将一个字符串的值转换成浮点型(double)数值。
要求:设计一个测试类来测试DoubleConverter。当测试类开始运行时,要求用户从键盘输入一个字符串,然后调用DoubleConverter的方法将字符串转换成为一个浮点型的数值。当用户输入的字符串不是浮点数时,该方法应该提示错误,并退出程序;否则返回该数值。
提示:把这两个类放在包内。不能使用Java内置的Integer类和Scanner类,而必须使用String类的charAt等方法提取每一个数字。
package lianxi1;
public class DoubleConverter {
private double result;
public boolean convert(String value){
result =0;
boolean is = true;
int zheng = 1;//整数位数
int xsd = 0;//小数点的位数
char[] cha = value.toCharArray();//字符串转换成字符数组
int[] in = new int[cha.length];
for(int i=0;i < cha.length;i++)
{
if(cha[i]>='0'&&cha[i]<='9')
{
in[i]=cha[i]-'0';
}
else if(cha[i]=='.'&&xsd==0){//只能有一个小数点所以必须xsd==0
in[i]=-1;
zheng = i;
xsd++;
}
else{
is = false;
break;
}
}
if(xsd == 0 || is == false)//xsd==0表示没有小数点
{
return false;
}
for(int i = 0 ; i< in.length ; i++){
if(i==zheng){
continue;
}
else if(i result += in[i]*Math.pow(10,zheng-i-1); } else if(i>zheng) result += in[i]*Math.pow(10,zheng-i); else{ } } return is; } public double getresult(){ return result;//返回结果的 } } /********另一个.java**********/ package lianxi1; import java.util.Scanner; public class DoubleConverterTest { public static void main(String []args) { Scannerinput = new Scanner(System.in); System.out.println("请输入一个double:"); while(true){ Stringstr = input.nextLine(); DoubleConverterdc = new DoubleConverter(); if(dc.convert(str)){ System.out.println("您输入的double 是 :" + dc.getresult()); } else{ System.out.println("您输入的不是double!"); System.exit(0); input.close(); } } } } (2.编写一个Java程序,将用户输入的句子当中每一个单词的第一个字母大写,而单词中的其余字母小写。 要求:程序运行后要求用户输入一个句子。然后提取每一个单词,并将单词的首字母转换成大写,其余字符小写。使用StringBuffer类来创建替换过大小写的新字符串。最后输出新字符串。 提示:需要使用Scanner的nextLine()方法来获取一个句子。注意:单词的分割符除了空格之外,还可能有Tab或者(,;.等标点符号)。注意判断首字符是不是字母。单词中的其他字母可能为大写。 例如:当用户输入”Thisis a samPLe sentencE to demostrATE the TasK 2.” 程序应该输出:This IsA Sample Sentence To Demonstrate The Task 2. package shiyan23; import java.util.Scanner; public class FirstDaxie { public static void main(String []args){ Scannerinput = new Scanner(System.in); Stringstr = input.nextLine(); StringBuffersBuffer =Tofirstdaxie(str); System.out.println(sBuffer); input.close(); } public static StringBuffer Tofirstdaxie(String value){ StringBufferresult = new StringBuffer(); value = value.trim();//去掉前后多余空格 result.append(Character.toUpperCase(value.charAt(0)));//第一个大写字母 for(int i=1;i { if(Character.isLetter(value.charAt(i))&&!Character.isLetter(value.charAt(i-1))){//遇见i是字母i-1不是字母 result.append(Character.toUpperCase(value.charAt(i))); }else if(!Character.isLetter(value.charAt(i))){//不是字母 result.append(value.charAt(i)); }else{//是字母就转换成小写 result.append(Character.toLowerCase(value.charAt(i))); } } return result; } } (3.编写一个猜成语的小游戏。 要求:使用一个字符串数组来保存10个四字成语,例如: String [] idioms = {“凉拌黄瓜”, “红烧肘子”, …}; 使用一个字符数组来保存20个无关字符,例如: String [] chars = {‘吃’, ‘喝’, ‘胡’, …}; 每次游戏开始时,随机选择一个成语,然后提取其中的4个汉字,再从字符数组中随机选择另外6个汉字,组成一个10个汉字的数组(汉字顺序随机)。注意!如果成语中,有重复的汉字,则只算一个,那么要从字符数组中多选出汉字。然后提示用户成语中包含这10个汉字,让用户猜测成语,用户输入汉字的编号,程序反馈汉字在成语中的位置。用户只有6次猜错机会,当6次机会用完后,游戏结束(猜对不占用次数)。当用户完全猜测出成语后,程序输出用户猜错的次数。 提示:使用java.util.Random类产生随机数。使用方法如下(具体方法请参见Java API文档): Random random = new Random(1000); //参数表示随机数种子 int index = random.nextInt(10); //产生[0,10)之间的随机整数 游戏过程如下: 第一次: 四字成语中包含的汉字如下: 1.王; 2.中; 3.力; 4.习; 5.努; 6.可; 7.时; 8.学; 9.我; 10.成; [○○○○] 剩余猜测次数为6次,请输入你的猜测:1 对不起,“王”字不在成语中,剩余猜测次数为5次,请再次输入你的猜测:2 对不起,“中”字不在成语中,剩余猜测次数为4次,请再次输入你的猜测:8 [○○学○] 恭喜你,“学”字在成语中的位置是:3 剩余猜测次数为4次,请再次输入你的猜测:9 对不起,“我”字不在成语中,剩余猜测次数为3次,请再次输入你的猜测:9 对不起,“我”字你已经猜过了,剩余猜测次数为2次,请再次输入你的猜测:5 [努○学○] 恭喜你,“努”字在成语中的位置是:1 剩余猜测次数为2次,请再次输入你的猜测:6 对不起,“可”字不在成语中,剩余猜测次数为1次,请再次输入你的猜测:10 对不起,“成”字不在成语中,并且你已经Game Over了! 第二次(假设还是同样的成语): 四字成语中包含的汉字如下: 1.王; 2.中; 3.力; 4.习; 5.努; 6.可; 7.时; 8.学; 9.我; 10.成; [○○○○] 剩余猜测次数为6次,请输入你的猜测:1 对不起,“王”字不在成语中,剩余猜测次数为5次,请再次输入你的猜测:8 [○○学○] 恭喜你,“学”字在成语中的位置是:3 剩余猜测次数为5次,请再次输入你的猜测:9 对不起,“我”字不在成语中,剩余猜测次数为4次,请再次输入你的猜测:5 [努○学○] 恭喜你,“努”字在成语中的位置是:1 剩余猜测次数为4次,请再次输入你的猜测:3 [努力学○] 恭喜你,“力”字在成语中的位置是:2 剩余猜测次数为4次,请再次输入你的猜测:4 [努力学习] 恭喜你,“习”字在成语中的位置是:4 太棒了!你一共猜错了2次,已经猜出了整个成语! package shiyan23; import java.util.Random; import java.util.Scanner; public class caichengyu { public static voidmain(String []args){ Scanner input =new Scanner(System.in); String []idioms ={"聪明睿知","滚瓜溜油" , "闻鸡起舞" , "铁杵磨针" , "盲人摸象" , "守株待兔" , "滥竽充数" , "邯郸学步" , "井底之蛙" , "叶公好龙"}; Character []chars= {'王','中','离','下','怒','就','散','是','位','为'}; Character index[]= {'a','a','a','a','a','a','a','a','a','a'}; Character daan[]= {'[','O','O','O','O',']'}; Random random =new Random(); int a =random.nextInt(10);//产生0-10(不含10)的随机数 String s =idioms[a]; int t = 0; while(t<4){ int j =random.nextInt(10); if(index[j]=='a'){ index[j]=s.charAt(t); t++; } else{ } } t=0; while(t<6){ int j =random.nextInt(10); int k =random.nextInt(10); if(index[j]=='a'&&chars[k]!='a'){ index[j]=chars[k]; chars[k]='a'; t++; }else{ } } System.out.println("四字成语中包含的汉字如下:"); t=0; while(t<10){ t++; System.out.print(t+ "." + index[t-1] + " "); } System.out.println(""); for(inti=0;i<6;i++){ System.out.print(daan[i]); } System.out.println(""); int sum=6; int ant=0; int cuo=0; int choice; int []visit ={0,0,0,0,0,0,0,0,0,0,0}; System.out.print("剩余猜测次数为"+sum+"次,请输入你的猜测:"); while(sum>0){ sum--; choice =input.nextInt(); Charactertemp = index[choice-1]; if(visit[choice-1]==1){ cuo++; if(cuo==6){ System.out.println("对不起,'"+temp+"'字不在成语中,并且你已经Game Over了!"); }else{ System.out.println("对不起,'"+temp+"'字你已经猜过了,剩余猜测次数为"+sum+"次,请再次输入你的猜测:"); } continue; } visit[choice-1]=1; intflag=0; for(inti=0;i<4;i++){ if(temp== s.charAt(i)){ ant++; sum++; daan[i+1]=temp; for(intj=0;j<6;j++){ System.out.print(daan[j]); } System.out.println(""); System.out.println("恭喜你,'"+temp+"'字在成语中的位置是:"+(i+1)); if(ant==4){ System.out.println("太棒了!你一共猜错了"+cuo+"次,已经猜出了整个成语!"); input.close(); return; } System.out.println("剩余猜测次数为"+sum+"次,请再次输入你的猜测:"); flag=1; break; } } if(flag==0){ cuo++; if(cuo==6){ System.out.println("对不起,'"+temp+"'字不在成语中,并且你已经Game Over了!"); }else{ System.out.println("对不起,'"+temp+"'字不在成语中,剩余猜测次数为"+sum+"次,请再次输入你的猜测:"); } } } input.close(); } }