作用:通过Scanner类获取用户的输入
基本语法:
通过Scanner类的next()和nextline()方法获取字符串;
读取之前可以用hasNext()和hasNextLine()判断是否还有输入的数据(可用于循环条件判断)
Scanner s = new Scanner(System.in); //输入hello world String str = s.next(); System.out.println("str为 "+str); //不能得到带有空格的字符串,得到hello String str1 = s.nextLine(); System.out.println("str1为 "+str1); //以回车为结束符,得到hello world s.close(); //凡是I/O流的类,用完就要关闭
while(s.hasNextDouble()){ double x = s.nextDouble(); account++; sum = sum + x; } System.out.println("共有"+account+"个数,总和为"+sum); s.close(); System.out.println("当前输入第"+account+"个数");
if单选
if双选择
if多选择
嵌套的if
switch多选(等值判断,可以匹配字符串)
注意每写完一个case加break,不然会穿透
打印三角形-等腰三角形-菱形
方法:语句的集合,执行一个功能(最好保持原子性,一个方法实现一个功能)
命名:首字母小写,驼峰命名
组成:修饰词(public) 返回值类型 方法名 参数类型 方法体
调用:对象名.方法名(实参列表)
~当方法返回一个值的时候,方法调用通常被当作一个值 int larger = max(30,40);
~若方法返回值是void,方法调用一定是一条语句 System.out.println("Hello,world");
堆--存放new的对象和数组,不会存放别的对象引用
栈--存放基本变量类型(数值型、字符型、布尔型;包含具体数值),引用对象的变量(存放 这个引用在堆里面的具体地址)(字符串不是基本数据类型!!!)
注意:Java中==比较的是栈里的值,equals()比较堆里的值
方法区--被所有线程共享,包含所有的class和static变量
for循环--打印数组元素
for-each,增强for循环输入输出
数组作方法入参(额。。。)
数组作返回值--反转数组
二维数组:数组的数组,数组嵌套数组:int a[][] [][] =new int [2]5
//遍历输出 for (int i = 0; i < array.length; i++) { for (int j = 0; j < array[i].length; j++) { System.out.print(array[i][j]+" "); } System.out.println(); }
int[] a = {1,2,3,4,236,650,895,0,7,5}; //打印数组元素 System.out.println(a); //直接打印,(hashcode)结果:[I@76ed5528 System.out.println(Arrays.toString(a)); //Arrays类的方法,输出数组元素,很方便!!! Arrays.sort(a); //对数组a进行排序,默认升序 Arrays.fill(a,2,4,0); //数组填充,2到4之间用0填充
冒泡排序:可以通过加一个flag标识为优化,减少无意义的比较
public static int[] sort(int[] array){ int temp = 0; boolean flag = false; //通过flag标识位减少无意义的比较,可以优化 //外层循环,判断要走多少次 for (int i = 0; i < array.length-1; i++) { //内层循环,判断每次要干嘛,如果后一个比前一个小,交换位置 for (int j = 0; j < array.length-1-i; j++) { if(array[j+1] < array[j]){ temp = array[j+1]; array[j+1] = array[j]; array[j] = temp; flag = true; } if(!flag){ break; } } } return array; }
一个数组中大部分元素为0,或为同一值,可用稀疏数组来保存
处理方式:
1)记录以共几行几列,有多少个不同的值(不包含0);
2)把不同值元素的行列及值记录在一个数组中,可缩小程序规模;
代码:稀疏数组固定为3列,分别为:行,列,值;有sum个不同的值,那么就有sum+1行(第一行保存总共几行几列几个值)
//转换为稀疏数组 //遍历获取有效值个数 int sum = 0; for (int i = 0; i < 11; i++) { for (int j = 0; j < 11; j++) { if (array[i][j] != 0) { sum++; } } } System.out.println("有效值个数为" + sum); //创建一个稀疏数组 int[][] array2 = new int[sum + 1][3]; //赋值--给第一行赋值(初始数组有几行几列,几个有效值) array2[0][0] = 11; array2[0][1] = 11; array2[0][2] = sum; //遍历二维数组,将非0的值存入稀疏数组中 int count = 0; for (int i = 0; i < array.length; i++) { for (int j = 0; j < array[i].length; j++) { if (array[i][j] != 0) { count++; //第几个数不为0,他就在系数矩阵的第几行 array2[count][0] = i; //该行第0列存放在原始数组中的行数 array2[count][1] = j; //该行第1列存放在原始数组中的列数 array2[count][2] = array[i][j]; //该行第2列存放在原始数组中的值 } } } //输出稀疏数组 for (int i = 0; i < sum + 1; i++) { // System.out.println(array2[i][0] + "\t" + array2[i][1] + "\t" + array2[i][2] + "\t"); for (int j = 0; j <3 ; j++) { System.out.print(array2[i][j]+"\t"); } System.out.println(); }