实验二 字符串

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();

}

}


hello
world
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342

推荐阅读更多精彩内容

  • 【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一...
    阿里高级软件架构师阅读 3,277评论 0 19
  • 【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔...
    开心的锣鼓阅读 3,305评论 0 9
  • 本章论述的主题是学习者差异与学习需要。通过本章学习可以帮我们厘清以下问题: (一)现有智力层次理...
    草原大哥阅读 514评论 0 2
  • 连续294 【赛51:6】你们要向天举目,观看下地,因为天必像烟云消散,地必如衣服渐渐旧了,其上的居民也要如此死亡...
    报佳音阅读 207评论 0 0
  • 亲爱的朋友,你是我的镜子。我要在你的眼里,成就更好的自己! 一、 我有个小姐妹,7月初去看了权志龙的演唱会。演唱会...
    萱源mama阅读 421评论 1 5