1、目的要求:
(1.掌握J(rèn)ava字符串的概念和使用。
(2.能夠使用字符串的查找、替換、索引等功能。
(3.學(xué)會(huì)使用字符串的拆分方法。
(4.掌握字符串比較的方法。
(5.培養(yǎng)使用Java字符串解決實(shí)際問題的能力。
2、實(shí)驗(yàn)內(nèi)容:
(1.創(chuàng)建一個(gè)類(DoubleConverter),該類的作用是將一個(gè)字符串的值轉(zhuǎn)換成浮點(diǎn)型(double)數(shù)值。
要求:設(shè)計(jì)一個(gè)測試類來測試DoubleConverter。當(dāng)測試類開始運(yùn)行時(shí),要求用戶從鍵盤輸入一個(gè)字符串,然后調(diào)用DoubleConverter的方法將字符串轉(zhuǎn)換成為一個(gè)浮點(diǎn)型的數(shù)值。當(dāng)用戶輸入的字符串不是浮點(diǎn)數(shù)時(shí),該方法應(yīng)該提示錯(cuò)誤,并退出程序;否則返回該數(shù)值。
提示:把這兩個(gè)類放在包內(nèi)。不能使用Java內(nèi)置的Integer類和Scanner類,而必須使用String類的charAt等方法提取每一個(gè)數(shù)字。
package lianxi1;
public class DoubleConverter {
?????? private double result;
?????? public boolean convert(String value){
????????????? result =0;
????????????? boolean is = true;
????????????? int zheng = 1;//整數(shù)位數(shù)
????????????? int xsd = 0;//小數(shù)點(diǎn)的位數(shù)
?????? ?????? char[] cha = value.toCharArray();//字符串轉(zhuǎn)換成字符數(shù)組
????????????? 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){//只能有一個(gè)小數(shù)點(diǎn)所以必須xsd==0
??????????????????????????? in[i]=-1;
??????????????????????????? zheng = i;
??????????????????????????? xsd++;
???????????????????? }
???????????????????? else{
??????????????????????????? is = false;
??????????????????????????? break;
???????????????????? }
????????????? }
????????????? if(xsd == 0 || is == false)//xsd==0表示沒有小數(shù)點(diǎn)
????????????? {
???????????????????? 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;//返回結(jié)果的
?????? }
}
/********另一個(gè).java**********/
package lianxi1;
import java.util.Scanner;
public class DoubleConverterTest {
?????? public static void main(String []args) {
????????????? Scannerinput = new Scanner(System.in);
????????????? System.out.println("請輸入一個(gè)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.編寫一個(gè)Java程序,將用戶輸入的句子當(dāng)中每一個(gè)單詞的第一個(gè)字母大寫,而單詞中的其余字母小寫。
要求:程序運(yùn)行后要求用戶輸入一個(gè)句子。然后提取每一個(gè)單詞,并將單詞的首字母轉(zhuǎn)換成大寫,其余字符小寫。使用StringBuffer類來創(chuàng)建替換過大小寫的新字符串。最后輸出新字符串。
提示:需要使用Scanner的nextLine()方法來獲取一個(gè)句子。注意:單詞的分割符除了空格之外,還可能有Tab或者(,;.等標(biāo)點(diǎn)符號)。注意判斷首字符是不是字母。單詞中的其他字母可能為大寫。
例如:當(dāng)用戶輸入”Thisis a samPLe sentencE to demostrATE the TasK 2.”
程序應(yīng)該輸出: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)));//第一個(gè)大寫字母
???????????????????? 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{//是字母就轉(zhuǎn)換成小寫
????????????????????????????????????????? result.append(Character.toLowerCase(value.charAt(i)));
?????????????????????????????????? }???????????????????
???????????????????? }
???????????????????? return result;
????????????? }
}

(3.編寫一個(gè)猜成語的小游戲。
要求:使用一個(gè)字符串?dāng)?shù)組來保存10個(gè)四字成語,例如:
String [] idioms = {“涼拌黃瓜”, “紅燒肘子”, …};
使用一個(gè)字符數(shù)組來保存20個(gè)無關(guān)字符,例如:
String [] chars = {‘吃’, ‘喝’, ‘胡’, …};
每次游戲開始時(shí),隨機(jī)選擇一個(gè)成語,然后提取其中的4個(gè)漢字,再從字符數(shù)組中隨機(jī)選擇另外6個(gè)漢字,組成一個(gè)10個(gè)漢字的數(shù)組(漢字順序隨機(jī))。注意!如果成語中,有重復(fù)的漢字,則只算一個(gè),那么要從字符數(shù)組中多選出漢字。然后提示用戶成語中包含這10個(gè)漢字,讓用戶猜測成語,用戶輸入漢字的編號,程序反饋漢字在成語中的位置。用戶只有6次猜錯(cuò)機(jī)會(huì),當(dāng)6次機(jī)會(huì)用完后,游戲結(jié)束(猜對不占用次數(shù))。當(dāng)用戶完全猜測出成語后,程序輸出用戶猜錯(cuò)的次數(shù)。
提示:使用java.util.Random類產(chǎn)生隨機(jī)數(shù)。使用方法如下(具體方法請參見Java API文檔):
Random random = new Random(1000);? //參數(shù)表示隨機(jī)數(shù)種子
int index = random.nextInt(10);? //產(chǎn)生[0,10)之間的隨機(jī)整數(shù)
游戲過程如下:
第一次:
四字成語中包含的漢字如下:
1.王; 2.中; 3.力; 4.習(xí); 5.努; 6.可; 7.時(shí); 8.學(xué); 9.我; 10.成;
[○○○○]
剩余猜測次數(shù)為6次,請輸入你的猜測:1
對不起,“王”字不在成語中,剩余猜測次數(shù)為5次,請?jiān)俅屋斎肽愕牟聹y:2
對不起,“中”字不在成語中,剩余猜測次數(shù)為4次,請?jiān)俅屋斎肽愕牟聹y:8
[○○學(xué)○]
恭喜你,“學(xué)”字在成語中的位置是:3
剩余猜測次數(shù)為4次,請?jiān)俅屋斎肽愕牟聹y:9
對不起,“我”字不在成語中,剩余猜測次數(shù)為3次,請?jiān)俅屋斎肽愕牟聹y:9
對不起,“我”字你已經(jīng)猜過了,剩余猜測次數(shù)為2次,請?jiān)俅屋斎肽愕牟聹y:5
[努○學(xué)○]
恭喜你,“努”字在成語中的位置是:1
剩余猜測次數(shù)為2次,請?jiān)俅屋斎肽愕牟聹y:6
對不起,“可”字不在成語中,剩余猜測次數(shù)為1次,請?jiān)俅屋斎肽愕牟聹y:10
對不起,“成”字不在成語中,并且你已經(jīng)Game Over了!
第二次(假設(shè)還是同樣的成語):
四字成語中包含的漢字如下:
1.王; 2.中; 3.力; 4.習(xí); 5.努; 6.可; 7.時(shí); 8.學(xué); 9.我; 10.成;
[○○○○]
剩余猜測次數(shù)為6次,請輸入你的猜測:1
對不起,“王”字不在成語中,剩余猜測次數(shù)為5次,請?jiān)俅屋斎肽愕牟聹y:8
[○○學(xué)○]
恭喜你,“學(xué)”字在成語中的位置是:3
剩余猜測次數(shù)為5次,請?jiān)俅屋斎肽愕牟聹y:9
對不起,“我”字不在成語中,剩余猜測次數(shù)為4次,請?jiān)俅屋斎肽愕牟聹y:5
[努○學(xué)○]
恭喜你,“努”字在成語中的位置是:1
剩余猜測次數(shù)為4次,請?jiān)俅屋斎肽愕牟聹y:3
[努力學(xué)○]
恭喜你,“力”字在成語中的位置是:2
剩余猜測次數(shù)為4次,請?jiān)俅屋斎肽愕牟聹y:4
[努力學(xué)習(xí)]
恭喜你,“習(xí)”字在成語中的位置是:4
太棒了!你一共猜錯(cuò)了2次,已經(jīng)猜出了整個(gè)成語!
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 ={"聰明睿知","滾瓜溜油" , "聞雞起舞" , "鐵杵磨針" , "盲人摸象" , "守株待兔" , "濫竽充數(shù)" , "邯鄲學(xué)步" , "井底之蛙" , "葉公好龍"};
????????????? 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);//產(chǎn)生0-10(不含10)的隨機(jī)數(shù)
????????????? 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("剩余猜測次數(shù)為"+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+"'字不在成語中,并且你已經(jīng)Game Over了!");
??????????????????????????? }else{
??????????????????????????? System.out.println("對不起,'"+temp+"'字你已經(jīng)猜過了,剩余猜測次數(shù)為"+sum+"次,請?jiān)俅屋斎肽愕牟聹y:");
??????????????????????????? }
??????????????????????????? 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("太棒了!你一共猜錯(cuò)了"+cuo+"次,已經(jīng)猜出了整個(gè)成語!");
????????????????????????????????????????? input.close();
????????????????????????????????????????? return;
?????????????????????????????????? }
?????????????????????????????????? System.out.println("剩余猜測次數(shù)為"+sum+"次,請?jiān)俅屋斎肽愕牟聹y:");
?????????????????????????????????? flag=1;
?????????????????????????????????? break;
??????????????????????????? }
???????????????????? }
???????????????????? if(flag==0){
??????????????????????????? cuo++;
??????????????????????????? if(cuo==6){
?????????????????????????????????? System.out.println("對不起,'"+temp+"'字不在成語中,并且你已經(jīng)Game Over了!");
??????????????????????????? }else{
??????????????????????????? System.out.println("對不起,'"+temp+"'字不在成語中,剩余猜測次數(shù)為"+sum+"次,請?jiān)俅屋斎肽愕牟聹y:");
??????????????????????????? }
???????????????????? }
????????????? }
????????????? input.close();
}
}

