Java第3章
1. String与StringBuilder
String:对字符串进行操作更改时,每次都会在内存空间开辟一个新的小空间,n次改变就出现n个空间的使用,因此,我们要想办法将这个浪费的时间和空间尽可能缩小。
我们提出了StringBuilder类
StringBuilder是个内容可变的容器(PS:申请一个足够大的空间,而不用像String一直在申请空间。)
//在进行多线程保证安全时,StringBuffer替代StringBuilder,但作用都是一样的,内部原理都是将其累加放在后面。
public class StringBuilder{
public static void main(string[] args){
//创建对象
StringBuilder a=new StringBuilder();
//StringBuilder aa=new StringBuilder(hello); 两种创建形式都是可以的
a.append(“hello”).append("world").append(2022);
System.out.println("a:"+a);
//a的显示结果就是:helloworld2022
}
}
2. 输入输出
我们会使用到 import java.util.*;这个包进行调用
创建对象:
Scanner sc=new Scanner(System.in);//sc是一个变量名。除了sc其它的均不可改变。
接收数据:
int x=sc.nextInt();//x变量名,其他的也是不可变 sc与上面一致
import java.util.*;
public class ScannerTest{
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);//输入
int x=sc.nextInt();输出
System.out.println("x:"+x);
//输入一行,使用:
//String xx=in.nextLine();
}
}
PS:如果想要实现读取密码,使用的是Console类。
3. 格式化输出
① System.out.printf()
String str="ABC"
double a=1.23;
int i=123;
System.out.printf("%f\n",pi);//表示格式化输出浮点数
System.out.printf("%d\n",i);//表示格式化输出十进制数
System.out.printf("%s\n",str);//表示格式化输出字符串
//结果
/*
1.230000
123
ABC
*/
String x=String.format(“%s--%d--%s”,“大家”,“6”,“!”);
4.文件输入与输出
//输入
Scanner in = new Scanner(Paths.get("myfile.txt")),"UTF-8");
//输出
String dir=System.getProperty("user.dir");
System.out.println(dir);
5.Switch与break&continue
break:跳出一个循环体或者完全结束一个循环
continue:跳过本次循环体重尚未执行的语句,进行下一次的循环条件判定。
int c=20;
switch (c){
case: 10:
System.out.println("你是最棒的,抽中10元,花费10元");
break;
case: 20:
System.out.println("你是最棒的,抽中20元,花费10元");
break;
case: 50:
System.out.println("你是最棒的,抽中50元,花费10元");
break;
default:
System.out.println("你是最棒的,抽中10元,花费100元");
break;
}
/*结果:
你是最棒的,抽中20元,花费10元
*/
case: 20:
System.out.println("你是最棒的,抽中20元,花费10元");
continue;
case: 50:
System.out.println("你是最棒的,抽中50元,花费10元");
break;
/*结果:
你是最棒的,抽中20元,花费10元
你是最棒的,抽中50元,花费10元
*/
6.大数值
1.valueOf方法
可以将数值转换成大数值
BigInteger a=BigInter.valueOf(100);
2.数据需要使用add代替“+”,用multiply代替“×”
import java.math.*;
import java.util.*;
public class Test{
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
System.out.print("How many numbers do you need to draw?");
int k=in.nextInt();
System.out.print("What is the hightest number you can draw?");
int n=in.nextInt();
BigInteger lotteryOdds=BigInteger.valueOf(1);
for(int i=1;i<k;i++)
{
lotteryOdds=lotteryOdds.multiply(BigInteger.valueOf(n-i+1)).divide(BigInteger.valueOf(i));
System.out.println("Your odds are 1 in "+lotteryOdds+".Good luck!");
}
}
}
7.数组
① 数组的声明
数组索引从0开始
int[] a=new int [100];//创建了一个可以存储100个整数的数组a
a[0]=1;
a[1]=2;
int a[]=null;
a=new int[3];
② 数组引用传递
java中没有指针,引用类型的"="相当于把其修改掉 切换自己的指向
int [][] a= new int[3][5]; //指向一个二维数组
a[0]=new int[7];//二维数组分为3个一维数组,其中第一个一维数组索引地址为新创建的这个数组的地址
int [][] b=new int [][]{
{2,3,4},{4,4,4,4,5}
};
④ for each
格式:for(变量:数组){ 执行的操作 }
//输出排序后的数组
int []a={4,45,7,3,2,4,65,354};
Arrays.sort(a); //快速排序
for(int b:a)
{
System.out.println(b);
}