JavaSE基础补充
二维数组
二维静态数组
public class TwoDimensionDemo1 {
public static void main(String[] args) {
//1.二维数组静态初始化
int[][] arr1 = new int[][]{{1,2,3},{4,5,6,7,8}};
int[][] arr2 = {{1,2,3},{4,5,6,7,8}};
//以后建议这样定义,把每个一位数组单独写成一行
int[][] arr3 = {
{1,2,3},
{4,5,6,7,8}//无逗号
};
//2.获取元素
System.out.println(arr3[0]);//获取二维数组中的第一个数组的地址
//二维数组中的第一个一维数组索引0的元素
System.out.println(arr3[0][0]);
//System.out.println(arr3[0][3]);//.ArrayIndexOutOfBoundsException
//System.out.println(arr3[2][4]);//.ArrayIndexOutOfBoundsException
//二维数组遍历
for (int i = 0; i < arr3.length; i++) {
for (int j = 0; j < arr3[i].length; j++) {
System.out.print(arr3[i][j]+" ");
}
System.out.println();
}
}
}
二维动态数组
public class TwoDimensionDemo2 {
public static void main(String[] args) {
//1.利用动态初始化创建二维数组
int[][] arr = new int[3][5];
//给二维数组赋值一个元素
arr[0][0] = 10;
//遍历二维数组
//外循环:遍历二维数组获取里面的每一个一维数组
//内循环:遍历一维数组获取每一个元素
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j]+" ");
}
System.out.println();
}
}
}
练习
public class TwoDimensionDemo3 {
public static void main(String[] args) {
/**
* 某商城每个季度的营业额如下:单位(万元)
* 第一季度 22,66,44
* 第二季度 77,33,88
* 第三季度 25,45,65
* 第四季度 11,66,99
* 求计算出每个季度的总营业额和全年的总营业额
*/
//1.创建二维数组并存储数据
int[][] yearArrArr = {
{22, 64, 44},
{77, 33, 88},
{25, 45, 65},
{11, 66, 99}
};
//全年的营业额
int yearSum = 0;
//2.遍历二维数组,得到每一个一维数组并求和
for (int i = 0; i < yearArrArr.length; i++) {
int[] quarterArr = yearArrArr[i];
int sum = getSum(quarterArr);
System.out.println("第" + (i + 1) + "个季度的总营业额为:" + sum);
yearSum += sum;
}
System.out.println("全年的总营业额为:" + yearSum);
}
//定义一个方法,计算每一个季度的营业额
public static int getSum(int[] arr){
int sum = 0;
for (int i = 0; i < arr.length; i++) {
sum += arr[i];
}
return sum;
}
}
面向对象综合案例——文字版格斗游戏
占位符
public class Test {
public static void main(String[] args) {
//两部分参数
//第一部分参数:要输出的内容%s(占位)
//第二部分参数:要填充的数据
System.out.printf("你好啊%s","张三");
System.out.println();
System.out.printf("%s你好啊%s","张三","李四");
}
}
运行结果
角色类和方法
import java.util.Random;
public class Role {
private String name;
private int blood;
private char gender;
private String face;//长相是随机的
String[] boyfaces= {"风流俊雅","气宇轩昂","相貌英俊","五官端正","相貌平平","一塌糊涂","面目狰狞"};
String[] girlfaces ={"美奂绝伦","沉鱼落雁","婷婷玉立","身材娇好","相貌平平","相貌简陋","惨不忍睹"};
// attack 攻击描述:
String[] attacks_desc={
"%s使出了一招【背心钉】,转到对方的身后,一掌向%s背心的灵台穴拍去。",
"%s使出了一招【游空探爪】,飞起身形自半空中变掌为抓锁向%s。",
"%s大喝一声,身形下伏,一招【劈雷坠地】,捶向%s双腿。",
"%s运气于掌,一瞬间掌心变得血红,一式【掌心雷】,推向%s。",
"%s阴手翻起阳手跟进,一招【没遮拦】,结结实实的捶向%s。",
"%s上步抢身,招中套招,一招【劈挂连环】,连环攻向%s。"
};
// injured 受伤描述:
String[] injureds_desc={
"结果%s退了半步,毫发无损",
"结果给%s造成一处瘀伤",
"结果一击命中,%s痛得弯下腰",
"结果%s痛苦地闷哼了一声,显然受了点内伤",
"结果%s摇摇晃晃,一跤摔倒在地",
"结果%s脸色一下变得惨白,连退了好几步",
"结果『轰』的一声,%s口中鲜血狂喷而出",
"结果%s一声惨叫,像滩软泥般塌了下去"
};
public Role() {
}
public Role(String name, int blood,char gender) {
this.name = name;
this.blood = blood;
this.gender = gender;
//随机长相
setFace(gender);
}
public char getGender() {
return gender;
}
public void setGender(char gender) {
this.gender = gender;
}
public String getFace() {
return face;
}
public void setFace(char gender) {
//长相是随机的
Random r = new Random();
if(gender == '男'){
//从boyfaces里面随机长相
int index = r.nextInt(boyfaces.length);
this.face = boyfaces[index];
}else if(gender == '女'){
//从girlfaces里面随机长相
int index = r.nextInt(girlfaces.length);
this.face = girlfaces[index];
}else{
this.face = "相貌平平";
}
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getBlood() {
return blood;
}
public void setBlood(int blood) {
this.blood = blood;
}
//定义一个方法用于攻击别人
//Role r1 = new Role();
//Role r2 = new Role();
//r1.攻击(r2);
//方法的调用者去攻击参数
public void attack(Role role){
Random r = new Random();
int index = r.nextInt(attacks_desc.length);
String KungFu = attacks_desc[index];
//输出一个攻击的效果
System.out.printf(KungFu,this.getName(),role.getName());
System.out.println();
//计算造成的伤害
int hurt = r.nextInt(20)+1;
//修改一下挨揍的人的血量
int remainBlood = role.getBlood() - hurt;
//对剩余血量做一个验证,如果为负数了,就修改为0
remainBlood = remainBlood < 0 ? 0: remainBlood;
role.setBlood(remainBlood);
//受伤的描述
//血量
//> 90 0索引的描述
//80~90 1索引的描述
//70~80 2索引的描述
//60~70 3索引的描述
//40~60 4索引的描述
//20~40 5索引的描述
//10~20 6索引的描述
//<10 7索引的描述
if(remainBlood >90){
System.out.printf(injureds_desc[0],role.getName());
}else if(remainBlood > 80 && remainBlood <=90){
System.out.printf(injureds_desc[1],role.getName());
}else if(remainBlood > 70 && remainBlood <=80){
System.out.printf(injureds_desc[2],role.getName());
}else if(remainBlood > 60 && remainBlood <=70){
System.out.printf(injureds_desc[3],role.getName());
}else if(remainBlood > 40 && remainBlood <=60){
System.out.printf(injureds_desc[4],role.getName());
}else if(remainBlood > 20 && remainBlood <=40){
System.out.printf(injureds_desc[5],role.getName());
}else if(remainBlood > 10 && remainBlood <=20){
System.out.printf(injureds_desc[6],role.getName());
}else {
System.out.printf(injureds_desc[7],role.getName());
}
System.out.println();
}
public void showRoleInfo(){
System.out.println("姓名为:" + getName());
System.out.println("血量为:" + getBlood());
System.out.println("性别为:" + getGender());
System.out.println("长相为:" + getFace());
}
}
主函数
public class GemeTest {
public static void main(String[] args) {
//1.创建第一个角色
Role r1 = new Role("乔峰",100,'男');
//2.创建第二个角色
Role r2 = new Role("鸠摩智",100,'男');
//展示一下角色的信息
r1.showRoleInfo();
r2.showRoleInfo();
//3.开始格斗
while (true){
r1.attack(r2);
if(r2.getBlood() == 0){
System.out.println(r1.getName() + "K.O了" + r2.getName());
break;
}
r2.attack(r1);
if(r1.getBlood() == 0){
System.out.println(r2.getName() + "K.O了" + r1.getName());
break;
}
}
}
}
运行结果:
StringBuilder
概述、构造方法、基本方法
链式编程
public class StringBuilderDemo3 {
public static void main(String[] args) {
//链式编程
//当我们在调用一个方法时,不需要用变量接受他的结果,可以继续调用其他方法
int len = getString().substring(1).replace("A","Q").length();
System.out.println(len);
}
public static String getString(){
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个字符串:");
String str = sc.next();
return str;
}
}
字符串的反转
import java.util.Scanner;
//判断反转后的字符串是否与原字符串相同
public class StringBuilderDemo4 {
//使用StringBuilder的场景:
//1.字符串的拼接
//2.字符串的反转
public static void main(String[] args) {
//1.键盘录入一个字符串
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个字符串:");
String str = sc.next();
//2.反转键盘录入的字符串
// StringBuilder sb = new StringBuilder();
// sb.append(str);
// sb.reverse();
// System.out.println(sb);
String result = new StringBuilder().append(str).reverse().toString();
//3.比较
if(str.equals(result)){
System.out.println("当前字符串是对称字符串");
}else{
System.out.println("当前字符串不是对称字符串");
}
}
}
字符串的拼接
//字符串按固定格式拼接
public class StringBuilderDemo5 {
public static void main(String[] args) {
//1.定义数组
int[] arr = {1,2,3};
//2.调用方法把数组变成字符串
String str = arrToSring(arr);
System.out.println(str);
}
public static String arrToSring(int[] arr){
StringBuilder sb = new StringBuilder();
sb.append("[");
for (int i = 0; i < arr.length; i++) {
if(i == arr.length -1){
sb.append(arr[i]);
}else{
sb.append(arr[i]).append(",");
}
}
sb.append("]");
return sb.toString();
}
}
StringJoiner
练习
mport java.util.StringJoiner;
public class StringJoinerDemo1 {
public static void main(String[] args) {
//1.创建一个对象,并指定中间的间隔符号
StringJoiner sj = new StringJoiner("---");
//2.添加元素
sj.add("aaa").add("bbb").add("ccc");
//3.打印结果
System.out.println(sj);//aaa---bbb---ccc
}
}
import java.util.StringJoiner;
public class StringJoinerDemo2 {
public static void main(String[] args) {
//1.创建对象
StringJoiner sj = new StringJoiner(", ","[","]");
//2.添加元素
sj.add("aaa").add("bbb").add("ccc");
int len = sj.length();
System.out.println(len);
//3.打印
System.out.println(sj);
String str = sj.toString();
System.out.println(str);//[aaa,bbb,ccc]
}
}