发表于: 2020-11-24 23:32:48
1 1363
今天完成的事情:
复习字符串
// 请将一组int值视为字符的Unicode编码,然后将它们拼成一个字符串:
int a = 72;
int b = 105;
int c = 65281;
// String cc = (String) c;//报错,无法将int强转成String,int是基本类型,而String是一个包装类,所以无法强转
//可以使用String.valueOf()方法将基本类型转换成String类型,对于包装类可直接使用toString()方法,基础类型无法使用toString()方法
String str = String.valueOf(a);
Integer a1 = 3;
String str1 = a1.toString();
char aa = (char)a;
char bb = (char)b;
char cc = (char)c;
System.out.println(aa);//H
System.out.println(cc);//!
System.out.println(aa + bb +cc);//这里会将字符自动转成int,所以输出的是65458
System.out.println(""+aa + bb +cc);//先将char类型转换成字符串,之后再把char类型加到字符串当中Hi!
System.out.println(aa + bb +cc+"");//先做类型int加法,再加上""转换成字符串,输出65458
//返回的 char参数的字符串表示形式。
String s = String.valueOf((char)a) + String.valueOf((char) b) + String.valueOf((char) c) ;//Hi!
System.out.println(s);
// FIXME:
// String s = (char)a + (char)b + (char)c;//报错,无法将int强转成String
// String s ="" + (char)a + (char)b + (char)c;//Hi!
// String s = aa + bb + cc + "";//65458
// System.out.println(s);
结论:使用字符串拼接的时候,“ ”这个所放的位置会导致结果不一样,因为程序是从左到右执行的,放在前面,先转成字符串,在来运行。放在后面先做该类型的计算,然后在转成字符串。
char类型在加法的时候会自动转成int. String类型无法使用强转,但可以使用拼接,转成字符串。强制类型转换只能被应用在基础数据之间。
import java.util.Date;
import java.util.Scanner;
/**
* 3.7 输入和输出
* 3.7.1 读取输入
* 1.在nextInt下面不能使用nextLine,不然会直接跳过nextLine。
* 这个和Scanner扫描器特性有关,Scanner扫描器碰到空白符(回车,空格等等)就停止,
* 而nextInt收走数据时,会留下一个空白符“\r”在缓冲区,所以nextLine()方法在扫描的时候碰到空白符“\r”,就停止跳过了
*
*
* 3.7.2 格式化输出
* 1.使用printf的目的就是想得到我们想要计算机输出的值。
*
*
* 3.7.3 文件输入和输出
* 1.读取电脑上的文件,有点像在spring和mybatis中读取xml文件和properties文件
* 2.使用Scanner的Paths.get方法读取文件,PrintWriter对象写入文件。
* 3.暂时使用不到,就没做这个。
*/
public class InputOutputDemo {
public static void main(String[] args) {
// InputDemo();//3.7.1 读取输入
FormatOutputDemo();//3.7.2 格式化输出
}
//3.7.1 读取输入
private static void InputDemo(){
Scanner in = new Scanner(System.in);
System.out.println("请输入名字:");
String name = in.nextLine();
System.out.println("你多大了:");
int age = in.nextInt();//只能输入整型,输入其他的类型无法通过
System.out.println("你想做什么?");
// String todo = in.nextLine();//会直接跳过这个输入
in.nextLine();//将空白符"\r"清除
String todo1 = in.nextLine();
System.out.println("" + name+"," + age+",目的:" + todo1);
System.out.println("你要克服自己的缺点,稳,人不急!");
}
//3.7.2 格式化输出
private static void FormatOutputDemo(){
int x = 100000000/2;
System.out.printf("%o\n",x);
double d = 12900000;
System.out.println(d); // 1.29E7
System.out.printf("%,.0f\n",d);//"%g"=1.29000e+07,,,"%.0f"=12900000
System.out.printf("%tT",new Date());
}
}
import java.util.Arrays;
import java.util.Scanner;
/**
* 3.8 控制流程
* Java使用条件语句(if)和循环结构(for,switch,while)确定控制流程
*
*
* 3.8.1 块(block)作用域
* 1.在块中定义的变量无法在外界使用
* 2.在外界定义的变量可以在块中使用,所以在块中不能定义和外界相同的变量名
*
* 3.8.2 条件语句
* 1.条件语句经常使用块语句,用来圈定范围
* 2.如果有多个if,else选择if的原则是就近原则
* 3.尽量多使用花括号,让语句更清晰
*
* 3.8.3 循环
* 1.简单的使用了一些for循环和while循环
*/
public class ControlFlowDemo {
public static void main(String[] args) {
// BlockDemo();//3.8.1 块(block)作用域
// IfDemo();//3.8.2 条件语句
//3.8.3 循环
// ForDemo();// for循环
WhileDemo();//循环
}
private static void BlockDemo(){
int n =5;
{
int m = 5;
// String n = 5.0;
// int n = 5;//但是在外面定义值可在块中使用,所以里面无法定义与外界相同的变量名
int sum = m + n;
System.out.println(sum);
}
// int sum = m + n ;//报错,找不到m。说明m只能在花括号中起作用。
}
private static void IfDemo(){
Scanner in = new Scanner(System.in);
System.out.println("请输入你的年龄:");
int f = in.nextInt();
if(f <= 22)
{
System.out.println("好好学习,天天向上!");
}
else if (f > 22 && f <30)
{
System.out.println("Don't Repeat Yourself");
}
else if (f >= 30 && f <40){
System.out.println("三十而立!");
}
else if(f >= 40 && f < 50){
System.out.println("四十不惑!");
}
else if(f >= 50){
System.out.println("五十知天命,随心所欲不逾矩!");
}
}
//3.8.3 for循环
private static void ForDemo(){
Scanner in = new Scanner(System.in);
System.out.println("请输入数组的长度:");
int s = in.nextInt();
int[] numbers = new int[s];
for (int i = 0; i < numbers.length-1;i++)
{
numbers[i] = i ;
}
System.out.println(Arrays.toString(numbers));//[0, 1, 2, 3, 4, 5, 6, 7, 8, 0],最后一个零是没有赋值
}
//3.8.3 while循环
private static void WhileDemo(){
int n = 1;
int sum = 0;
while (n > 0){//死循环
sum = sum + n;
n++;
}
System.out.println(sum);
System.out.println(n);//-2147483648,这是int的最大值
}
}
import java.util.Arrays;
/**
* 3.10 数组
* 1.数组是一种数据结构,用来存储同一类型值的集合。数组和String一样,都是属于引用类型。
* 2.数组各个的默认值:int=0; double=0.0; boolean=false String=null;
* 3.可以使用length方法获取数组的大小,数组的大小无法改变,只能改变数组中的数组元素。
* 4.数组索引从0开始,例如,50个元素的数组,索引范围是0~49.
*
*
* 3.10.1 for each 循环
* 1.for each可以遍历数组中的每个元素,不需要使用下标值。
* 2.在for each中,可以修改数组中的值,但是在运行中无法让数组指向新对象,而for循环可以。
* 3.Arrays.toString()可以打印数组中所以的值。
*
*
* 3.10.2 数组初始化以及匿名数组
* 1.在3.10 数组 中 实现了
* 2.数组长度允许为 0 ;数组长度null和 0 是不同的,
*
* 3.10.3 数组拷贝
* 1.int[] cp = ln;这种是让两个数组指向同一个数组对象。
* 2.int[] cp1 = Arrays.copyOf(ln,ln.length);这种是创建一个新数组对象,将旧数组的值赋给新数组。
* 3.Arrays.copyOf(cp1,2 * cp1.length),可以通过这种方法增加数组的长度。
* 如果数组元素是int,新增的元素是0,同理 boolean是false , double是 0.0 String是null
*
* 3.10.1 命令行参数
* 1.命令行在Run中的Edit的Proaram arguments中设置输入。
*
* 3.10.5 数组排序
*
*
*/
public class ArrayTest {
public static void main(String[] args) {
// ArrayDemo();//3.10 数组
// ForEachDemo();//3.10.1 for each 循环
// ArrayCopyDemo();//3.10.3 数组拷贝
// MessageDemo();//3.10.1 命令行参数
// ErgodicDemo();//遍历数组
ArraySort();//数组排序
// //使用String[] args接收在命令行输入的参数。
// if (args[0].equals("-h"))
// System.out.print("Hello,");
// else if (args[0].equals("-g"))
// System.out.print("Goodbye,");
// //打印其他命令行参数
// for (int i = 1; i< args.length; i++)
// System.out.print("" + args[i]);
// System.out.print("!");
// //Hello,cruelworld!
// System.out.println(Arrays.toString(args));//[-h, cruel, world]
}
private static void ArrayDemo(){
int[] c;//没有初始化数组,给数组赋值
int[] a = new int[50];
for(int i = 0; i < 50;i++){
a[i] = i;
// System.out.println(a[i]);//0~49
}
// System.out.println(a[50]);//报错,不能超出索引定义的范围。
double[] d = new double[2];//0.0
boolean[] b = new boolean[2];//false
String[] names = new String[10];//null
System.out.println(names[1]);
String[] n = new String[0];
System.out.println(n.length);//0
System.out.println(Arrays.toString(n));//[]
// for (int i = 0; i < a.length; i++){
// System.out.println(a[i]);
// }
//简化
// int[] ns = new int[] { 68, 79, 91, 85, 62 };
int[] ns = { 68, 79, 91, 85, 62 };//最终简化样式
System.out.println(ns.length); // 编译器自动推算数组大小为5
ns = new int[] { 1, 2, 3 };
System.out.println(ns.length); // 3
//字符串指向的是LS对象,shops[1]之前是指向LS对象,现在指向cat对象,但原来的LS对象没有任何改变,只是新建了一个字符串对象cat.
String[] shops = {"WJ","LS","YL"};
String S = shops[1];
shops[1] = "cat";
System.out.println(S);// LS
System.out.println(shops[1]);//cat
}
//3.10.1 for each 循环
private static void ForEachDemo(){
int[] ns ={ 1, 4 ,9 ,16 ,25};
for(int i=0;i< ns.length; i++){
// ns[1] = 10;
ns = new int[] { 1, 2, 3 };//
System.out.println("i="+i+ ", ns[i]" + ns[i]);//1, 2, 3
}
System.out.println(ns[1]);
// //循环ns的每一个元素
// for (int n : ns) {
// ns[1] = 10;//可以修改数组的值
// // ns = new int[] { 1, 2, 3 };//无法在for each运行中让数组指向新对象,只能在遍历之后让数组指向新对象
// System.out.println(n);//1, 4 ,9 ,16 ,25
// }
System.out.println(ns[1]);//10,可以修改数组的值
System.out.println(Arrays.toString(ns));//[1, 2, 3]
}
//3.10.3 数组拷贝
private static void ArrayCopyDemo(){
//两个数组引用的是同一个数组对象
int[] ln = { 1, 3, 5, 7, 9 };
int[] cp = ln;
cp[4] = 10;
System.out.println(Arrays.toString(cp));//[1, 3, 5, 7, 10]
System.out.println(Arrays.toString(ln));//[1, 3, 5, 7, 10]
//创建一个新数组,将旧数组的值赋给新数组。
int[] cp1 = Arrays.copyOf(ln,ln.length);
cp1[4] = 23;
System.out.println(Arrays.toString(cp1));//[1, 3, 5, 7, 23]
System.out.println(Arrays.toString(ln));//[1, 3, 5, 7, 10]
int[] cp2 = Arrays.copyOf(cp1,2 * cp1.length);
System.out.println(cp2.length);//10
}
//遍历数组
private static void ErgodicDemo(){
int[] ds = { 1, 4, 9, 16, 25 };
// 倒序打印数组元素:
// for (int i = 4;0 <= i && i < ds.length ; i--) {
// System.out.println(ds[i]);
// }
for (int i = ds.length-1;i>= 0 ; i--) {
System.out.println(ds[i]);
}
}
//数组排序
private static void ArraySort(){
int[] st = { 45, 34 , 67 , 78 , 94 , 46 };
Arrays.sort(st);
System.out.println(Arrays.toString(st));//[34, 45, 46, 67, 78, 94]
int r = (int)(Math.random() * st.length);
System.out.println(r);
}
}
明天计划的事情:
上午做完循环和数组剩下的内容+复习。下午和晚上对象和类
遇到的问题:
java中Scanner类nextInt之后用nextLine无法读取输入
Java判断条件(if( 3<= i<= 5 ))出错Operator cannot be applied to boolean,int
已解决
收获:以上
评论