由于博主刚开始写文章,如果有不明白的地方欢迎私信,如果不是学Java专业的,但是有Java的选修课或者作业的也可以私聊我,只要不是太难就行。
字符串判断是否相等
今天在做老师给的一个练习的时候遇到了一个很有意思的问题,就是两个字符串不能用==来进行比较,然后我就用了别的思路去写这个练习。等到我的小练习写完之后回过头,在询问了老师之后才知道自己的错误在哪里。
下面用代码来举例子
class demo1
{
public static void main(String[] args){
String a = "亚索";
String b = "亚索";
if(a == b){
System.out.println("a和b相等");
}else{
System.out.println("a和b不等");
}
}
}
这个地方显示的是相等的,但是看看下面的代码
class demo1
{
public static void main(String[] args){
String a = new String("亚索");
String b = new String("亚索");
if(a == b){
System.out.println("a和b相等");
}else{
System.out.println("a和b不等");
}
}
}
这个时候就显示不等了,但是在我们人看起来,这两段明明都是相等的,为什么在Java中就显示了不等了呢。这是和Java的内存有关系的,如果我们用new创建的String对象,那我们如果用==的话,比较的就是两个对象的地址,他们不是一个对象,所以他们的地址当然不同了,就会显示不同。不管是怎么样创建的String字符串,咱们都可以用下面的一个方法来进行比较,这个在以后的工作中用的比较多,不多废话,直接上代码
class demo1
{
public static void main(String[] args){
String a = new String("亚索");
String b = new String("亚索");
if(a.equals(b)){
System.out.println("a和b相等");
}else{
System.out.println("a和b不等");
}
}
}
在以后的工作中,很多字符串都是在我们不知情的情况下new出来的,所以以后用equals()方法可以减少很多的错误。
学生管理系统
需求:这是一个很简单的学生管理系统,只在控制台输出即可,一共有五个功能:(1)查看学生信息(2)修改学生信息(3)添加学生信息(4)删除学生信息(5)退出系统。然后进入前四个功能的时候会先进行提示看要对一班还是二班进行操作,然后学生信息一共三个:班级、学号、姓名。
分析:
1.创建空白项目并进行测试
2.先定义信息的数组,我用的是俩个二维数组,第一个存的是班级和学号,第二个是班级和姓名
3.先随意添加进去几个数字可以进行测试
4.只有选择退出功能才能退出,所以可以写一个死循环来进行输出菜单
5.输出菜单并给出输入1-5来选择功能的提示
System.out.println("1:查看学生信息");
System.out.println("2:修改学生信息");
System.out.println("3:增加学生信息");
System.out.println("4:删除学生信息");
System.out.println("5:退出系统");
System.out.println("请输入1-5来实现对应的功能");
6.定义一个数组来接收用户输入的数字,借由此来选择功能
7.先把五个功能模块写出来,里面先什么都不写或者写某某功能已实现来进行测试
8.分开来分析模块
9.先分析最简单的退出系统
(1)退出系统先进行提示退出成功
(2)break结束循环即可
10.分析查看学生信息功能
(1)先让提示让用户输入所要查看的班级
(2)定义一个数字来接收这个
(3)因为下标是从0开始的,所以咱们让班级这个数字-1
(4)因为只有两个班级,数组第一个长度也是2,所以要判断用户输入的是否是1和2,如果不是,要重新进行输入
(5)写一个for循环,循环结束条件可以写学号那个数组,下面给出for循环里的内容
for(int i = 0;i< id[banxuanze].length;i++){}
(6)在循环里面即可对于数组进行遍历输出,并对输出的内容进行判断,因为咱们用的数组,故没有给初始值的地方,默认值是0,如果全输出,会把很多的0输出出来
for(int i = 0;i< id[banxuanze].length;i++){
if(id[banxuanze][i]!=0&&name[banxuanze][i]!=null){
System.out.println("学生学号:"+id[banxuanze][i]+",学生姓名:"+name[banxuanze][i]);
}
}
这样,查看的模块就完成了
11.分析删除模块
(1)先让提示让用户输入所要查看的班级
(2)定义一个数字来接收这个
(3)因为下标是从0开始的,所以咱们让班级这个数字-1
(4)因为只有两个班级,数组第一个长度也是2,所以要判断用户输入的是否是1和2,如果不是,要重新进行输入
(5)提示用户输入要删除的学生的学号
(6)定义一个suo变量,是Boolean类型的,默认值未true
(7)用循环来判断数组中是否有该学生的学号,如果有学号则suo的值变为false,并把这个位置上的值变为初始值,int类型的初始值为0,String类型的初始值为null
(8)删除成功之后输出删除成功
(9)如果没有找到对应的学号,则suo的值是true,进行判断,suo就是判断条件,他是true,则输出查无此人。
(10)这样删除模块也完成了
12.分析添加模块
(1)先让提示让用户输入所要查看的班级
(2)定义一个数字来接收这个
(3)因为下标是从0开始的,所以咱们让班级这个数字-1
(4)因为只有两个班级,数组第一个长度也是2,所以要判断用户输入的是否是1和2,如果不是,要重新进行输入
(5)提示用户输入要添加的学生学号
(6)先用for循环查看一下有没有该学号,如果有该学号则提示已有此学号,如果没有则进行下面的操作
(7)先用循环看一下从头开始下一个空的地方在哪,如果是学号,则看0值在哪,他们在哪,先用一个值来取他们的下标
(8)用该下标的值来接收前面输入的学号
(9)提示用户输入姓名,并用姓名数组来接收姓名
(10)提示添加成功
(11)添加模块完成
13.分析更改模块
(1)先让提示让用户输入所要查看的班级
(2)定义一个数字来接收这个
(3)因为下标是从0开始的,所以咱们让班级这个数字-1
(4)因为只有两个班级,数组第一个长度也是2,所以要判断用户输入的是否是1和2,如果不是,要重新进行输入
(5)提示用户输入需要更改的学生学号
(6)定义一个suo,初始值为true
(7)用for循环来判断是否有用户输入的这个值,如果有的话先把suo的值变为false再进行下面的操作
(8)提示用户输入新的学号和姓名
(9)把找到的这个值的下标对应到两个数组,然后接收新的值
(10)循环结束之后进行判断,suo为true的时候输出查无此人
(11)更改模块完成
14.全部的模块均已完成,测试即可。下面就是我写的全部代码
package day_0721;
import java.util.Scanner;
public class studentguanli {
public static void main(String[] args) {
int[][] id = new int[2][100];
String[][] name = new String[2][100];
id[0][0] = 101;
id[0][1] = 102;
id[1][0] = 201;
id[1][1] = 202;
name[0][0] = "一班的张三";
name[0][1] = "一班的李四";
name[1][0] = "二班的张三";
name[1][1] = "二班的李四";
Scanner sc = new Scanner(System.in);
for(;;){
System.out.println("1:查看学生信息");
System.out.println("2:修改学生信息");
System.out.println("3:增加学生信息");
System.out.println("4:删除学生信息");
System.out.println("5:退出系统");
System.out.println("请输入1-5来实现对应的功能");
int xuanze = sc.nextInt();
if(xuanze == 1){
System.out.println("请输入1、2来查看对应班级的学生的信息");
int banxuanze = sc.nextInt();
banxuanze-=1;
if(banxuanze!=0&&banxuanze!=1){
System.out.println("你输入的班级编号错误,请重试");
continue;
}
for(int i = 0;i< id[banxuanze].length;i++){
if(id[banxuanze][i]!=0&&name[banxuanze][i]!=null){
System.out.println("学生学号:"+id[banxuanze][i]+",学生姓名:"+name[banxuanze][i]);
}
}
}
else if(xuanze == 2){
System.out.println("请输入要修改学生的班级");
int banxuanze = sc.nextInt();
System.out.println("请输入要修改学生的学号");
int oid = sc.nextInt();
boolean suo = true;
banxuanze-=1;
if(banxuanze!=0&&banxuanze!=1){
System.out.println("你输入的班级编号错误,请重试");
continue;
}
for(int i = 0;i<id[banxuanze].length;i++){
if(oid == id[banxuanze][i]){
System.out.println("请输入修改之后的学号");
id[banxuanze][i] = sc.nextInt();
System.out.println("请输入修改之后的姓名");
name[banxuanze][i] = sc.next();
System.out.println("修改成功");
suo = false;
}
}
if(suo){
System.out.println("查无此人");
}
}
else if(xuanze == 3){
System.out.println("请输入要添加的班级");
int banxuanze = sc.nextInt();
banxuanze-=1;
if(banxuanze!=0&&banxuanze!=1){
System.out.println("你输入的班级编号错误,请重试");
continue;
}
System.out.println("请输入要添加的学生的学号");
int nid = sc.nextInt();
boolean suo = true;
for(int i = 0;i<id[banxuanze].length;i++){
if(id[banxuanze][i] == nid){
suo = false;
System.out.println("你输入的学号已存在,请重试");
break;
}
}
if(suo){
System.out.println("请输入要添加的学生的姓名");
String nname = sc.next();
int kong = 0;
for(int i = 0;i<id[banxuanze].length;i++){
if(id[banxuanze][i]==0){
kong = i;
break;
}
}
id[banxuanze][kong] = nid;
name[banxuanze][kong] = nname;
System.out.println("添加成功");
for(int i =0;i<id[banxuanze][i];i++){
System.out.println(id[banxuanze][i]);
}
}
}
else if(xuanze == 4){
System.out.println("请输入你要删除的学生所在的班级");
int banxuanze = sc.nextInt();
banxuanze-=1;
if(banxuanze!=0&&banxuanze!=1){
System.out.println("你输入的班级编号错误,请重试");
continue;
}
System.out.println("请输入你要删除的学生的学号");
int sid = sc.nextInt();
boolean suo = true;
for(int i = 0;i<id[banxuanze].length;i++){
if(sid == id[banxuanze][i]){
id[banxuanze][i] = 0;
name[banxuanze][i] = null;
suo = false;
System.out.println("删除成功");
}
}
if(suo){
System.out.println("查无此人");
}
}
else if(xuanze == 5){
System.out.println("退出成功");
break;
}
else{
System.out.println("请输出1-5的数字");
}
}
}
}
方法
方法是Java中的一个重要组成部分,有了方法,代码才能变得更加有条理,而且还会引出来封装的概念,这个东西很重要,老师说给我们讲两天,手动滑稽。
方法的定义
咱们学过了方法,main方法就是一种方法,main的写法是:
public static void main(String[] args){}
其中public static是方法的修饰符,来修饰方法的一些属性,而void则表示此方法没有返回值,main则是方法的名字,括号里面就是要传进去的参数,这样就找出来了方法定义的基本格式
修饰符 返回值类型 方法名(){}
//这里定义了一个名字为sum的没有返回值的方法,先不讲解前面的修饰符
public static void sum(){}
方法的使用
方法的使用分为三种
1.直接调用
方法名字();
2.输出调用
System.out.println(方法名());
3.赋值调用
int a = 方法名();
这三种可以很明显看出来区别以及使用的范围,第一种适合用于没有返回值类型的方法,后面两种适合用于有返回值类型的方法
方法的传参数
方法可以传进去参数,在main方法中可以把main中的数据传入到方法中,再在方法中传回来
举例说明:
class demo02
{
public static void main(String[] args){
int a = 1;
int b = 5;
int sum = qiuhe(a,b);
System.out.println(sum);
}
public static int qiuhe(int n,int m){
int sum = n + m ;
return sum;
}
}
方法的讲解到此结束,虽然看着很简单,但是用起来却不一定很简单,还是要多做练习题。
练习
键盘录入
键盘录入需要三步
1.导入包 import java.util.Scanner;
2.定义一个sc对象 Scanner sc = new Scanner(System.in);
3.用sc的方法来接收键盘录入的东西 int a = sc.nextInt();
如果是String则用 String a = sc.next();
举例如下:
import java.util.Scanner;
class demo00
{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请你输入要输出的数字");
int i = sc.nextInt();
System.out.println(i);
}
}
水仙花数
需求:定义一个方法,要求求出来所有三位数中的水仙花数,并且直接进行输出,并在main方法中进行调用
分析:
1.先创建空白项目并进行运行
2.先写出来main方法
3.再写水仙花数这个方法(注意要和main方法处于并列关系)
4.因为我们的需求是要直接输出,所以没有返回值,返回值类型是void
5.在方法体中写我们的需求就可以了
6.具体需求可以看我第二天的文章,这里就不在阐述
下面直接上代码
//找到所有三位数的水仙花数
class demo01
{
public static void main(String[] args){
zhaoshu();
}
public static void zhaoshu(){
int g = 0;
int s = 0;
int b = 0;
for(int i = 100;i<1000;i++){
g = i%10;
s = i/10 %10;
b = i/100;
int sum = g*g*g + s*s*s + b*b*b;
if(sum == i){
System.out.println(sum);
}
}
}
}
计算最大值
需求:要求从键盘录入三个数字,比较大小,直接输出最大的数字
分析:
1.先创建空白项目并进行运行
2.先写出来main方法
3.再写最大值这个方法(注意要和main方法处于并列关系)
4.因为我们的需求是要直接输出,所以没有返回值,返回值类型是void
5.在方法体中写我们的需求就可以了
6.先接收三个数字a,b,c
7.先把a和b进行比较
8.大的那个和c进行比较
9.假如c大则输出c,加入是前面的那个大,则输出前面的那个数字
代码如下:
//键盘录入三个值,输出最大的
import java.util.Scanner;
class demo02
{
public static void main(String[] args){
max();
}
public static void max(){
//键盘录入三个数字
Scanner sc = new Scanner(System.in);
System.out.println("输入第一个数字");
int a1 = sc.nextInt();
System.out.println("输入第二个数字");
int a2 = sc.nextInt();
System.out.println("输入第三个数字");
int a3 = sc.nextInt();
//比较大小
if(a1>a2){
//此时a1>a2
if(a1>a3){
//此时a1>a3
System.out.println("最大的数字是:"+a1);
}else{
//此时a3>a1>a2
System.out.println("最大的数字是:"+a3);
}
}else{
//此时a2>a1
if(a2>a3){
//此时a2>a3
System.out.println("最大的数字是:"+a2);
}else{
//此时a3>a2>a1
System.out.println("最大的数字是:"+a3);
}
}
}
}
定义数组
需求:从键盘录入三个数字,写到数组中并且返回到main方法中并进行输出
分析:
1.先创建空白项目并进行测试
2.先出来main方法
3.创建一个定义数组的方法
4.在此方法中提示用户输入三个数字并进行接收
5.定义一个数组,把上面输入的三个数放入数组中
6.方法最后返回这个数组
7.在main方法中定义一个数组来接收方法得出来的结果
import java.util.Scanner;
class demo04
{
public static void main(String[] args){
int[] arr = cunshu();
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
}
public static int[] cunshu(){
//录入数字
Scanner sc = new Scanner(System.in);
System.out.println("输入第一个数字");
int a1 = sc.nextInt();
System.out.println("输入第二个数字");
int a2 = sc.nextInt();
System.out.println("输入第三个数字");
int a3 = sc.nextInt();
//直接存入数字
int[] arr = {a1,a2,a3};
//返回数组
return arr;
}
}
打印矩形
需求:在main方法中写键盘录入,在别的方法中打印矩形,录入两个数据,一个行,一个列,打印的形状是*
分析:
1.创建空白项目并进行测试
2.写出来main方法,并且在里面提示用户进行输入
3.定义两个变量去接收这两个数字
4.定义一个打印矩形的方法
5.在方法里面写打印矩形
6.在for循环中再嵌套一个for循环
7.在main方法中调用打印方法并传入参数
代码如下:
import java.util.Scanner;
class demo05
{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请你输入要打印的行数");
int hang = sc.nextInt();
System.out.println("请你输入要打印的行数");
int lie = sc.nextInt();
shuchu(hang,lie);
}
public static void shuchu(int hang,int lie){
for(int i = 0;i<hang;i++){
for(int j = 0;j<lie;j++){
System.out.print("*");
}
System.out.println();
}
}
}
注意:在main方法中定义的变量和传入的参数的名字要求一样,在方法中定义的变量的名字要和调用的名字相同。在main方法中传入的参数名字可以和方法定义中的名字不相同