JAVA学习笔记
java 编程思想
数据结构
JQUERY
javascript
数据结构
Java 编程思想
SQL 语句
0301
HelloWorld与数值类型
public class Text1{
public static void main(String[] args){
byte b = 1;// 占用1个字节
boolean bool = true;//占用不确定
char c = 'a';//占用2个字节
char ch = 98;
short s = 10;//占用2个字节
int i = 1;//占用4个字节
float f = 2F;//占用4个字节
long l = 19L;//占用8个字节
double d = 10.83948D;//占用8个字节
System.out.println(c); // line 换行的意思
System.out.println(ch);
System.out.println("hello world!!!");
}
}
*int转换成float/double时,可能丢失精度
*货币不建议使用float/double
*byte/int/short在计算时都会转自动转换成int,必须用int接受,需要强制类型转换
s1 = (short)(s1+b)
s1+=1 不会出错
*const和goto 保留关键字,不能用也不能定义变量
*System.out.print("\\");两个杠才能输出一个“/”
*System.out.print("\n\"如何输出一个双引号\"");两次转义才能输出一个双引号
*\r 回车 \n换行
0303
输入整数和输入字符串
Scanner input = new Scanner(System.in);
System.out.println("请输入一个整数");
int x1 = input.nextInt();
System.out.println(x1);
Scanner input = new Scanner(System.in);
System.out.println("请输入一个字符串");
String s1= input.next();
System.out.println(s1);
*异或 a^b 两边不同为false,异或异或,异就对了
*&& 短路与
*|| 短路或
&和&&的区别
&
逻辑运算:分别计算表达式两边的结果,再做&运算
位运算:表示按位与
&&
短路与运算,先计算左边表达式,如果结果是faalse,那么不用计算右边的表达式,直接返回false,如果左边的表达式结果是true,再计算右边的表达式,该方法效率最高
||同上
/**
通过键盘输入一个圆柱体的高和底面半径,求圆柱的体积,并显示4
*/
import java.util.Scanner;
public class Test7{
public static void main(String[] args){
Scanner input = new Scanner(System.in);
System.out.println("请输入圆柱体的高:");
int h = input.nextInt();
System.out.println("请输入圆柱体的底面半径:");
int r = input.nextInt();
double result = 3.14*r*r*h;
System.out.println("圆柱体的体积是:"+result);
}
}
/**
定义一个五位数,并求各个位上的和
*/
public class Test8{
public static void main(String[] args){
int num = 12345;
int w = num/10000;
int q = num/1000%10;
int b = num/100%10;
int s = num/10%10;
int g = num%10;
System.out.println(w+q+b+s+g);
}
}
/**
根据天数,计算周数和剩余的天数
*/
import java.util.Scanner;
public class Test9{
public static void main(String[] args){5435
Scanner input = new Scanner(System.in);
System.out.println("请输入天数:");
int day = input.nextInt();
System.out.println("周数是:"+(day/7));
System.out.println("剩余的天数是:"+(day%7));
}
}
*~按位取反
*^按位异或
*a<<b,二进制形式的a向左移动b位,最低位补0
*a>>b带符号右移,最高位补原来的符号位
*a>>>b无符号右移,最高位直接补0
以最快的速度计算8*4
0000 1000 8
0010 0000 32
8<<2
*括号不会先运算
*不通过第三个变量交换两个数
(1)通过表达式计算a=a+b-(b=a)
(2)通过加减计算
a=a+b
b=a-b
a=a-b
(3)通过异或计算a!= b
a=a^b
b=a^b
a=a^b
(4)通过乘除运算
/**
输入一个成绩判断及格和挂科
*/
import java.util.Scanner;
public class Test9{
public static void main(String[] args){
Scanner input = new Scanner(System.in);
System.out.println("请输入一个成绩:");
int score = input.nextInt();
//String 表示一个字符串类型,不是基本数据类型
String s = score>=60?"及格":"挂科";
System.out.println(s);
}
}
/**
输入一个字符,判断是大写还是小写
*/
import java.util.Scanner;
public class Test9{
public static void main(String[] args){
Scanner input = new Scanner(System.in);
System.out.println("请输入一个字符:");
char c = input.next().charAt(0);
if(c>=65 && c<=90){
System.out.println("大写");
}else{
System.out.println("小写");
}
}
}
/**
判断平年和闰年
*/
import java.util.Scanner;
public class Test9{
public static void main(String[] args){
Scanner input = new Scanner(System.in);
System.out.println("请输入年份:");
int year = input.nextInt();
if((year%4==0 && year%100!=0)|| year%400==0){
System.out.println("是润年");
}else{
System.out.println("是平年");
}
}
}
/**
分数变等级
*/
import java.util.Scanner;
public class Test9{
public static void main(String[] args){
Scanner input = new Scanner(System.in);
System.out.println("请输入成绩:");
int score = input.nextInt();
if(score>=90){
System.out.println("A");
}else if(score<90 && score>=80){
System.out.println("B");
}else if(score<80 && score>=70){
System.out.println("C");
}else if(score<70 && score>=60){
System.out.println("D");
}else if(score<60){
System.out.println("不及格");
}
}
}
/**
输入两个数,输出他们的大小关系是大于小于还是等于
*/
import java.util.Scanner;
public class Test9{
public static void main(String[] args){
Scanner input = new Scanner(System.in);
System.out.println("请输入第一个数:");
int num1 = input.nextInt();
System.out.println("请输入第二个数:");
int num2 = input.nextInt();
if(num1>num2){
System.out.println("第一个数大于第二个数");
}else if(num1<num2){
System.out.println("第一个数小于第二个数");
}else{
System.out.println("这两个数相等");
}
}
}
/**
根据天气状况选择外出或在家,外出是逛街还是逛公园,在家是看电影还是玩游戏
*/
import java.util.Scanner;
public class Test9{
public static void main(String[] args){
Scanner input = new Scanner(System.in);
System.out.println("今年天气如何(1好,2霾)");
int weather = input.nextInt();
if(weather==1){
System.out.println("今天天气太好了,我是逛街还是逛公园呢?(1逛街,2逛公园)");
int flag = input.nextInt();
if(flag==1){
System.out.println("陪女票逛街");
}else if(flag==2){
System.out.println("去公园");
}
}else if(weather==2){
System.out.println("今天天气不好,在家看电影还是玩游戏?(1看电影,2玩游戏)");
int flag = input.nextInt();
if(flag==1){
System.out.println("陪女票看电影");
}else if(flag==2){
System.out.println("背着女票玩游戏");
}
}
}
}
/**
输入数字变成星期
*/
import java.util.Scanner;
public class Test9{
public static void main(String[] args){
Scanner input = new Scanner(System.in);
System.out.println("今天星期几?");
int day = input.nextInt();
//swith 括号后的表达式返回值必须是int/char/short/byte/String/枚举
switch(day){
case 1:
System.out.println("星期一");
break;
case 2:
System.out.println("星期二");
break;
case 3:
System.out.println("星期三");
break;
case 4:
System.out.println("星期四");
break;
case 5:
System.out.println("星期五");
break;
case 6:
System.out.println("星期六");
break;
case 7:
System.out.println("星期日");
break;
default: //可以省略
System.out.println("请回火星");
break;
}
}
}
*case 中声明的变量作用域为整个switch,如果给case加了括号,就只能在声明的case 中使用
*在实现分支判断时,一个好的习惯是把匹配成功率高的放在前面,这样可以提高性能
*在表达式中判断时,尽量用确定的值去跟不确定的值判断if(10==x)
*java7之前,编译时switch把字符串转换成字符串的哈希值(整数)作为switch语句表达式的值
/**
计算1~100之间所有整数之和
*/
public class Test9{
public static void main(String[] args){
int num = 0;
int i = 1;
while(i<=100){
num+=i;
i++;
}
System.out.println(num);
}
}
/**
计算10的阶乘
*/
public class Test9{
public static void main(String[] args){
int num = 1;
int i = 1;
while(i<=10){
num*=i;
i++;
}
System.out.println(num);
}
}
/**
打印100以内所有的奇数、偶数、3的倍数
*/
public class Test9{
public static void main(String[] args){
int i = 1;
while(i<100){
if(i%2==0){
System.out.println("偶数:"+i);
}else {
System.out.println("奇数:"+i);
}
if(i%3==0){
System.out.println("3的倍数:"+i);
}
i++;
}
}
}
/**
逆序输出10~0
*/
public class Test9{
public static void main(String[] args){
int i = 10;
do{
System.out.println(i);
i--; //先循环,再判断,至少执行一次
}while(i>=0);//循环条件,不满足就出来
}
}
/**
计算1!+2!+3!+……+10
*/
public class Test9{
public static void main(String[] args){
int num = 0; //记录总和
int i = 1;
do{
int j = 1;
int jc = 1;
while(j<=i){
jc*=j;
j++;
}
num+=jc;
i++; //先循环,再判断,至少执行一次
}while(i<=10);//循环条件,不满足就出来
System.out.println(num);
}
}
/**
输出斐波那契额数列
*/
public class Test9{
public static void main(String[] args){
int n1 = 1;
int n2 = 1;
int next = 0;
System.out.print(n1+" "+n2+" ");
for(int i = 0;i<8;i++){
next = n1 + n2;;
System.out.print(next+" ");
n1=n2;
n2=next;
}
}
}
/**
打印**三角形
*/
public class Test9{
public static void main(String[] args){
for(int i = 1;i<=5;i++){
for(int j = 1;j<=i;j++){
System.out.print("*");
}
System.out.println();
}
}
}
/**
打印乘法表
*/
public class Test9{
public static void main(String[] args){
for(int i = 1;i<=9;i++){
for(int j = 1;j<=i;j++){
System.out.print(j+"*"+i+"="+(i*j)+"\t");
}
System.out.println();
}
}
}
/**
打印倒三角
*/
public class Test9{
public static void main(String[] args){
for(int i = 1;i<=5;i++){
for(int j = 5;j>0;j--){
if(j<=i){
System.out.print("*");
}else {
System.out.print(" ");
}
}
System.out.println();
}
}
}
/**
打印三角塔
*/
public class Test9{
public static void main(String[] args){
for(int i = 1;i<=5;i++){
for(int j=i;j<=5;j++){
System.out.print(" ");
}
for(int j=1;j<=i*2-1;j++)
System.out.print("*");
System.out.println();
}
}
}
/**
方法
*/
public class Test9{
public static void main(String[] args){
getMenu();//调用一个方法
getMenu();//调用一个方法
getMenu();//调用一个方法
getMenu();//调用一个方法
getMenu();//调用一个方法
}
//public访问权限修饰符(公共的)
//静态修饰符,描述的方法可以直接调用
//void 返回值
//方法名(驼峰命名法,首字母小写,起名要见名知意)
//定义一个方法
public static void getMenu(){
System.out.println("-----菜单-----");
System.out.println("1、宫保鸡丁 22");
System.out.println("2、韭菜鸡蛋 20");
System.out.println("3、红烧狮子头 26");
System.out.println("4、滋补牛尾汤 38");
System.out.println("5、美颜酱猪蹄 38");
}
}
/**
打印任意行的星星
*/
import java.util.Scanner;
public class Test9{
public static void main(String[] args){
Scanner input = new Scanner(System.in);
System.out.println("请输入要打印的行数:");
int num = input.nextInt();
//实参:在调用方法时传入的参数,称为实参
printStar(num);
}
/**
带参数的方法
形参:在方法定义时的参数
*/
public static void printStar(int line){ //line=num
for(int i = 1;i<=line;i++){
for(int j = 1;j<=i;j++){
System.out.print("*");
}
System.out.println();
}
}
}
/**
输入任意年份,用方法判断平年和闰年
*/
import java.util.Scanner;
public class Test9{
public static void main(String[] args){
Scanner input = new Scanner(System.in);
System.out.println("请输入年份:");
int year = input.nextInt();
//杯子接 = 榨汁机(苹果,梨,香蕉)
boolean bool = isRunNian(year);
if(bool){
System.out.println("闰年");
}else{
System.out.println("平年");
}
}
public static boolean isRunNian(int year){ //line=num
if((year%4==0 && year%100!=0 )|| year%400==0){
return true;
}else{
return false;
}
}
}
*方法的重载:overloading method 在类中创建多个方法,他们具有相同的名字,但具有不同定义,返回值不能作为重载的条件
/**
方法的重载
*/
import java.util.Scanner;
public class Test9{
public static void main(String[] args){
float result = add(10,20); //float 就调用第二个方法 int 就调用第一个方法
System.out.println(result);
}
public static int add(int a,int b){
return a+b;
}
public static float add(float a,float b){
return a+b;
}
}
/**
数组的定义及属性
*/
import java.util.Scanner;
public class Test9{
public static void main(String[] args){
//第一种
int [] num = new int[5];
for(int i = 5; i<num.length;i++){
num[i] = i + 1;
}
//第二种
int [] nums2;
nums2 = new int[5];
//第三种
int [] nums3 = new int[]{1,2,3,4,5};
//第四种
int [] nums4 = {1,2,3,4,5,6,7,8,9,5,3,5,6,6,3};
System.out.println("数组的长度是:");
System.out.println(nums4.length); //所有的数组都有一个属性,nums.length,“.”可以读成“的”
}
}
/**
数组的遍历
*/
import java.util.Scanner;
public class Test9{
public static void main(String[] args){
//第一种
int[] scores = {59,75,83,93,100};
int len = scores.length;
System.out.println("数组的长度"+len);
for(int i = 0 ; i<len;i++){
int score = scores [i];
//System.out.println(score);
}
print2(59,75,63,96);
//System.out.println(scores); //对象字符串的表达方式
//第二种 forearch 缺点不能用下标 jdk1.5之后新增的特性
for(int x:scores){
//System.out.println(x);
}
}
public static void print1(int[] x){
int len = x.length;
for(int i =0;i<len;i++){
//System.out.println(x[i]);
}
}
//第三种 可变参数
public static void print2(int k,int...x){//可变参数只能是最后一个,59给了k
int len = x.length;
for(int i =0;i<len;i++){
System.out.println(x[i]);
}
}
}
*空指针异常
*数组下标越界问题
*内存结构,数组是存在堆里的,是引用类型,只存了地址,地址引用了堆里的空间,真正存在堆中,但基本数据类型直接存放在栈中
27 190922
/**
猜数游戏
*/
import java.util.Scanner; //接受键盘输入
public class Text1{
public static void main(String[] args){
int[] nums = {30,17,6,2,22,27};
Scanner input = new Scanner(System.in);
System.out.println("请输入你要猜的数:(50以内)");
int userNum = input.nextInt();
boolean flag = false;
for(int x:nums){
if(userNum==x){
flag = true;
break;
}
}
if(flag){
System.out.println("恭喜你,猜对了");
}else{
System.out.println("没猜对,加油!");
}
}
}
/**
猜数游戏(生成随机数)
*/
import java.util.Random; //生成伪随机数
import java.util.Scanner; //接受键盘输入
public class Text1{
public static void main(String[] args){
int[] nums = new int[5];
int len = nums.length;
Random r = new Random();//创建一个可生成随机数的工具
for(int i=0;i<len;i++){
nums[i] = r.nextInt(50);
}
Scanner input = new Scanner(System.in);
System.out.println("请输入你要猜的数:(50以内)");
int userNum = input.nextInt();
boolean flag = false;
for(int x:nums){
if(userNum==x){
flag = true;
break;
}
}
if(flag){
System.out.println("恭喜你,猜对了");
}else{
System.out.println("没猜对,加油!");
}
}
}
/**
打印正三角形
A
BBB
CCCCC
DDDDDDD
EEEEEEEEE
FFFFFFFFFFF
GGGGGGGGGGGGG
*/
import java.util.Scanner; //接受键盘输入
public class Text1{
public static void main(String[] args){
char[] cs = {'A','B','C','D','E','F','G'};
int len = cs.length;
for(int i=1;i<=len;i++){
for(int j=i;j<len;j++){
System.out.print(" ");
}
for(int j=1;j<=i*2-1;j++){
System.out.print(cs[i-1]);
}
System.out.println();
}
}
}
28
/**
java中没有真正的多维数组,多维数组的表示方式是数组中的元素还是数组
一共有3个班级,每个班有三名学生参赛,记录每个学员的成绩,并算出每个班的平均分
*/
import java.util.Scanner; //接受键盘输入
public class Text1{
public static void main(String[] args){
int[][] scores = {{78,98,88},{87,96,85},{67,78,89}};
int classLen = scores.length;
for(int i=0;i<classLen;i++){
int sum = 0;
int count = scores[i].length;
for(int j=0;j<count;j++){
sum+=scores[i][j];
}
int avg = sum/count;
System.out.println("第"+(i+1)+"班的平均分是:"+avg);
}
}
}
/**
求最大最小值
*/
import java.util.Scanner; //接受键盘输入
public class Text1{
public static void main(String[] args){
int[] num = {12,3,54,67,88,34};
int max = max(num);
System.out.println("数列中的最大值是:"+ max);
int min = min(num);
System.out.println("数列中的最小值是:"+ min);
}
//求数列中的最大值
public static int max(int[] num){
int max = num[0];
int len = num.length;
for(int i=1;i<len;i++){
if(num[i]>max){
num[i]= num[i]+max;
max = num[i]-max;
num[i] = num[i]-max;
}
}
return max;
}
//求数列中的最小值
public static int min(int[] num){
int min = num[0];
int len = num.length;
for(int i=1;i<len;i++){
if(num[i]<min){
num[i]= num[i]+min;
min = num[i]-min;
num[i] = num[i]-min;
}
}
return min;
}
}
29
/**
冒泡排序法
相同元素前后顺序没有改变,所以冒泡排序法是一种稳定排序算法
*/
import java.util.Scanner; //接受键盘输入
public class Text1{
public static void main(String[] args){
int[] num = {12,3,54,54,88,34};
//外循环控制轮数
for(int i=0;i<num.length-1;i++){//比较轮数等于数列长度减一
for(int j=0;j<num.length-1-i;j++){
if(num[j]>num[j+1]){
num[j] = num[j]+num[j+1]; //先加一次,再减两次,中间是j+1
num[j+1] = num[j]-num[j+1];
num[j] = num[j]-num[j+1];
}
}
}
//
for(int n : num){
System.out.println(n);
}
}
}
30
/**
选择排序法
每一次从待排序的数组中选出最小或最大的一个元素
顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完
此方法“不稳定”,两个相同的数可能会调换位置
*/
import java.util.Scanner; //接受键盘输入
public class Text1{
public static void main(String[] args){
int[] nums = {12,3,54,54,88,34};
//外循环控制轮数
int minIndex = 0;//用于记录最小值的下标
for(int i = 0; i<nums.length-1;i++){
minIndex = i;//每轮设定一个最小值下标
for(int j=i+1;j<nums.length;j++)
{
if(nums[minIndex]>nums[j]){
minIndex = j;
}
}
//判断需要交换的数的下标是否为自己
if(minIndex!=i){
nums[minIndex] = nums[minIndex]+nums[i];
nums[i] = nums[minIndex]-nums[i];
nums[minIndex] = nums[minIndex]-nums[i];
}
}
for(int n:nums)
System.out.println(n);
}
}