Java学习(二)
流程控制
用户交互对象(Scanner)
标准格式:hasNext()——next()和 hasNextLine()——nextLine()
-
next(): 1.一定要得到有效字符后才能结束
2.在输入有效字符之前的空格或空白,next()会自动将其去掉
3.对输入有效字符后,后面输入的空格将作为分隔符或结束符
4.next()不能得到带有空格的字符串
System.out.println("请输入");
//创建Scanner对象
Scanner scanner = new Scanner(System.in); //输入hello world
//判断Scanner是否还没输完
if (scanner.hasNext()){
//把输入的结果赋给next
String next = scanner.next(); //hello
//打印出next
System.out.println(next); //hello
}
scanner.close;
-
2.可以获得空白
System.out.println("请输入");
//创建Scanner对象
Scanner scanner = new Scanner(System.in); //输入hello world
//判断Scanner是否还没输完
if (scanner.hasNextLine()){
//把输入的结果赋给next
String nextLine = scanner.nextLine(); //hello world
//打印出nextLine
System.out.println(nextLine); //hello world
}
scanner.close;
注:hasNext这个判断可以没有,但以下部分必须有
Scanner scanner = new Scanner(System.in); //开始
String nextLine = scanner.nextLine();
scanner.close; //结尾
方法
设计方法原则
-
一个方法,完成一个功能
-
方法包含于类或对象之中
-
类似于其他语言的函数
方法的定义
-
由方法头和方法体组成
-
格式: 修饰符 返回值类型 方法名(参数类型 参数名){}
public static int max(int a,int b)
方法的调用
-
静态方法:可以通过 类名.方法名 调用
-
非静态方法:只能通过实例化一个该类的对象,通过对象来调用该方法
方法的重载
-
重载:就是在一个类中具有相同的函数名,但是形参不同
-
重载的原则:(1)方法名必须相同
(2)参数列表不同(个数不同或类型不同、参数排列的顺序不同等)
(3)方法返回的类型可以相同也可以不同
(4)仅仅返回类型不同不足以成为方法的重载
可变参数
-
java支持传递同类型的可变参数
-
可变参数实际上就是一个数组,如下面的b,可以用b[1]来调用第二个输入的
-
它在方发声明中,在指定参数类型后加一个省略号(...)
-
在一个方法中只能指定一个可变参数,它必须是方法的最后一个参数,任何普通参数必须在它之前声明
public static void add(int a,double ...b){
}
数组
数组声明
-
格式:datatype[] 数组名;(推荐)
datatype 数组名[];
-
使用new关键字来新建数组
datatype[] 数组名 = new datatype(arraysize); -
获取数组的长度就是通过:数组名.length
int[] a;
a=new int[10];
for (int i = 0; i < a.length; i++) {
a[i] = i;
System.out.println(a[i]);
}
数组的初始化
-
静态初始化:创建就赋值 int[] a = {1,23,4,56,7};
-
动态初始化:手动赋值 int[] b = new int[10];
数组的特点
-
长度是确定的,若出现下标越界,则会报数组小标越界异常。 ArrayIndexOutOfBoundsException
-
数组中是相同类型元素
-
数组元素可以是任何类型(包括基本类型和引用类型)
-
数组本身就是对象,数组对象本身就在堆中,数组元素本身就相当于成员变量
数组的使用
-
普通for循环遍历
for (int i = 0; i < a.length; i++) {
a[i] = i;
System.out.println(a[i]);
}
-
增强for循环 for(数据类型 变量名:遍历的对象)。 增强for通常用于遍历对象,不方便操作取下标
for (int i : a) {
System.out.println(i);
}
二维数组
-
和一维数组类似 只不过是嵌套而已
-
二维数组在内存中是以行优先
//[3][2]
int[][] a={{1,2},{2,4},{3,5}};
int[][] b=new int[3][2];
for (int i = 0; i <3; i++) {
for (int j = 0; j < 2; j++) {
b[i][j] = i;
}
}
冒泡排序案例
public class BubbleSort {
public static void main(String[] args) {
int[] a = {1,3,4,2,8,10,5};
int[] sort = sort(a);
//用的Arrys里的toString方法
System.out.println(Arrays.toString(sort));
}
public static int[] sort(int[] array){
//外层判断需要走多少次
for (int i = 0; i < array.length-1; i++) {
int temp = 0;
//内层判断比较两个数
for (int j = 0; j < array.length-1-i; j++) {
if (array[j]>array[j+1]){
temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
}
return array;
}
}

浙公网安备 33010602011771号