输出
System.out.println("haha");
输入
Scanner in = new Scanner(System.in);
in.nextLine()
in.nextDouble()
in.nextInt()
Scanner in = new Scanner(System.in);
System.out.println("tip:" + in.nextLine());
System.out.println("2+3=" + 5);
System.out.println("2+3=" + (2+3)); //2+3=5
变量
Scanner in = new Scanner(System.in);
int p = in.nextInt();
System.out.println("2+" + p + "=" + (2+p));
//2+8=10
常量
final int amount = 100;
int p = in.nextInt();
System.out.println(amount + "+" + p + "=" + (amount+p));
浮点数
double
当int/double时候:自动转换为double相除
in.nextDouble()
运算符
+ 字符串连接符
注意赋值运算:从右向左
+=,++,–和cpp都是一样的
类型转换
a = (int)(1.007+2.008)
关系运算
关系运算符优先级比算术低
结合:从左到右
结果为:true,false(t和f是不能比大小的)
浮点数不能用==,采用Math.abs(a-b)<1e-6取绝对值的方式
判断
语法和cpp一样,后面跟一句话也是一样
if , else, else if
if(a>10){
System.out.println("a>10");
}
if(a==1){
System.out.println("if");
}
else{
}
分支
switch case也是和cpp一样
没有break会一直顺着往下运行case
switch(type){
case 1:
break;
default:
}
循环
和cpp一样
while(){}
do{}while();
for(i=0;i<1;i++){}
数组
元素个数可以是变量
编译的时候不会检查越界,运行会报错
int[] numbers = new int[100];//创建数组,new创建默认为0
int[] nums = {12, 23, 1};//创建数组,编译器会自己数出来个数
numbers[10] = 1;//下标访问
int[] array = new int[n];// 可以是变量,但是创建后不能改变
i = array.length;//用length成员获取数组长度
int[] b = a;//a和b是同一个数组,没有创建一个新的数组
//拷贝操作
int[] b = new int[a.length];
for(int i=0; i<b.length; i++)
b[i]=a[i];
b==a;//判断地址是否相同
数组中的for-each循环
int[] data = {1, 2, 3, 4};
for(int i : data){//循环中每一轮拿出一个数,放在i这个变量中
System.out.println(i);//可以逐个遍历元素
}
二维数组
int[][] a = new int[5][4];
int[][] a ={
{1,2,3},
{1,2},
}
a.length//有几行行
a[1].length//第一行的长度(有几列)
字符
java采用Unicode编码
char类型是可以加减运算的 和cpp中的字符类型一个道理
char c = 'A'
char d = (char)(c + 'A' - a)//大小写转换
逃逸字符 \+ char
包裹类型
注意第一个字母大写
int i = 10;
Integer k = i;
System.out.println(Integer.MAX_VALUE);//获得最大范围
System.out.println(Integer.MIN_VALUE);
System.out.println(Character.isDigit('-'));//是否是数字
System.out.println(Character.isLowerCase('a'));//是否是小写
System.out.println(Character.toLowerCase('A'));//转换为小写
字符串
String是一个类,注意开头大写
String s = new String("123");
String s = “haha”;
s = s + "happy"//字符串用+连接
s = in.next();//读入一个单词
s = in.nextLine();//读入下一行
b = a ;//让b指向了和a相同的一个字符串
b.equals(a);//equals比较a和b内容是否相同,==比较的是地址
常用操作
注意:字符串不可以用for-each循环,可枚举的东西才可以
这些操作并不是改变字符串本身,而是创造了一个新的字符串,我们要用一个新的s接受返回值
s1.compareTo(b);//比较大小
int i = s1.length();//获取长度
char a = s.charAt(3);//访问第三个位置的字符
s.substring(2);//从二号位置到末尾的子串
s.substring(2, 4);//取2,3位置的字符
s.indexOf('A')//找A这个字母是否存在,返回位置,没找到返回-1
s.indexOf("abc", 3)//从第三个位置开始找,找子串是否存在,返回第一个找到的位置
s.startsWith(s1);//是否以字符串s1开头
s.endsWith(s2);//是否以字符串s2结束
s.trim();//删掉两端的字符串
s.replace(c1, c2);//把所有的c1都换成c2
s.toLowerCase();//所有变成小写
s.toUpperCase();//所有变成大写
switch-case也可以用字符串(1.7以及以上的版本)
Math类
Math.abs(-12);//取绝对值
Math.roung(10.345);//对小数部分四舍五入
Math.random();//获取随机数
Math.pow(1,2);//1的2次方
方法(函数)
在java里面,只能将值传给函数
package my_first_java;
import java.util.Scanner;
public class Hello {
public static boolean isTrue(int i)//参数
{
return true;
}//函数
public static void main(String[] args) {
boolean x = isTrue(1);//值
}
}
本地变量——函数中的变量———生存期 = 作用域 = 大括号(块)
不能定义重名的变量,不存在覆盖,这和cpp有区别