實(shí)驗(yàn)二 字符串

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

???????????????????? }

????????????? }

?????? }

}

運(yùn)行結(jié)果

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

????????????? }

}

運(yùn)行結(jié)果

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

}

}


hello
world
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容