发表于: 2020-11-25 23:45:24
1 1269
今天完成的事情:
数组和控制流程复习
控制流程新增的内容
import java.math.BigInteger;
import java.util.Arrays;
import java.util.Scanner;
/**
* 3.8 控制流程
* Java使用条件语句(if)和循环结构(for,switch,while)确定控制流程
*
*
* 3.8.2 条件语句
* 1.条件语句经常使用块语句,用来圈定范围
* 2.如果有多个if,else选择if的原则是就近原则
* 3.尽量多使用花括号,让语句更清晰
* 4.if(30 <=f <40)//报错,错误的原因是 <和 <=处于同一优先级,所以会先从左执行,
* 假如输入32,左边就判断为false,而false < 40(boolean < int)不能判断,这个就是报错的原因。
*
* 3.8.3 循环
* 1.while循环,是先执行条件语句,判断是否参加循环,当为false时,会出现不执行就直接输出的情况
* 2.如果想让循环体至少执行一次,可以用do/while,执行语句在前,条件语句在后。
*
* 1.for循环如果在外界定义的 i ,在for( ; i < 100 ; i++),在内部就不用重新定义 i 了;会产生 冗余,但是需要加上 ";"
* 2. for循环和while循环一样,当判断条件为false时,会跳过执行语句不执行
* 3.for循环相比于while循环而言,显得更简洁面了,所参数直接在for(xxx; xxx; xxx;)中定义,非常清晰
* 注意:如果在for循环内部定义了 i ,在循环体之外就无法使用了
*
* 1.switch是多重选择,和if很相像,但是判断字符串比if容易,不需要输入f.equals(f1)方法。
* 2.switch必须在case下面加break,不然会执行下面case的语句。
* 3.default相当于if中的else,default也要加上break
* 注意:可在idea中设置不加上break就报错的选项。
*
* 3.8.6 中断控制流程语句
* 1.break是跳过当前循环,continue是跳过本次循环。
* 2.break和continue都和if常常一起使用。
*
* 3.9 大数值
* 1.BigInteger可以实现任意精度的整数计算,但是需要用到特殊的加减乘除方法。
*/
public class ControlFlowDemo {
public static void main(String[] args) {
// IfDemo();//3.8.2 条件语句
//3.8.3 循环
// ForDemo();// for循环
// WhileDemo();//while循环
// SwitchDemo();//switch多种选择
// InterruptDemo();// 3.8.6 中断控制流程语句
//大数值运算
BigInteger a = BigInteger.valueOf(490);
BigInteger b = BigInteger.valueOf(60);
System.out.println(a);
// BigInteger c = a + b;//报错,运算符“ +”不能应用于“ java.math.BigInteger”,“ java.math.BigInteger”
BigInteger c = a.add(b);// c = a+b
BigInteger d = a.multiply(c).divide(b);// d = a * a / b
System.out.println(d);
}
//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],最后一个零是没有赋值
//从n个数字中抽取K个数字的概率
System.out.println("注意n比K要大");
Scanner in = new Scanner(System.in);
System.out.println("请输入n:");
int n = in.nextInt();
System.out.println("请输入k:");
int k = in.nextInt();
/*
* 计算公式 n*(n-1)*(n-2)* ...*(n-k+1)/(1*2*3*...*k)
*/
int gl = 1;
for (int i = 1; i <= k;i++)
{
gl = gl * (n - i +1)/i;
}
System.out.println(gl);//
}
//3.8.3 while循环
private static void WhileDemo(){
int n = 101;
int sum = 0;
//while循环
while (n > 100){//死循环
sum = sum + n;
n++;
}
//do/while循环
// do{
// sum = sum + n;
// n++;
// }while (n <= 100);
// for( ; n <= 100;n++){
// sum = sum + n;
// }
System.out.println(sum);
System.out.println(n);//-2147483648,这是int的最大值
}
private static void SwitchDemo(){
Scanner in = new Scanner(System.in);
System.out.println("请输入当前的时刻(上午,下午,晚上)");
String f = in.nextLine();
switch (f){
case "上午":
System.out.println("早安");
break;
case "下午":
System.out.println("午安");
break;
case "晚上":
System.out.println("晚安");
break;
default:
System.out.println("请输入正确的时刻!");
break;
}
System.out.println(",您好!");
// if (f.equals("上午"))
// {
// System.out.println("早安");
// }
// else if (f.equals("下午")){
// System.out.println("午安");
// }
// else if (f.equals("晚上")){
// System.out.println("晚安");
// }
// else {
// System.out.println("请输入正确的时刻!");
// }
}
// 3.8.6 中断控制流程语句
private static void InterruptDemo(){
int sum = 0;
// for (int j = 1; j <= 10; j++) {
// for (int i = 0; ; i++) {
// sum = sum + i;
// if (i == 100) {
// break;
//
// }
//
// }
// System.out.println("i == 100,break");//会输出两次,因为break只能跳过当前循环
// if ( j == 2){
// break;
//
// }
// }
// System.out.println("j == 2,break");//输出一次
// System.out.println(sum);//10100
for (int m =0; m<=10;m++){
System.out.println("begin m = "+m);
if( m % 2== 0){
continue;
}
sum = sum + m;
System.out.println("eng m = "+m);
}
System.out.println(sum);//25
}
}
数组
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.5.1 遍历数组
* 1.遍历数组可以使用for循环,for循环可以访问数组索引,for each循环直接迭代每个数组元素,但无法获取索引;
* 2.使用Arrays.toString()可以快速获取数组内容。
*
* 3.10.5 数组排序
* 1.可直接调用Arrays.sort进行排序。
* 2.对于整型而言,调用这个方法之后,变量st指向的 数组内容已经被改变了,
* 3.对于字符串而言,调用这个方法之后,原来的3个字符串在内存中均没有任何变化,但是cs数组的每个元素指向变化了。
* 注意:字符串和数组都是引用类型
*
*
* 3.10.6 多维数组
* 1.二维数组就是数组的数组;
* 2.多维数组的每个数组元素长度都不要求相同;
* 3.打印多维数组可以使用Arrays.deepToString();
* 4.访问二维数组的一个元素使用array[row][col]。
*
*/
public class ArrayTest {
public static void main(String[] args) {
// ErgodicDemo();//遍历数组
// ArraySort();//数组排序
MultidimensionalDemo();//多维数组
// //使用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 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]);
// }
for (int i = 0; i <ds.length; i++){
int d = ds[i];
System.out.println(d);
}
}
//数组排序
private static void ArraySort(){
//冒泡排序
// int[] mp = { 45, 34 , 67 , 78 , 94 , 46 };
// for (int i = 0; i< mp.length;i++){
// for (int j = 0; j < mp.length -i-1;j++){
// if (mp[j] > mp[j+1]) {
// int tmp = mp[j+1];
// mp[j+1] = mp[j];
// mp[j] = tmp;
//
// }
//
// }
//
// }
//
//
// System.out.println(mp[0]);//34
// System.out.println(mp[1]);//45
// System.out.println(Arrays.toString(mp));
int[] st = { 45, 34 , 67 , 78 , 94 , 46 };
Arrays.sort(st);
System.out.println(Arrays.toString(st));//[34, 45, 46, 67, 78, 94]
System.out.println(st[0]);//34
System.out.println(st[1]);//45
double f = Math.random();//Math.random()方法:随机返回0~1(不包括1的浮点数)
System.out.println(f);
int r = (int)(Math.random() * st.length);//取值范围0~5,不会出现6
System.out.println(r);
String[] cs = { "D", "Z", "A" };//[A, D, Z]
Arrays.sort(cs);
System.out.println(Arrays.toString(cs));
}
//多维数组
private static void MultidimensionalDemo(){
int[] [] ew = {
{0,1,2},//ew[0]
{4,5,6},//ew[1]
{7,8,9},//ew[2]
{10,11,12}//ew[3]
};
System.out.println(ew.length);//4,二维数组的长度是竖着计算
System.out.println(ew[2][2]);//9,访问数组的一个元素
System.out.println(Arrays.deepToString(ew));//[[0, 1, 2], [4, 5, 6], [7, 8, 9], [10, 11, 12]]
//使用foreach打印二维数组
for (int[] arr : ew) {
for (int n : arr) {
System.out.print(n);
System.out.print(',');
}
System.out.println();
}
//将二维数组的值赋给一维数组
int[] arr = ew[1];
System.out.println(arr.length);//3
System.out.println(Arrays.toString(arr));//[4, 5, 6]
}
}
明天计划的事情:
面向对象
遇到的问题:
1.在冒泡排序,n*(n-1)*(n-2)* ...*(n-k+1)/(1*2*3*...*k),等等一些数学公式上浪费了太多时间。
2.弄错了重点在那里。重点应该找出如何解决问题办法?比如师兄所说,碰到不知为什么输出这个参数,用System.out.println(xxx);打印一下就知道了。
3.碰到问题不要知道解决办法就行了,需要具体知道它是这么错的,错的地方在那里,用到了什么知识点。碰到问题总是心急了
比如下面这个例子:
if(30 <=f <40)//报错(Operator '<' cannot be applied to 'boolean', 'int'),找到 '<' ,在对比这个符号两边的值, 错误的原因是 <和 <=处于同一优先级,所以会先从左执行,
* 假如输入32,左边就判断为false,而false < 40(boolean < int)不能判断,这个就是报错的原因。
4.做了一天,发现也没做成什么。觉得需要在11点,15:30点,20:30务必要做一下过去完成任务的总结:1.找到时间都花在什么上面去了,是不是花到目前不需要了解的知识上去了。2.自己接下来做什么。需要细分一下。
5.核心技术中面向对象大多数都是书面类容,明天自己编写个基础代码。
收获:1.学以致用,现在可以用到(Scanner in = new Scanner(System.in);),多用学到的新内容。
2.以上
评论