java官方文档链接:点这里
java.lang包
是java中最基础的核心包,里面包含着最基础的类,比如数学运算和字符串处理等。这个包默认情况下,系统将其自动导入,不需要我们用import再导入到程序中就可以直接使用这个类里面的函数。
java.lang.Math类:负责数学运算
随机数:游戏的精髓
1、数组中放置1-100的数字,随机打乱。
1-100按顺序,随机找两个打乱,打乱多次。
class MathTest{
public static void main(String[] args){
int[] arr = new int[100];
for(int i = 0;i <100;i++)
{
arr[i] = i+1;
}
for(int i = 0;i < 1000;i++)
{
int temp;
int L1 = (int)(Math.random()*100);
int L2 = (int)(Math.random()*100);
temp = arr[L1];
arr[L1] = arr[L2];
arr[L2] = temp;
}
}
}
2、公平的赌博游戏,久赌必输。
100元筹码,随机数,0-0.5之间,赢10元;0.5-1之间,输10元。赢满500走人,其中输光退场。
class MathTest{
public static void main(String[] args){
int M = 100;
while(true){
double d= Math.random();
if(d<0.5) M+=10;
else M-=10;
System.out.println("当前财产:"+M);
if(M==0){System.out.println("输光走人");break;}
if(M==500){System.out.println("赢钱走人");break;}
}
}
}
java.lang.String类:负责字符串处理
1、初始化字符串,有两种方式:
(1)直接赋值
String s1 = "China";
(2)创建字符串对象
String s2 = new String("China");
这两种方法创建的字符串是不同的。
注意:直接赋值,系统为了节省内存,用的是“池机制”。
如何判断两个字符串内容是否相等?显然不能用==
可以用equals函数
String s1 = "China";
String s2 = new String("China");
System.out.println(s1==s2);
//答案
false
System.out.println(s1.equals(s2));
//答案
true
2、charAt函数,找到字符串出现的第一个匹配字符
String s1 = "China";
System.out.println(s1.charAt(1));
//答案
h
2、contains函数,判断字符串中是否有这个匹配字符串
String s1 = "China_Hunan";
System.out.println(s1.contains("nan"));
//答案
true
3、indexOf找到匹配字符在字符串中第一次出现位置
String s1 = "China_Hunan";
System.out.println(s1.indexOf("nan"));
//答案
8
4、replace函数在不改变原来字符串的情况下替换字符串
String s1 = "China_Hunan";
System.out.println(s1.replace("nan","bei"));
System.out.println(s1.indexOf("nan"));//s1没变
//答案
China_Hubei
8
思考:word中经常用到字符串查找,替换操作
请列出java中对应的函数。
java.lang.StringBuffer类:负责字符串处理
StringBuffer是自变型字符串,操作之后,自己变化
s1如果是String,s1.replace(“nan”,“bei”);s1没变
String是非自变型字符串,在字符串频繁操作场合,大大消耗内存
1、append在原有字符串基础上增加字符
StringBuffer sb = new StringBuffer("china_hunan");
sb.append("_hubei");
System.out.println(sb);//sb变了
//答案
china_hunan_hubei
2、replace是用新的字符串替换掉原有字符
StringBuffer sb = new StringBuffer("china_hunan");
sb.append("_hubei");
System.out.println(sb);//sb变了
sb.replace(1,3,"haha");
System.out.println(sb);//sb变了
//答案
china_hunan_hubei
chahana_hunan_hubei
基本数据类型的包装类
int integer
float Float
double Double
…
重要作用:将字符串转成相应的数值
int i = Integer.parselnt("123");
float f = Float.parseFloat("3.14");
double d = Double.parseFloat("23.123");
如果将数值转成字符串呢?
统一用一个函数:
String.valueOf(各类数值);
java.util包
最重要的是:Java集合框架(变长数组)
List类:一维变长数组,元素有位置信息,可重复
ArrayList 底层用数组存储
LinkedList 底层用链表存储
Vector 实现了多线程的安全
用法完全相同。增删改查
import java.util
class StringTest{
public static void main(String[] args){
ArrayList<String> list = new ArrayList<String>();
list.add("北京");
list.add("上海");
list.add("杭州");
list.add("浙江");
list,add(2,"巴黎");
System.out.println(list.get(2));//查找第二个位置上的元素
list.remove(1);//把第一个位置上的元素去掉
list.set(2,"纽约");//把第二个位置上的元素改成纽约
list.indexOf("浙江");//查找元素的位置
//元素的遍历
for(String s:list){
System.out.println(s);
}
for(int i = 0;i < list.size();i++){
System.out.println(list(i));
}
}
}
Set类:一维变长数组,元素没有位置信息,不可重复
HashSet 元素乱序
LinkHashSet 元素保序
增删改查
import java.util
class StringTest{
public static void main(String[] args){
HashSet<String> list = new HashSet<String>();
list.add("北京");
list.add("上海");
list.add("杭州");
list.add("浙江");
list.remove("浙江");//把叫浙江的元素去掉
//元素的遍历
for(String s:list){
System.out.println(s);
}
}
}
Map类:二维变长数组
key | value |
---|---|
姓名 | 张三 |
性别 | 男 |
住址 | 长沙 |
籍贯 | 广东 |
… |
key不可重复,value可以重复
HashMap
LinkedHashMap
作业:输入一个长字符串,显示:里面每一个字符出现的次数
crhanihvwacri parklgrjmevmlijmlrjkvsldmkd
public static void main(String[] args) {
String str = "crhanihvwacri parklgrjmevmlijmlrjkvsldmkd";
char[] chars = str.toCharArray();
Map<Character, Integer> map = new HashMap();
for (char c : chars) {
if (map.containsKey(c)) {
map.put(c, map.get(c) + 1);
}else{
map.put(c,1);
}
}
for (Map.Entry<Character, Integer> entry : map.entrySet()) {
System.out.println("字符("+entry.getKey()+")出现的次数为:"+entry.getValue());
}
}