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<zheng){
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<value.length();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();
}
}