掌握debug的使用
/*
掌握debug的使用:
1.断点:
使用:在哪里点(在行号的后面),点哪里(1.你想在哪里看程序执行 2.出现bug的地方)
2.怎么运行代码,查看让程序在断点处停止,手动让程序执行
右键debug运行
3.step over按钮
1.只在本方法中运行,不会进入被调用的方法中 被调用的方法在程序后台执行
2.如果被调用方法中有断点,会在断点处停止
step into 按钮
只要有自定义的方法的调用,就会进入被调用方法中
Force step into 按钮
强制进入 只要方法的调用就进入到被调用的方法中
step out
从被调用方法中出来 到调用处
Resume program :
到下一个断点处
Stop 按钮
停止程序运行
view breakpoints:
断点管理的按钮:显示当前模块中所有断点,变参与管理
mute Breakpoints:
屏蔽所有断点使用
*/
public class Demo01 {
public static void main(String[] args) {
int a = 10;
int b = 20;
//int x = 1/0; //ArithmeticException
int c = a+b;
System.out.println(c);
getSum();
System.out.println("main方法结束");
}
private static void getSum() {
int x = 10;
int y = 20;
int z = x+y;
System.out.println(z);
}
}
进制
进制划分
/*
十进制:Java中,数值默认都是10进制,不需要加任何修饰。
二进制:数值前面以0b开头,b大小写都可以。
八进制:数值前面以0开头。
十六进制:数值前面以0x开头,x大小写都可以。
注意:以上内容是jdk7版本之后才被支持。
*/
public class Demo01 {
public static void main(String[] args) {
System.out.println(111);
System.out.println(0b111);
System.out.println(0111);
System.out.println(0x111);
}
}
任意进制到十进制的转换
/*
总结:任意进制到十进制的转换
公式:系数 * 基数的权次幂 相加
系数:每一【位】上的数
基数:几进制,就是几
权:从数值的右侧,以0开始,逐个+1增加
*/
public class Demo02 {
public static void main(String[] args) {
}
}
十进制到任意进制的转换
/*
结论:十进制到任意进制的转换
公式:除基取余
使用源数据,不断的除以基数(几进制,基数就是几)得到余数,直到商为0,再将余数倒着拼起来即可。
*/
public class Demo03 {
}
快速进制转换法
/*
快速进制转换法:
8421码又称BCD码,是BCD代码中最常用的一种
BCD: (Binary-Coded Decimal) 二进制码十进制数
在这种编码方式中,每一位二进制值的1都是代表一个固定数值,把每一位的1代表的十进制数加起来得到的结果就是它所代表的十进制数。
*/
public class Demo04 {
}
原码反码补码
注意:计算机中的数据,都是以二进制补码的形式在运算,而补码则是通过反码和原码推算出来的。
原码(可直观看出数据大小)
就是二进制定点表示法,即最高位为符号位,【0】表示正,【1】表示负,其余位表示数值的大小。
通过一个字节表示+7和-7,代码:byte b1 = 7; byte b2 = -7;
一个字节等于8个比特位,也就是8个二进制位
0(符号位) 0000111
1(符号位) 000011
反码
正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。
补码(数据以该状态进行运算)
正数的补码与其原码相同;负数的补码是在其反码的末位加1。
正数的原反补都是相同的
负数的【反码】,是根据【原码】取反(0变1,1变0)得到的 (符号位不变)
负数的【补码】,是根据【反码】的末尾+1,得到的
位运算
位运算的练习
/*
&:见0则0
|:见1则1
~:取反 0变1 1变0 包括符号位
^:相同为0 不同为1
<<:左移几位相等乘以2的几次幂 右边补齐0
>>:右移几位相等除以2的几次幂 根据符号位,补齐左边
>>>:无符号右移,无论最符号位是0还是1,都补0
*/
public class Demo01 {
public static void main(String[] args) {
//&:见0则0
System.out.println(5&3);
//|:见1则1
System.out.println(5|3);
//~:取反 0变1 1变0 包括符号位
System.out.println(~5);
//^:相同为0 不同为1
System.out.println(5^3);
//<<:左移几位相等乘以2的几次幂 右边补齐0
System.out.println(5<<1);
System.out.println(5<<2);
System.out.println(5<<3);
//>>:右移几位相等除以2的几次幂 根据符号位,补齐左边
System.out.println(40>>1);
System.out.println(40>>2);
System.out.println(40>>3);
//>>>:无符号右移,无论最符号位是0还是1,都补0
System.out.println(40>>>1);
System.out.println(40>>>2);
System.out.println(40>>>3);
System.out.println(-8>>>1);
}
}
异或运算的特点
/*
异或运算的特点
一个数,被另外一个数,异或两次,该数本身不变。
*/
public class Demo02 {
public static void main(String[] args) {
System.out.println(9^8^8);//9
System.out.println(8^9^8);//9
System.out.println(8^8^9);//9
System.out.println(7^8^9);//6
}
}
数据交换
/*
需求:已知两个整数变量a = 10,b = 20,使用程序时间这两个变量的数据交换
最终输出a = 20,b = 10;
不允许使用三方变量
*/
public class Demo03数据交换 {
public static void main(String[] args) {
int a = 10;
int b = 20;
//changeNum(a, b);
//不允许使用三方变量
a = a^b;//10^20
b = a^b;//10^20^20 == 10
a = a^b;//10^20^10 == 20
System.out.println(a);
System.out.println(b);
}
//借用第三方变量 实现数据交换
private static void changeNum(int a, int b) {
int temp = a;
a = b;
b = temp;
System.out.println(a);
System.out.println(b);
}
}
数组元素反转
/*
需求:已知一个数组 arr = {19, 28, 37, 46, 50}; 用程序实现把数组中的元素值交换,
交换后的数组 arr = {50, 46, 37, 28, 19}; 并在控制台输出交换后的数组元素。
*/
public class Demo04数组元素反转 {
public static void main(String[] args) {
int[] arr = {19, 28, 37, 46, 50};
//使用for循环
for (int start = 0, end = arr.length - 1; start < end; start++, end--) {
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
}
//打印数组
System.out.println(Arrays.toString(arr));
}
}
二维数组
定位
二维数组也是一种容器,不同于一维数组,该容器存储的都是一维数组容器
格式1:数据类型 [ ] [ ] 变量名;
范例:int [ ] [ ] arr;
格式2:数据类型 变量名[ ] [ ];
格式3:数据类型[ ] 变量名[ ];
范例:int arr[ ] [ ];
范例:int[ ] arr[ ];
动态初始化
格式:数据类型 [ ] [ ] 变量名 = new 数据类型[ m ] [ n ];
m表示这个二维数组,可以存放多少个一维数组
n表示每一个一维数组,可以存放多少个元素
范例:int [ ] [ ] arr = new int [ 2 ][ 3 ];
该数组可以存放2个一维数组,每个一维数组中可以存放3个int类型元素
二维数组静态初始化
格式:数据类型 [ ] [ ] 变量名 = new 数据类型[ ] [ ] { {元素1,元素2}, {元素1, 元素2} };
范例:int [ ] [ ] arr = new int [ ][ ] { {11,22} , {33,44} };
简化格式:数据类型 [ ] [ ] 变量名 = { {元素1,元素2}, {元素1, 元素2} };
范例:int [ ] [ ] arr = { {11,22} , {33,44} };
二维数组遍历
/*
已知一个二维数组 arr = { {11 , 22 , 33} , {33 , 44 , 55} }; 遍历该数组,取出所有元素并打印
遍历二维数组要使用两层for循环,外层for循环 获取二维数组中的每一个一维数组,内层for循环获取每一个一维数组中的元素
*/
public class Demo03 {
public static void main(String[] args) {
int[][] arr = {{11, 22, 33}, {33, 44, 55}};
for (int i = 0; i < arr.length; i++) {
// System.out.println(arr[i]);
int [] brr = arr[i];
for (int j = 0; j < brr.length; j++) {
System.out.println(brr[j]);
}
}
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
System.out.println(arr[i][j]);
}
}
}
}
二维数组求和
/*
公司年销售额求和:
某公司季度和月份统计的数据如下:单位(万元)
第一季度:22,66,44
第二季度:77,33,88
第三季度:25,45,65
第四季度:11,66,99
*/
public class Demo04公司年销售额求和 {
public static void main(String[] args) {
int [] season1 = {22,66,44};
int [] season2 = {77,33,88};
int [] season3 = {25,45,65};
int [] season4 = {11,66,99};
int [][] yearSales = {season1,season2,season3,season4};
int [][] totalSales = {{22,66,44},{77,33,88},{25,45,65},{11,66,99}};
//1.定义求和变量
int sum = 0;
//2.遍历二维数组获取每一个一维数组
for (int i = 0; i < yearSales.length; i++) {
int [] seasonSales = yearSales[i];
//3.遍历每一个一维数组,获取每个月的销售额
for (int j = 0; j < seasonSales.length; j++) {
//4.和求和变量累加
sum+=seasonSales[j];
}
}
//5.打印结果
System.out.println("公司年销售额:"+sum+"万元!");
}
}
求最大值
/*
公司月最高销售额:
某公司季度和月份统计的数据如下:单位(万元)
第一季度:22,66,44
第二季度:77,33,88
第三季度:25,45,65
第四季度:11,66,99
*/
public class Demo05公司月最高销售额 {
public static void main(String[] args) {
int [][] totalSales = {{22,66,44},{77,33,88},{25,45,65},{11,66,99}};
//1.定义最高销售额 默认第一季度的第一个月
int max = totalSales[0][0];
//2.遍历年销售额数据 totalSales 二维数组
for (int i = 0; i < totalSales.length; i++) {
//遍历每个季度的销售额
for (int j = 0; j < totalSales[i].length; j++) {
//比较
if (totalSales[i][j]>max){
//更新最大值
max = totalSales[i][j];
}
}
}
//3.打印最大值
System.out.println("max = "+max);
}
}
练习 机票
import java.util.Scanner;
/*
需求:
机票价格按照淡季旺季、头等舱和经济舱收费、输入机票原价、月份和头等舱或经济舱。
按照如下规则计算机票价格:旺季(5-10月)头等舱9折,经济舱8.5折,淡季(11月到来年4月)头等舱7折,经济舱6.5折。
//1.键盘录入
舱位 月份 原价
//2.判断舱位
头等舱 淡旺季 输入机票价格 以及折扣
经济舱 淡旺季 输入机票价格 以及折扣
*/
public class Demo01买飞机票 {
public static void main(String[] args) {
//键盘录入
Scanner scanner = new Scanner(System.in);
System.out.println("请输入您选择舱位:");
String cw = scanner.nextLine();
//使用分支语句判断
switch (cw) {
case "头等舱":
System.out.println("请输入您乘机的月份:");
int month = scanner.nextInt();
System.out.println("请输入您机票原价:");
double price = scanner.nextDouble();
if (month >= 5 && month <= 10) {//旺季
price *= 0.9;
} else if (month == 11 || month == 12 || month >= 1 && month <= 4) {//淡季
price *= 0.7;
} else {
System.out.println("您输入的月份有误!");
}
System.out.println("您的机票价格:"+price+"元");
break;
case "经济舱":
System.out.println("请输入您乘机的月份:");
int month1 = scanner.nextInt();
System.out.println("请输入您机票原价:");
double price1 = scanner.nextDouble();
if (month1 >= 5 && month1 <= 10) {//旺季
price1*= 0.85;
}else if (month1 == 11 || month1 == 12 || month1 >= 1 && month1 <= 4){//淡季
price1*= 0.65;
}else {
System.out.println("您输入的月份有误!");
}
System.out.println("您的机票价格:"+price1+"元");
break;
default:
System.out.println("您选择舱位不存在!");
}
}
}
练习 求质数
/*
求101到200之间所有质数
质数:
约数只有1和他本身 2 3 5 7 11 13 17 19 23 29....
*/
public class Demo02求质数 {
public static void main(String[] args) {
//外层循环取到101到200之间的所有的数字
for (int num = 101; num <= 200; num++) {
//定义第三变量 默认数字是质数 第三方变量值是true
boolean flag = true;
for (int i = 2; i < num/2; i++) {
if (num%i == 0){
flag = false;
break;
}
}
if (flag){
System.out.println(num+"是质数");
}else {
System.out.println(num+"不是质数");
}
}
}
}