-
猜数字游戏 需求分析
(1)产生随机数 random
(2)简单的提示:进入游戏,系统产生一个随机数 9
for(3次固定循环){
欢迎进入游戏,请输入猜测的数字
8
小了,您还有2次猜测机会,请输入猜测数字
10
大了,您还有1次猜测机会,请输入猜测数字
9
}
//3次固定循环以后提示猜测的结果,结果方式是多少种
//提示猜测结果:猜测正确或者说已经3次了,猜测失败
//无论猜测是否ok,都会提示 是否再玩一次
//如果可以那么继续从头继续产生新的随机数。。。
否则提示 game over -
代码
System.out.println("进入游戏"); Random r = new Random(); int a=0,input=0; Scanner scanner =new Scanner(System.in); while(true){ a=r.nextInt(10);//系统产生的随机数据 System.out.println("猜测的数字是:"+a); int i=0;//定义猜测的次数 for(;i<3;i++){ System.out.println("请输入猜测的数字:"); input=scanner.nextInt();//用户输入的数据 if(input==a){ System.out.println("恭喜您猜测正确!"); break; }else if(input<a){ System.out.println("偏小,您还剩"+(2-i)+"次机会"); }else if(input>a){ System.out.println("偏大,您还剩"+(2-i)+"次机会"); } } if(i==3){ System.out.println("没机会了猜测失败!"); } System.out.println("是否再来一次? 0/1"); int again = scanner.nextInt(); if(again==1){ break; } } scanner.close();
String字符串
- 最重要的就是常用的实用方法,indexOf,substring…
- String为面向对象的开发(面向对象核心:方法,new,参数,返回值)
- String s1 = “Hello world!”;
s1 = “Hello789world”;
(1)不是替换,和基本类型的替换有区别,String是引用类型,创建的是一个操作对象,所以显示的结果还是替换后的结果,但是过程是声明一个新的对象
(2)int a=12;
a=54;
为替换value - String是一个类对象,int是一个基本类型,这是二者的本质区别
int无法调用任何内容,而String的对象能调用出String类能够调用的所有方法 - 字符串和字符两个完全不同概念,但是二者还是相通的
- 字符是字节码编译产物,多个字符的罗列和编译形成字符串
- 字符串是用双引号括起的字符序列er字符是用单引号括起来的一个字符
char s=‘s’;
String s1=’’; // 语法错误 必须是双引号String s1=""; - int a=12;
创建一个int基本类型的变量a初始值是12
String b="";
创建一个String类的对象为b,初始值是""
String常用重要的方法
- 字符串的index从0开始
- equals() 在引用类型中比较的是值,不是address,区分大小写
equalsIgnoreCase() 区分大小写 - length() 返回长度,不等于index 的最大值,最大index是length()-1
- indexOf(String str) 根据String返回对应的index两个重载方法:
(1)s1.indexOf(“wor”) 返回的是参数String中第一个char所在的index值,参数可以是String也可以是一个单个char那么如果参数的String不存在,返回-1,不会抛异常,默认是从左向右计算
s1.indexOf(“o”,6):从index6的位置计算,参数String的index值 (2)s1.lastIndexOf(“o”),从右向左计算,和indexOf正相反 - 替换:replace(String oldChar,String newChar)
replaceFirst(String oldChar,String newChar)
(1)replace和replaceAll都是替换全部的概念,二者任选其一
replaceFirst替换第一个String
(2)String执行replace替换操作显示替换后的结果,但是继续打印原始String,还是没替换之前的效果,该隐藏的对象没有覆盖之前的String对象s1,所以后续执行s1的结果还是替换之前的。如果真正替换后显示:s1=s1.replace(“o”,“是”); 两个String对象赋值的过程了 - s1.substring(int beginIndex)
s1.substring(int beginIndex, int endIndex)
根据index 截取String
(1)substring(int beginIndex) 从参数index截取到末尾
(2)substring(int beginIndex, int endIndex)根据参数两个值,截取中间的部分
涉及到上标下标概念,上标与index一样,下标是从1开始的判断,下标取值一定注意
index上标: 0 1 2 3…
s1 = " H e l l o789world";
下标 : 1 2 3 456…
System.out.println(“从上标1–下标4截取”+s1.substring(1,4));//值为:ell
System.out.println(“从上标1–下标1截取”+s1.substring(1,1));/值为:e
System.out.println(“参数index到结束截取”+s1.substring(1));/值为: - trim() :去掉末尾空格
获取前端页面提交参数和数据库获取参数需要,因为数据库页面获取的值带末尾空格的 - String.valueOf(234.43)基本类型都可以转换为String,但是String类型未必能转换为基本类型
- toString()也是基本类型转换为String的常用方法
一般常用方法
- charAt(int index)根据index返回对应char,只能返回char,不能返回String。
- endsWith(“y”),判断结束的String 返回boolean
- startsWith(“s”) 判断开始的String 返回Boolean
- s1.isEmpty() 判断是否为空
s1="" false s1=" " true
String中特殊的值:
(1) String s1=null;create一个空的String对象
(2) String s1=""; 字符串值的长度是0,不能视为空
(3) String s1=" ";空格视为一个字符 ,不能视为空。(4)toLowCase();toUpperCase()转换大小写 - spite
String s3=“re-,-yu-545-&*”;
//根据"-“截取一个数组对象。
String[] s4=s3.split(”-");
// 遍历数组
for (String string : s4) {
System.out.println(string);
}
用处和DB相关,数据库有些字段是8-9-12-45类型的
StringBuffer StringBuilder
- 二者最常用的方法append,作用是追加字符串的过程中不会创建新的对象
始终是一个对象,但是耗费的内存资源较大,所以如果不是类似String的追加累加,二者还是有些不适合的
案例
-
遍历一个String的全部char都是哪些,考验的还是charAt,substring
如果需求变化是两个两个的输出遍历,charAt就不能用了String s=" helloworld!!!";//定义一个字符串 for(int i=0;i<s.length();i++){ //利用for循环来进行遍历 char c=s.charAt(i);// System.out.print(c+" "); } //两个两个的输出遍历 for(int i=0;i<s.length();i++){ if((i+2)>s.length()){ break;//超出边界 } System.out.print(s.substring(i,i+2));//重复的两个两个输出,不重复的话不能是i++,而是i+=2 }
-
控制台输入要查询的String,显示对应的位置第几个,不是index
String s=" helloworld!!!"; Scanner scanner=new Scanner(System.in); String input=scanner.next(); if(s.indexOf(input)==-1){ System.out.println("没有检索到输入的String"); }else { System.out.println(""+(s.indexOf(input)+1)); } scanner.close();
-
输入一个要被替换的String和输入一个替换的String显示替换后的结果
String s=" helloworld!!!"; Scanner scanner=new Scanner(System.in);//控制台输入 System.out.println("输入被替换的字符串:"); String input=scanner.next(); if(s.indexOf(input)==-1){ System.out.println("没有检索到输入的String"); }else { System.out.println("请输入要替换的字符"); String newChar=scanner.next(); System.out.println("替换结果为"+s.replace(input, newChar)); } scanner.close();
-
已有的一个String:中k华人民y共和y国abcdf合同y法
(1)输入一个合法的被替换的String,如果输入不合法,提示用户重新输入。
(2)执行结束第1步操作的时候,证明控制台输入了合法的String.为了验证用户输入位置判 断是否合法,需要记录下已存在的被替换的String的个数,以及相应的index位置.
(3)因为string的个数和被替换的string的位置都是位置,而且二者需要呼应的所以需要[]
(4)执行用户输入替换的位置,数字,验证的依据上一步记录的[]执行替换,思路2个,无论哪个思路,[]的index值是必须参考
replace方法:
a.判断输入的位置,如果输入的位置是1直接用replaceFirst
b.如果不是1不能用replace,因为替换全部了,根据[]对应位置的index值截取然后执行 replaceFirst或者replace
截取拼接String:直接替换的String去掉了。(5)代码
String ab="中k华人民y共和y国abcdf合同y法";
Scanner s=new Scanner(System.in);
ab="中k华人民y1共和y1国abcdf合同y1法";
System.out.println(ab);
String input=null;
do {
System.out.println("输入被替换的String:");
input=s.next();
if(ab.indexOf(input)==-1) {
System.out.println("没有搜索到被替换的String");
System.out.print("请重新");
}else {
break;
}
} while (true);
StringBuffer su=new StringBuffer();
//循环判断,ab中存在几个input String,并且对应的index位置是哪个
for (int i = 0; i < ab.length(); i++) {
if((i+input.length())>ab.length()) {
break;//超出边界了
}
//重复的两个两个输出
//System.out.println(ab.substring(i, i+2));
if(ab.substring(i, i+input.length()).equals(input)) {
//System.out.println(i);//相当于匹配String的当前index
su.append(i+"-");
}
//数组对应的是
//0 1 2
//5 9 19 涉及到包装类
}
// System.out.println(su);//"5-9-19-" 替换的位置是4
String[] indexs=su.toString().split("-");
//输入替换的位置
int inputIndex=0;
do {
System.out.println(input+"存在的个数是"+indexs.length+",输入替换的位置:");
inputIndex=s.nextInt();
// 超出数组长度,
if(inputIndex<1 || inputIndex > indexs.length) {
System.out.println("输入的位置超出替换的个数,");
System.out.print("请重新");
}else {
break;
}
} while (true);
System.out.println("请输入要替换的String");
String str=s.next();
//根据第一种方式,应用replace方法操作
//首先判断替换的位置是否是1
if(inputIndex==1) {
System.out.println(ab.replaceFirst(input, str));
}else {
//如果不是1,那么首先截取对应位置的后面的String,和前面的
//int indexwei=indexs[inputIndex-1];得出的是对应index String的值
//借助包装类
int indexwei=Integer.valueOf(indexs[inputIndex-1]);
//截取前后String
String qian=ab.substring(0, indexwei);
String hou=ab.substring(indexwei, ab.length());
System.out.println(qian+hou.replaceFirst(input, str));
//System.out.println(hou);
}
```# String
1. 猜数字游戏 需求分析
(1)产生随机数 random
(2)简单的提示:进入游戏,系统产生一个随机数 9
for(3次固定循环){
欢迎进入游戏,请输入猜测的数字
8
小了,您还有2次猜测机会,请输入猜测数字
10
大了,您还有1次猜测机会,请输入猜测数字
9
}
//3次固定循环以后提示猜测的结果,结果方式是多少种
//提示猜测结果:猜测正确或者说已经3次了,猜测失败
//无论猜测是否ok,都会提示 是否再玩一次
//如果可以那么继续从头继续产生新的随机数。。。
否则提示 game over
2. 代码
```java
System.out.println("进入游戏");
Random r = new Random();
int a=0,input=0;
Scanner scanner =new Scanner(System.in);
while(true){
a=r.nextInt(10);//系统产生的随机数据
System.out.println("猜测的数字是:"+a);
int i=0;//定义猜测的次数
for(;i<3;i++){
System.out.println("请输入猜测的数字:");
input=scanner.nextInt();//用户输入的数据
if(input==a){
System.out.println("恭喜您猜测正确!");
break;
}else if(input<a){
System.out.println("偏小,您还剩"+(2-i)+"次机会");
}else if(input>a){
System.out.println("偏大,您还剩"+(2-i)+"次机会");
}
}
if(i==3){
System.out.println("没机会了猜测失败!");
}
System.out.println("是否再来一次? 0/1");
int again = scanner.nextInt();
if(again==1){
break;
}
}
scanner.close();