251-270作业/面向对象中级开始/IDEA的使用/IDEA的快捷键

一、本章作业

以下为我的代码
。。。

1、编写一个类A01,定义方法max,实现求某个double数组的最大值,并返回。
Homework01.java
public class Homework01 {
    public static void main(String[] args) {
        A01 a01 = new A01();
        double[] arr = {352.3, 55.2, 1522.1, 33, 55.25};
        double res = a01.max(arr);
        System.out.println("res = " + res);
    }
}

//编写一个类A01
class A01 {

    // 方法名称max
    // 返回值double
    // 功能:double数组最大值
    // 参数:double[] 数组
    public double max(double[] d) {
        double mx = d[0];
        for (int i = 1; i < d.length; i++) {
            if (d[i] > mx) {
                mx = d[i];
            }
        }
        return mx;
    }
}
2、编写类A02,定义方法find,实现查找某字符串数组中的元素查找,并返回索引,如果找不到返回-1,Homework02.java
public class Homework02 {
    public static void main(String[] args) {
        String[] str = {"python", "java", "C++", "go", "C"};
        String findElement = "java";
        A02 a02 = new A02();
        int res = a02.find(str, findElement);
        System.out.println("res = " + res);
    }
}

// 编写类A02
class A02 {
    // 定义方法find
    // 接收一个字符串数组和待查找的元素
    // 功能:元素查找
    // 返回索引int,否则返回-1
    public int find(String[] str, String findElement) {
        int index = -1;  // 找不到返回-1
        for (int i = 0; i < str.length; i++) {
            if (findElement.equals(str[i])) {
                index = i;
            }
        }
        return index;
    }
}
3、编写类Book,定义方法updatePrice,实现更改某本书的价格,具体:如果价格 > 150,则更改为150,如果价格 > 100,更改为100,否则不变。
Homework03.java
import java.util.Scanner;
public class Homework03 {
    public static void main(String[] args) {
        Book book = new Book();
        System.out.println("修改之前的价格price = " + book.price);
        Scanner scanner = new Scanner(System.in);
        char breakQ = ' ';
        while (breakQ != 'q') {
            System.out.print("请输入修改的价格:");
            book.updatePrice(scanner.nextInt());
            System.out.println("修改之后的价格price = " + book.price);
            System.out.print("如果想要退出输入q,否则输入任意字符回车:");
            breakQ = scanner.next().charAt(0);
        }
    }
}
// 编写Book类
class Book {
    int price;  // 属性有默认值,局部变量没有默认值,默认值为0
    // 定义方法updatePrice
    // 功能:更改某本书的价格
    //     if price > 150  price = 150
    //     if price > 100  price = 100
    //     else price
    // 返回值:void
    // 参数:接收修改的价格
    public void updatePrice(int price) {
        if (price > 0) {
            if (price > 150) {
                this.price = 150;
            } else if (price > 100) {
                this.price = 100;
            } else {
                this.price = price;
            }
        } else {
            System.out.println("书本的价格需要大于0!");
        }
    }
}
4、编写类A03,实现数组的复制功能copyArr,输入旧数组,返回一个新数组,元素和旧数组一样。
Homework04.java
public class Homework04 {
    public static void main(String[] args) {
        A03 a03 = new A03();
        int[] oldArr = new int[10];
        for (int i = 0; i < oldArr.length; i++) {
            oldArr[i] = (int)(Math.random() * 100 + 1);
        }
        System.out.println("旧的数组:" + java.util.Arrays.toString(oldArr));
        int[] newArr = a03.copyArr(oldArr);
        System.out.println("新的数组:" + java.util.Arrays.toString(newArr));
    }
}
// 编写类A03
class A03 {
    // 方法名称copyArr
    // 功能:实现数组的复制功能,元素和旧数组一样
    // 参数:旧数组int[] old
    // 返回值:新数组int[] new
    public int[] copyArr(int[] oldArr) {
        int arrLen = oldArr.length;
        int[] newArr = new int[arrLen];
        for (int i = 0; i < arrLen; i++) {
            newArr[i] = oldArr[i];
        }
        return newArr;
    }
}
5、定义一个圆类Circle,定义属性:半径,提供显示圆周长功能的方法,提供显示圆面积的方法。
Homework05.java
public class Homework05 {
    public static void main(String[] args) {
        Circle circle = new Circle();
        circle.r = 4;
        System.out.println("r = " + circle.r + "的圆的周长 = " + circle.showCircumference());
        System.out.println("r = " + circle.r + "的圆的面积 = " + circle.showArea());
    }
}
// 定义一个圆类Circle
class Circle {
    // 定义属性
    double r;
    // 提供显示圆周长功能的方法
    // 显示圆面积的方法
    public double showCircumference() {
        return Math.PI * 2 * this.r;
    }
    public double showArea() {
        return Math.PI * r * r;
    }
}
6、编程创建一个Cale计算类,在其中定义两个变量表示两个操作数,定义四个方法实现求和,差,乘,商(要求除数为0的话,要提示)并且创建两个对象,分别测试。
Homework06.java
public class Homework06{
    public static void main(String[] args){
        Cale cale1 = new Cale();
        cale1.n1 = 10;
        cale1.n2 = 20;
        System.out.println("cale1.add() = " + cale1.add());
        System.out.println("cale1.sub() = " + cale1.sub());
        System.out.println("cale1.mult() = " + cale1.mult());
        System.out.println("cale1.div() = " + cale1.div());

        Cale cale2 = new Cale();
        cale2.n1 = 10;
        cale2.n2 = 0;
        System.out.println("cale2.add() = " + cale2.add());
        System.out.println("cale2.sub() = " + cale2.sub());
        System.out.println("cale2.mult() = " + cale2.mult());
        if (cale2.div() == -1) {
            System.out.println("分母不能为0");
        } else {
            System.out.println("cale2.div() = " + cale2.div());
        }
    }
}

// 创建一个Cale计算类
class Cale {
    double n1;
    double n2;
    public double add() {
        return this.n1 + this.n2;
    }
    public double sub() {
        return this.n1 - this.n2;
    }
    public double mult() {
        return this.n1 * this.n2;
    }
    public double div() {
        return this.n2==0 ? -1 : this.n1/this.n2;
    }
}
7、设计一个Dog类,有名字、颜色和年龄属性,定义输出方法show,显示其信息。并创建对象,进行测试,提示使用this.属性.
public class Homework07 {
    public static void main(String[] args) {
        Dog dog = new Dog("小白", "白色", (byte)3);
        dog.show();
    }
}

class Dog {
    String name;
    String color;
    byte age;
    Dog(String name, String color, byte age) {
        this.name = name;
        this.color = color;
        this.age = age;
    }
    Dog(){}
    public void show() {
        System.out.println("小狗信息如下:");
        System.out.println("name = " + this.name);
        System.out.println("color = " + this.color);
        System.out.println("age = " + this.age);
    }
}
8、给定一个Java程序的代码如下所示,则编译运行之后,输出结果是什么?
public class Test{
	int count = 9;
	public void count1() {
		count = 10;
		System.out.println("count1=" + count);
	}
	public void count2() {
		System.out.println("count2 = " + count++);
	}
	public static void main(String args[]) {
		new Test().count1();
		Test t1 = new Test();
		t1.count1();
		t1.count2();
	}
}
out:
	count1 = 10
	count1 = 10
	count2 = 10
9、定义Music类,里面有音乐名name、音乐时长times属性,并有播放play功能和返回本身属性信息的功能方法getInfo.
Homework09.java
public class Homework09 {
    public static void main(String[] args) {
        Music music = new Music("昊天鼓", 8.13);
        music.play();
        music.getInfo();

    }
}

// 定义Music类
class Music {
    String name;
    double times;
    Music(String name, double times) {
        this.name = name;
        this.times = times;
    }
    Music(){}
    public void play() {
        System.out.println("正在播放--" + this.name);
    }
    public void getInfo() {
        System.out.println("歌曲信息如下:");
        System.out.println("歌曲名称->" + this.name);
        System.out.println("歌曲时长->" + this.times + "分钟");
    }
}
10、
试试写出以下代码的运行结果
class Demo {
	int i = 100;
	public void m() {
		int j = i++;
		System.out.println("i="+i);
		System.out.println("j="+j);
	}
}
class Test {
	public static void main(String[] args) {
		Demo d1 = new Demo();
		Demo d2 = d1;
		d2.m();  // 101 100
		System.out.println(d1.i);  // 101
		System.out.println(d2.i);  // 101
	}
}
out:
i=101
j=100
101
101
11、在测试方法中,调用method方法,代码如下,编译正确,试写出method方法的定义形式,调用语句为:
System.out.println(method(method(10.0,20.0),100));

public double method(double n1, double n2){//...
}
12、创建一个Employee类,属性有(名字,性别,年龄,职位,薪水),提供三个构造方法,可以初始化
1、名字,性别,年龄,职位,薪水
2、名字,性别,年龄
3、职位,薪水
要求充分复用构造器
Homework12.java
public class Homework12 {
    public static void main(String[] args) {
        Employee employee = new Employee();
        Employee employee1 = new Employee("python程序员", 10000.88);
        Employee employee2 = new Employee("alice", '女', 18);
        Employee employee3 = new Employee("alice", '女', 18, "Java程序员", 1000000.888);
    }
}

// 创建一个Employee类
class Employee {
    // 属性有:名字,性别,年龄,职位,薪水
    String name;
    char gender;
    int age;
    String job;
    double salary;

    // 提供三个构造方法
    Employee(String name, char gender, int age, String job, double salary) {
        this(name, gender, age);
        this.job = job;
        this.salary = salary;
    }  // 名字 性别 年龄 职位 薪水
    Employee(String name, char gender, int age) {
        this.name = name;
        this.gender = gender;
        this.age = age;
    }
    Employee(String job, double salary) {
        this.job = job;
        this.salary = salary;
    }
    Employee() {}
}
public class Homework13 {
    public static void main(String[] args) {
        // Homework13.java
        PassObject passobject = new PassObject();
        passobject.printAreas(new Circle(), 5);
    }
}
/*
 将对象作为参数传递给方法。
 题目要求:
 1、定义一个Circle类,包含一个double类型的radius属性代表圆的半径,findArea()方法返回圆的面积
 2、定义一个类PassObject,在类中定义一个方法printAreas(),该方法的定义如下:
    public void printAreas(Circle c, int times)  // 方法签名
 3、在printAreas方法中打印输出1到times之间的每个整数半径值,以及对应的面积。例如,
 times为5,则输出半径1,2,3,4,5,以及对应的圆面积。
 4、在main方法中调用printAreas()方法,调用完毕之后输出当前半径值。
 */
// 定义一个Circle类
class Circle {
    // double类型的radius属性表示圆的半径
    double radius;

    // findArea方法
    // 功能:返回圆的面积
    // 返回值:double
    // 参数:无
    public double findArea() {
        return Math.PI * radius * radius;
    }
}
// 定义一个类PassObject
class PassObject {
    // 方法printAreas()
    public void printAreas(Circle c, int times) {
        System.out.println("Radius\t\tArea");
        for (int i = 1; i <= times; i++) {
            c.radius = i;
            System.out.println(c.radius + "\t\t" + c.findArea());
        }
    }
}
14、扩展题
Homework14.java
import java.util.Scanner;
public class Homework14 {
    public static void main(String[] args) {
        // Homework14.java
        Person person = new Person("Tom");
        Host host = new Host();
        Scanner scanner = new Scanner(System.in);

        while (true) {
            System.out.print("轮到你:");
            person.setGuess(scanner.nextInt());
            host.setGuess();
            System.out.println(host.name + "出->" + host.getGuess());
            if ((person.getGuess()==0 && host.getGuess()==1) ||
                (person.getGuess()==1 && host.getGuess()==2) ||
                (person.getGuess()==2 && host.getGuess()==0)) {
                    System.out.println("你赢了!");
                    person.win++;
            } else if ((person.getGuess()==0 && host.getGuess()==2) ||
                       (person.getGuess()==1 && host.getGuess()==0) ||
                       (person.getGuess()==2 && host.getGuess()==1) ) {
                            System.out.println("你输了!");
                            person.lose++;
            } else {
                System.out.println("平局!");
            }
            System.out.println("--------清单--------");
            System.out.println("win\t\tlose");
            System.out.println(person.win + "\t\t" + person.lose);
            System.out.print("如果要退出可以输入q然后回车,否则输入任意字符回车继续:");
            if (scanner.next().charAt(0) == 'q') {
                System.out.println("游戏结束...");
                break;
            }
        }

    }
}
/*
 有个人Tom设计他的成员变量,成员方法可以电脑猜拳,
 电脑每次都会随机生成0,1,2
 0表示石头
 1表示剪刀
 2表示布
 并要显示Tom的输赢次数(清单)
**/
class Person {
    int guess;
    String name;
    int win;
    int lose;

    Person(String name) {
        this.name = name;
    }

    public void setGuess(int guess) {
        this.guess = guess;
    }

    public int getGuess() {
        return this.guess;
    }
}

class Host {
    int guess;
    String name = "电脑";

    public void setGuess() {
        this.guess = (int)(Math.random() * 3);  // Math.random() -> [0.0, 1.0) -> [0, 3) -> 0,1,2
    }

    public int getGuess() {
        return this.guess;
    }
}
tip:
	先简单这样写,等到后期回来优化和做图形化的。

以下为老师的代码
。。。

1、编写类A01,定义方法max,实现求某个double数组的最大值,并返回
思路分析:
1、类名A01
2、方法名max
3、形参(double[])
4、返回值 double
先完成正常业务,然后再考虑代码健壮性
class A01 {
	public double max(double[] arr) {
		double max = arr[0];  // 假定第一个元素就是最大值
		for (int i = 1; i < arr.length; i++) {
			if (max < arr[i]) {
				max = arr[i];
			}
		}
		return max;
	}
}
A01 a01 = new A01();
double[] arr = {1.0, 4.7, 1.8};
System.out.println("arr的最大值=" + a01.max(arr));
但是这样没有考虑代码的健壮性
如果数组传入是空的就会爆出一个越界
所以需要判断保证arr传入进来至少有一个元素
if (arr.length > 0) {
	保证这个条件,然后才走这个代码。
}
但是还要求有一个返回值
如果不大于零麻烦了
else {
	返回double,返回什么比较合适
	可以返回一个包装类Double
}
不满足的时候就可以返回一个null
然后满足的时候正常返回一个double的即可
因为对象是可以为空的
这样语法就过了
然后main中接收包装类对象
Double res = a01.max(arr);
if (res != null) {
	System.out.println("arr的最大值=" + res);
} else {
	System.out.println("arr的输入有误");
}
但是这样如果直接传入一个null呢!?
会爆异常
arr.length的时候会有null.length
所以需要额外增加一个条件
arr!=null && arr.length > 0


// 第二题
编写类A02,定义方法find,实现查找某字符串是否在字符串数组中,并返回索引,如果找不到,返回-1
分析:
1、类名 A02
2、方法名find
3、返回值 int
4、形参 String String[]
class A02 {
	public int find (String findStr, String[] strs) {
		// 直接遍历字符串数组,如果找到,返回索引
		for (int i = 0; i < strs.length; i++) {
			if (findStr.equals(strs[i])) {
				return i;
			}
		}
		return -1;
	}
}
String[] strs = {"jack", "tom", "mary", "milan"};
A02 a02 = new A02();
int index = a02.find("hsp", strs);
System.out.println("查找的index=" + index);
同理这些代码都可以完成健壮性的补充

// 3、编写类Book,定义方法updatePrice,实现更改某本书的价格,具体:如果价格>150,则更改为150,如果价格>100,更改为100,否则不变
分析:
1、类名 Book
2、属性price,name
3、方法名 updatePrice
4、形参()
5、返回值void
6、提供一个构造器
class Book {
	String name;
	double price;
	public Book(String name, double price) {
		this.name = name;
		this.price = price;
	}
	public void updatePrice () {
		if (this.price > 150) {
			this.price = 150;
		} else if(this.price > 100) {
			this.price = 100;
		}
	}
	// 显示书籍情况
	public void info() {
		System.out.println("书名="+this.name+"价格="+this.price);
	}
}
Book book = new Book("笑傲江湖", 300);
book.info();
book.updatePrice(); // 更新价格
book.info();

// 4、
class A03 {
	public int[] copyArry(int[] oldArr) {
		// 在堆中创建一个长度为oldArr.length的数组
		int[] newArr = new int[oldArr.length];
		// 遍历oldArry,将元素拷贝到newArr中
		for (int i = 0; i < oldArr.length; i++) {
			newArr[i] = oldArr[i];
		}
		return newArr;
	}
}
int[] oldArr = {10,30,50};
A03 a03 = new A03();
int[] newArr = a03.copyArr(oldArr);
//遍历newArri验证
System.out.println("==返回的newArr元素情况==");
for (int i = 0; i < newArr.length; i++) {
	System.out.print(newArr[i] + "\t");
}

// 5、
class Circle {
	double radius;
	public Circle(double radius) {
		this.radius = radius;
	}
	public double area() {
		return Math.PI * radius * radius;
	}
	public double len() {
		return 2 * Math.PI * radius;
	}
}
Circle circle = new Circle(3);
System.out.println("面积=" + circle.area());
System.out.println("周长=" + circle.len());

// 6、
编程创建一个Cale计算类,在其中定义2个变量表示两个操作数
定义四个方法实现求和,差,乘,商(要求除数为0的话,要提示)并且创建两个对象,分别测试
class Cale {
	double num1;
	double num2;
	public Cale(double num1, double num2) {
		this.num1 = num1;
		this.num2 = num2;
	}
	public double sum() {
		return num1 + num2;
	}
	public double minus() {
		return num1 - num2;
	}
	public Double mul() {
		// return num1 * num2;
		这里又使用到包装类
		if (num2 == 0) {
			System.out.println("num2 不能为0");
			return null;
		} else {
			return num1 / num2;
		}
	}
}
main
Cale cale = new Cale(2, 0);
System.out.println("和=" + cale.sum());
System.out.println("差=" + cale.minus());
System.out.println("乘=" + cale.mul());
Double divRes = cale.div();
if (dieRes != null) {
	System.out.println("除=" + divRes);
}
System.out.println("除=" + cale.div());

// 7、略,太简单
// 8、
8、给定一个Java程序的代码如下所示,则编译运行之后,输出结果是什么?
public class Test{
	int count = 9;
	public void count1() {
		count = 10;
		System.out.println("count1=" + count);
	}
	public void count2() {
		System.out.println("count2 = " + count++);
	}
	public static void main(String args[]) {
		new Test().count1();
		new Test()这里没有使用一个引用,这个对象是一个匿名对象,也是在堆里面,但是这个对象只能使用一次,没有在栈中进行引用。匿名对象就是没有名字的对象。
		合起来就是创建好匿名对象之后就调用count1()
		将count换成10然后输出10
		Test t1 = new Test();
		这次会指向堆,产生一个新的对象,原来的匿名对象被销毁了,这个对象的属性为9,依然是这个属性。
		t1.count2(); // 这里我写成count1了,哈哈
		t1.count2();
	}
}
out:
	count1 = 10
	count1 = 9
	count2 = 10

// 9、
class Music {
	String name;
	int times;
	public Music (String name, int times) {
		this.name = name;
		this.times = times;
	}
	public void play () {
		System.out.println("音乐 " + name + " 正在播放中... 时长为" + times + "秒");
	}
	public String getInfo() {
		return "音乐 " + name + " 播放时间为" + times;
	}
}
Music music = new Music("笑傲江湖", 300);
music.play();
System.out.println(music.getInfo());

// 10
试试写出以下代码的运行结果
class Demo {
	int i = 100;
	public void m() {
		int j = i++;
		System.out.println("i="+i);
		System.out.println("j="+j);
	}
}
class Test {
	public static void main(String[] args) {
		Demo d1 = new Demo();
		Demo d2 = d1;
		d2.m();  // 101 100
		System.out.println(d1.i);  // 101
		System.out.println(d2.i);  // 101
	}
}
out:
i=101
j=100
101
101

image

// 11、
public double method(double d1, double d2) {}

// 12、
class Employee {
	String name;
	char gender;
	int age;
	String job;
	double sal;
	public Employee(String job, double sal) {
		this.job = job;
		this.sal = sal;
	}
	public Employee(String name, char gender, int age) {
		this.name = name;
		this.gender = gender;
		this.age = age;
	}
	public Employee(String job, double sal, String name, char gender, int age) {
		this(name, gender, age);
		// this(job, sal); // 因为this这样用只能放到第一条语句,第一条语句已经有了,后面就不能这样使用了。
		this.job = job;
		this.sal = sal;
	}
}

// 13、
class Circle {
	double radius;
	public Circle() {}
	public Circle(double radius) {
		this.radius = radius;
	}
	public double findArea() {
		return Math.PI * radius * radius;
	}
	// 添加方法setRadius,修改对象的半径值
	public void setRadius(double radius) {
		this.radius = radius;
	}
}
class PassObject {
	public void printAreas(Circle c, int times) {
		System.out.println("radius\tarea");
		for (int i = 1; i <= items; i++) {
			c.setRadius(i);
			System.out.println((double)i + "\t" + 			c.findArea());
		}
	}
}
Circle c = new Circle();
PassObject po = new PassObject();
po.printAreas(c, 5);

// 14、扩展题自己做
import java.util.Random;                                                                              
import java.util.Scanner;                                                                             
                                                                                                      
/*                                                                                                    
请编写一个猜拳的游戏                                                                                            
有个人 Tom,设计他的成员变量. 成员方法, 可以电脑猜拳. 电脑每次都会随机生成 0, 1, 2                                                    
0 表示 石头 1 表示剪刀 2 表示 布                                                                                 
并要可以显示 Tom的输赢次数(清单), 假定 玩三次.                                                                          
 */ 
 // 测试类,主类
public class MoraGame {                                                                               
                                                                                                      
    // 测试                                                                                             
    public static void main(String[] args) {                                                          
        // 创建一个玩家对象                                                                                   
        Tom t = new Tom();                                                                            
        // 用来记录最后输赢的次数                                                                                
        int isWinCount = 0;                                                                           
                                                                                                      
        // 创建一个二维数组,用来接收局数,Tom出拳情况以及电脑出拳情况                                                            
        int[][] arr1 = new int[3][3];                                                                 
        int j = 0;                                                                                    
                                                                                                      
        // 创建一个一维数组,用来接收输赢情况                                                                          
        String[] arr2 = new String[3];                                                                
                                                                                                      
        Scanner scanner = new Scanner(System.in);                                                     
        for (int i = 0; i < 3; i++) {   //比赛3次                                                              
            // 获取玩家出的拳                                                                                
            System.out.println("请输入你要出的拳(0-拳头,1-剪刀,2-布):");                                           
            int num = scanner.nextInt();                                                              
            t.setTomGuessNum(num);                                                                    
            int tomGuess = t.getTomGuessNum();                                                        
            arr1[i][j + 1] = tomGuess;                                                                
                                                                                                      
            // 获取电脑出的拳                                                                                
            int comGuess = t.computerNum();                                                           
            arr1[i][j + 2] = comGuess;                                                                
                                                                                                      
            // 将玩家猜的拳与电脑做比较                                                                           
            String isWin = t.vsComputer();                                                            
            arr2[i] = isWin;                                                                          
            arr1[i][j] = t.count;                                                                     
                                                                                                      
            // 对每一局的情况进行输出                                                                            
           System.out.println("=========================================");                           
            System.out.println("局数\t玩家的出拳\t电脑的出拳\t输赢情况");                                             
            System.out.println(t.count + "\t" + tomGuess + "\t\t" + comGuess + "\t\t" + t.vsComputer());
            System.out.println("=========================================");                          
            System.out.println("\n\n");                                                               
            isWinCount = t.winCount(isWin);                                                           
        }                                                                                             
                                                                                                      
        // 对游戏的最终结果进行输出                                                                               
        System.out.println("局数\t玩家的出拳\t电脑的出拳\t\t输赢情况");                                               
        for (int a = 0; a < arr1.length; a++) {                                                       
            for (int b = 0; b < arr1[a].length; b++) {                                                
                System.out.print(arr1[a][b] + "\t\t\t");                                              
            }                                                                                         
                                                                                                      
            System.out.print(arr2[a]);                                                                
            System.out.println();                                                                     
        }                                                                                             
        System.out.println("你赢了" + isWinCount + "次");                                                 
    }                                                                                                 
                                                                                                      
}                                                                                                     

// Tom类
class Tom {     // 核心代码  
	// 玩家出拳的类型 
    int tomGuessNum; //0,1,2
	// 电脑出拳的类型
    int comGuessNum; //0,1,2
	// 玩家赢的次数
    int winCountNum;  
	// 比赛的次数
    int count = 1;   //一共比赛3次                                                                                 
     
	
	public void showInfo() {
		//....
	}
	
    /**                                                                                               
     * 电脑随机生成猜拳的数字的方法                                                                                 
     * @return                                                                                        
     */                                                                                               
    public int computerNum() {                                                                        
        Random r = new Random();                                                                      
        comGuessNum = r.nextInt(3);      // 方法 返回 0-2的随机数                                                             
        // System.out.println(comGuessNum);                                                           
        return comGuessNum;                                                                           
    }                                                                                                 
                                                                                                      
    /**                                                                                               
     * 设置玩家猜拳的数字的方法                                                                                   
     * @param tomGuessNum                                                                             
     */                                                                                               
    public void setTomGuessNum(int tomGuessNum) {                                                     
        if (tomGuessNum > 2 || tomGuessNum < 0) { 
			//抛出一个异常, 李同学会写,没有处理
            throw new IllegalArgumentException("数字输入错误");                                             
        }                                                                                             
        this.tomGuessNum = tomGuessNum;                                                               
    }                                                                                                 
                                                                                                      
    public int getTomGuessNum() {                                                                     
        return tomGuessNum;                                                                           
    }                                                                                                 
                                                                                                      
    /**                                                                                               
     * 比较猜拳的结果                                                                                        
     * @return 玩家赢返回true,否则返回false                                                                    
     */                                                                                               
    public String vsComputer() { 
		 //比较巧
        if (tomGuessNum == 0 && comGuessNum == 1) {                                                   
            return "你赢了";                                                                             
        } else if (tomGuessNum == 1 && comGuessNum == 2) {                                            
            return "你赢了";                                                                             
        } else if (tomGuessNum == 2 && comGuessNum == 0) {                                            
            return "你赢了";                                                                             
        } else if (tomGuessNum == comGuessNum){                                                       
            return "平手";                                                                              
        } else {                                                                                      
            return "你输了";                                                                             
        }                                                                                             
    }                                                                                                 
                                                                                                      
    /**                                                                                               
     * 记录玩家赢的次数                                                                                       
     * @return                                                                                        
     */                                                                                               
    public int winCount(String s) {                                                                   
        count++;    //控制玩的次数                                                                                   
        if (s.equals("你赢了")) {     //统计赢的次数                                                                   
            winCountNum++;                                                                            
        }                                                                                             
        return winCountNum;                                                                           
    }                                                                                                 
                                                                                                      
}                                                                                                     
                                                    

二、面向对象中级部分开始

将会讲解的内容:
IntelliJ IDEA

访问修饰符
封装
继承
多态
Super
overwrite
Object类详解
断点调试

来看IDEA是什么东西:
IDEA
1、IDE是集成开发环境的意思
IDEA全称是IntelliJ IDEA
2、在业界被公认为最好的Java开发工具
3、IDEA是JetBrains公司的产品,总部位于捷克的首都布拉格
4、除了支持Java开发,还支持HTML,CSS,PHP,MySQL,Python等

除了IDEA还有另外一款集成开发环境
Eclipse介绍
1、Eclipse是一个开发源代码的,基于Java的可扩展开发平台
2、最初是由IBM公司耗资3000万美金开发的下一代IDE开发环境
3、2001年11月贡献给开源社区
4、Eclipse是目前最优秀的Java开发IDE之一
我们先使用IDEA,后面使用Eclipse,因为现在使用最广的是IDEA
国内要么使用IDEA要么使用eclipse

三、IDEA的使用

首先进入官网地址
https://www.jetbrains.com/
image
点击Download
image
我这里选择其他版本Other versions
image
我现在是2025年,我这里选择下载2023年的
左边的Ultimate是旗舰版,右边的Community是社区版
我这里下载旗舰版,后面30天过期了再你懂的。
image
我下载这个exe
或者使用老韩分享的,我这里直接下载了。
但是老韩建议使用老韩的版本,我这里还是换了。
免得到时候使用这个软件的时候因为版本的不同找半天
https://pan.baidu.com/s/1bzBvf9E6GgNdpaqwxngRfA?pwd=3gk5
image
今天开始和终端拜拜!!!

四、IDEA的基本使用

使用IDEA可以创建Java项目Project,看看IDEA是如何创建JAVA项目的,创建一个Hello的项目,写一个JAVA文件运行。
image
开始问你要不要引入一个设置,这里没有直接下一步OK
image
要不要自定义,直接跳过Skip Remaining and Set Defaults
image
选择激活还是30天免费,选择Evaluate for free
image
点击Evaluate
image
点击这个创建新的项目
image
这个地方会默认选中我们安装好的JAVA环境
image
如果没有可以自己添加JDK
image
选到主目录即可,不用往下面选,然后ok,下一步到下图
image
image
image
如果这个目录没有存在就点击创建
image
在src下面创建JAva的源码,这里写代码
image
这里可以修改字体,准确来说是修改编辑器的字体大小
因为代码区也就是编辑区

public class Hello {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}

image
右键运行Ctrl + Shift + F10
image

五、IDEA的使用技巧和经验

前面调整了编辑区的字体大小,现在我们想要调整菜单和项目区的字体怎么调整呢?
image
还可以调整粗体
image
点击Bold
image
这个地方可以调整编辑区的界面样式
image
这个地方可以看到当前的编码方式,以后使用UTF-8
这里两个都改成UTF-8

练习:
使用IDEA开发一个Java项目,创建一个类MyTools,编写一个方法,完成对int数组冒泡排序的功能
import java.util.Arrays;
public class MyTools {
    public static void main(String[] args) {
        BubbleSort bubbleSort = new BubbleSort();
        int[] arr = new int[5];
        for (int i = 0; i < arr.length; i++) {
            arr[i] = (int)(Math.random() * 100) + 1;
        }  // 随机生成数组,大小len = 10
        System.out.println("start-------->当前的数组为:" + Arrays.toString(arr));
        bubbleSort.sort(arr);
        System.out.println("end-------->最终结果:" + Arrays.toString(arr));
    }
}

class BubbleSort {
    public void sort(int[] arr) {
        int arrLen = arr.length;
        int compareCount = 0;
        int compareSum = 0;
        for (int i = 0; i < arrLen-1; i++) {  // 需要比较几轮
            for (int j = 0,temp = 0; j < arrLen-1-i; j++) {  // 最多比较len-1,最少比较1次
                if (arr[j] > arr[j+1]) {  // 比较代码,升序(从左到右)
                    compareCount++;
                    compareSum++;
                    temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
            if (compareCount == 0) {
                System.out.println("数组已有序,直接退出排序程序->out");
                break;
            }
            System.out.println("第" + (i+1) + "轮的结果->" + Arrays.toString(arr));
            System.out.println("\t第" + (i+1) + "轮交换的次数->" + compareCount);
            compareCount = 0;
        }
        System.out.println("一共交换了" + compareSum + "次");
    }
}

image
当我们已有项目再次创建项目的时候会弹出这样的窗口,告诉我们是当前窗口创建还是新的窗口创建,自行选择。当前窗口就会覆盖掉,如果是新窗口就会新开一个,两个项目不冲突。
image
.java自动带上

tip:这里老师的代码我就不写了。
image
双击这里的ArrayTest.java这个选项图标就可以全屏显示
创建主方法可以直接输入main然后回车,IDEA会自动补全主方法
这里是一个模板语法,后面可以自己配置这些模板
另外一个快捷方式是sout然后回车可以直接得到System.out.println()
值得注意的是这里我们的IDEA使用的时候没有编译直接就能够运行是怎么回事呢?
在IDEA中,当我们run一个文件的时候会先编译成class再运行
image
当我们运行这个JAVA文件之后这里会突然出现一个out目录
image
一直点进去会发现有两个类
image

六、IDEA的快捷键的使用

image
默认的删除方式是Ctrl Y,但是我们可以自己配置
image
自己配置可以先remove掉,然后自己配置
image
如果提示已经分配了,强制自己分配就行了
这里设置成Ctrl + D
我们还可以复制当前行duplicate
image
这里没有设置,我们自己设置,这里我设置成
Ctrl + Alt + 向下箭头
image
我们默认有Alt加/的方式进行自动补全,下图
image
添加注释和取消注释Ctrl /
平时在使用Scanner的时候总是需要导入类,我们怎么快速的导入类呢?
image
勾选这里的Add unambiguous...和下面的这个Optimize...
快速格式化代码可以使用Ctrl + Shift + L
image
image
这里需要注意,如果你的Ctrl + Shift + L和我的这里AMD的热键一样可以设置成Ctrl L
即切换性能记录,然后再再IDEA中使用Ctrl + Shift + L即可
image
并且我还发现Ctrl+Shift+L弹出了搜索框
image
发现变成了Ctrl + Alt + L,我们只需要重新设置成Ctrl + Shift + L即可
还有运行代码的快捷键,当前是Shift + F10
设置成为Alt + R
image
还有快速生成构造器的快捷键,老韩使用的是Alt+insert默认的,这里我设置成为Alt+i
image
image
查看类的继承层级关系,将鼠标放到类名上面Ctrl+H就看到了
image
image
点击这个会生成一个图
image
将光标放到一个方法上面输入Ctrl+b会定位到方法,学习继承有帮助
我们可以Ctrl + B放到调用方法的位置,就可以跳转到该方法定义的地方
或者直接Ctrl+鼠标左键即可
image
image
image
image
再次使用还会自动编号。
练习这些快捷键非常重要,才是专业的JAva程序员。

posted @ 2025-05-05 22:52  请叫我虾  阅读(31)  评论(0)    收藏  举报