JAVA基础知识笔记
2013-03-27 11:23
260 查看
-------
android培训、java培训、期待与您交流! ----------
JAVA基础部分笔记总结
1. Java开发环境搭建
1.1环境搭建方法:
(1):右键计算机选择属性-高级系统设置-计算机系统-高级-环境变量,然后在用户变量中点击新建,在弹出的菜单中变量名中填写path,
变量值中填写你所安装的jdk的javac.exe路径,然后确定即可
(2):临时用户变量及在dos命令行中设置的.格式为:set path=bin目录路径
如 图:
临时变量只在当前窗口有效,关闭即消失作用
1.2 Path和Classpath的作用:
1.2.1 Path:是指java开发工具的文件路径
(1) 没有设置path情况下.开发工具只能在所安装的目录执行 其他路径执行javac则报错.
(2) 安装后path环境变量,系统默认当前目录去找,当前目录不存在会按照path路径中去找
1.2.2 Classpath:是运行字节码文件工具所在的路径
(2)没有配置classpath环境变量,java虚拟机只在当前目录下查找要运行的类文件。
(3)配置好classpath环境变量分2种情况:
第一. 值的结尾处如果加上分号,那么JVM在classpath目录下没有找到指定的类文件,会在当前目录下在查找一次。
第二. 值的结尾出如果没有分号,那么JVM在classpath目录下没有找到要指定的类文件,不会在当前目录下查找,即使当前目录下有,也不会运行。
1.2.3JAVA_HOME的设置方法和作用
作用: 为了不因为jdk的目录或者目录名称的改变,而不断更改path的值,而导致对path变量值的误操作
设置方法: 新创建一个环境变量 JAVA_HOME 记录住jdk的目录,在path中通过%%动态的获取JAVA_HOME的值即可。
2 编写一个简单的java程序
class HelloWorld
{
public static void main(String[] args)
{
System.out.println("传\n智\n播\n客");
System.out.println("传智播客");
}
}
3 Jdk及jre的区别:
Jdk是提供给程序员使用的java开发工具集并且包含jre,安装jdk之后不必在安装jre了
Jre是包含了jvm及其java程序所需要的核心类库
4. 常见错误提示:
4.1 找不到文件
(1) 文件名错误
(2) 扩展名隐藏
4.2 找不到main函数
(1) 没写main函数,编译可以通过,但是无法运行
(2) main函数写错
4.3 软件包不存在
(1) 软件报名写错,注意大小写
5关键字和标识符:
关键字: 被java赋予特殊含义的单词,所有字母都是小写的
标识符: 有数字1~9,字母a~z,下划线_,美元符号$等组成, 注意不能以数字开头,不能是java关键字
在一个成员函数调用的外面写一个try语句,在这个成员函数内部写另一个try语句保护其他代码。每当遇到一个try语句,"异常"的框架就放到堆栈上面,直到所有的try语句都完成。如果下一级的try语句没有对某种"异常"进行处理,堆栈就会展开,直到遇到有处理这种"异常"的try语句。
6.进制类型
二进制: 由1和0组成,逢二进一
八进制: 由1~7组成,逢八进一,开头用0表示
十进制: 由1~9组成,逢十进一
十六进制:由1~9和A~F组成 逢十六进一,开头以0x开头
7进制转换:
十进制转二进制: 除2取模
二进制转十进制: 乘以2 的幂
十进制转八进制: 除8取模
八进制转二进制:从后往前,三位八进制对应一个二进制.
十六进制转二进制:可以先转成十进制在转成二进制
二进制转十六进制:四位二进制可以转为一位十六进制
负数的二进制表现形式: 是该数的整数的二进制取反加一
8常量
整型:占4个字节
长整型: 占8个字节
单精度浮点型:4个字节
双精度浮点型 占8个字节
布尔型: 占一个字节
字符型: 占2个字节
9变量
J ava中的变量只能存储同一种类型的值,是不可以被改变的
10数据类型
基本数据类型:
数值型 (byte short int long)
字符型 (char)
浮点型 (float double)
Boolean (true false)
引用数据类型
接口
数组
类
11运算符
算术: + - * / %
赋值 : = , += , -=, *=, %=
比较: > , < , >=, <=
逻辑: &, &&, |, ||
位运算符: ^ | & ,<< ,>> ,>>>(无符号右移,前面补零)
一个数被别的数异或2次,等于这个数本身
12判断语句
If(条件表达式){System/out.println();//输出语句}
----------------------------------------------------------------
If(条件表达式){System/out.println();//条件为真执行这条语句}
else{System/out.println();//条件为家执行这条语句}
----------------------------------------------------------------
If(){}
else if(){}
else{}
//先判断第一个if 语句,不符合再判断第二个else if,都为假执行最后一条else
例子程序:
class IfDemo
{
public static void main(String[] args)
{
int x= 8;
/*
//双或方式判断月份是什么季节
if(x==3||x==4||x==5)
{
System.out.println("春天");
}
else if(x==6||x==7||x==8)
{
System.out.println("夏天");
}
else
{
System.out.println("秋天");
}
*/
//双与形式判断月份属于什么季节
if(x<1&&x>=12)
{
System.out.println("非法输入");
}
else if(x>=3&&x<=5)
{
System.out.println("春天");
}
else if(x>=6&&x<=8)
{
System.out.println("夏天");
}
else if(x>=9&&x<=12)
{
System.out.println("秋天");
}
else
{
System.out.println("冬天");
}
}
<
1050c
p>
注意:Byte-short-char-int- float-long-double 从小到大排序
-----------------------------------------------------------------
13小练习
1. 用最有效的方法算出2*8的代码
2<<3 (因为计算机直接能计算二进制数据)
2. 对2个变量的值进行互换(三种方法)
(1)第一种方法: 使用第三方变量
class demo
{ public static void main(String[] args)
{
Int X = 3, Y= 6;
Int temp;
Temp= x;
X=y;
Y=temp;
System.out.println(”X=”+x+”y=”+y)
}
}
(2)第二种方法: 位运算 (一个数异或2次还等于这个数本身)
Int a=6 ,b=3;
X = x^y;
Y=x^y;
X=x^y;
(3)第三种方法: 和方式
Int x=6 ,y=3;
X= x+y; //x= 6+3=9;
Y=x-y; //y =9-3=6;
X=x-y; //;x=9-6=3
14 循环语句:
14.1 选择结构
Switch()
Case 1:{}
Case 2:{}
Default{}
14.2 While循环
(1)While(条件表达式){条件为真执行此方法体}
(2)Do{无论条件是否为真,都先执行一处}
While()
14.3For循环
(1)For(;;){}//条件符合一直循环执行
(2)For(;;){for(;;){}} 外边先判定是否满足条件,满足之后进入里面的for循环,内循环执行 完之后在跳出内循环 进入外循环
13.4 Break和 continue
break : 是结束本次循环
Continue: 是结束本次循环进行下一次循环
----------------------------------------------------------------------------------------------------------------------
15小练习:
第一题:
考试成绩分等级。
90~100 A等。
80-89 B等。
70-79 C等。
60-69 D等。
60以下 E等。
请根据给定成绩,输出对应的等级。
class TestDemo
{
public static void main(String[] args)
{
int x= 80;
if (x>=90&&x<=100)
{
System.out.println("分成绩为A等");
}
else if (x>=80&&x<=89)
{
System.out.println(x+"分成绩为B等");
}
else if (x>=70&&x<=79)
{
System.out.println(x+"分成绩为C等");
}
else if (x>=60&&x<=69)
{
System.out.println(x+"分成绩为D等");
}
else if(x<60)
{
System.out.println(x+"分成绩为E等");
}
else
{
System.out.println("输入不合法");
}
}
}
----------------------------------------------------------------------------------------------------------------------
第二题:
打印出所有的"水仙花数"。
所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
提示:
1:采用循环取得所有的三位数。(三位数指的是100-999之间的数)。
2:把每个三位数的个位,十位,百位进行分解。
for (int x=99; x<1000 ;x++ )
{
//获取百位,十位,个位上的数字
int a = x/100;
int b = x/10%10;
int c = x%10;
//获取到的三个数字立方和等于这个三位数
if (x==a*a*a+b*b*b+c*c*c)
//if(x==(Math.pow(a,3)+Math.pow(b,3)+Math.pow(c,3)))
System.out.println(x);
}
//System.out.println(a);
//System.out.println(b);
//System.out.println(c);
-------------------------------------------------------------------------------------------------------------------
第三题:
求5的阶乘。
提示:5的阶乘就是:5*4*3*2*1。
int sum=1;
for (int a =1; a<=5; a++)
{
sum *=a;
//System.out.println(sum);
}
System.out.println(sum);
----------------------------------------------------------------------------------------------------------------------
第四题:
韩信点兵。
刘邦和韩信的故事,这个大家都知道把。
刘邦当时问了韩信一句,如果带兵,我可以带多少人,你可以带多少人。
韩信答曰:大王最多十万,而韩信则是多多益善。
从此以后啊,刘邦就对韩信怀恨在心,有一次,刘邦和韩信聊天,看到面前有一大队士兵,刘邦就问:你能准确的说出这里有多少士兵吗?韩信想了想:说,可以。
接着,他就让士兵每3个人一排,结果余下2人;每5个人一排,结果余下3人;每7个人一排,结果也是余下2人。
然后,他微笑的告诉了刘邦士兵的人数。刘邦大为震惊。
请问如果这群士兵人数在0-1000之间,那么,这群士兵可能有多少人呢?
提示:这个故事纯属杜撰,不用去查,做题即可。
看红色部分,想想什么意思。想明白了题目就非常简答了。
for (int x=0;x<1000 ;x++ )
{
if(x%3==2&&x%5==2&&x%7==2)
System.out.println(x);
}
----------------------------------------------------------------------------------------------------------------------
第五题:
我国最高山峰是珠穆朗玛峰,8848米。现在我有一张足够大的纸,它的厚度是0.01米。请问,我折叠多少次,可以折成珠穆朗玛峰的高度。(思考题)
int count=0;//折叠次数
for(double x=0.01;x<8848;x*=2)
{
count++;
}
System.out.println(count);
16. 选择排序:
----------选择排序就是第一个数字一次与后面数字比较,在第一位上可以得出最大数或者最小数,然后在从第二位数字依次与后面的数比较....知道比较完成位置 即可完成数组排序
示例小程序:
class SelectDemo
{
public static void main(String[] args)
{
int[] arr = {12,3,8,5,2,32,11,23,15};//定义一个数组
select(arr)//调用比较大小的函数
select(arr);// 专门封转一个比较函数,直接调用即可,方便复用
print(arr);
}
public static void select(int[] arr)
{
//for循环特点:外圈取值一次,内循环跑一圈
for (int x=0;x<arr.length ;x++ )
{
for (int y=x+1;y<arr.length ;y++ )
{
if (arr[x]>arr[y])
{
//若x角标对应的元素比y角标对应的元素值大,那么就换位
int temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
}
}
//System.out.print(arr[x]+",");
}
}
public static void swap(int[] arr,int a,int b)
{
int temp = arr[a];
arr[a] = arr;
arr[b] = temp;
}
//此函数作用是加前后中括号,元素之间的逗号 并且最后一个元素后面不能跟逗号,还有一个功能是遍历排好序的数组,并打印
public static void print(int[] arr)
{
System.out.print("[");
for(int x =0;x<arr.length;x++)
{
if(x==arr.length-1)//若是最后一个元素,那么就直接打印不需要逗号,否则打印逗号
System.out.print(arr[x]);
else
System.out.print(arr[x]+",");
}
System.out.print("]");
}
}
[b]17. 冒泡排序
//冒泡排序 “其实是相邻的2个数字比较,取大数或者最小值往后放,每次得出一个最值,取得的值不必在比较,前面的数组直到比较完成即完成了排序
public static void main(String[] args)
{
int[] arr = {4,71,31,2,8,5,9,11};
bubbleSort(arr);
printArr(arr);
}
public static void bubbleSort(int[] arr)
{
for(int x = 0 ; x < arr.length - 1 ;x ++)
{
for(int y=0; y < arr.length-1 ;y++)
{
//若前一个元素比后面一个元素大,那么交换位置,
if(arr[y] > arr[y+1])
{
int temp = arr[y];
arr[y] = arr[y+1];
arr[y+1] = temp;
}
}
}
}
public static void printArr(int[] arr)
{
System.out.print("[");
for(int x = 0 ; x < arr.length ;x++)// 0 1 2 3 length = 4
{
//当循环变量 x 到达数组最大索引,不打印逗号
if(x == arr.length - 1) /
System.out.print(arr[x]);
else
System.out.print(arr[x]+",");
}
System.out.println("]");
}
18. 反转
//反转就是把原数组倒着打印出来,不必排序
public static void main(String[] args)
{
int[] arr = {8,5,3,4,56,6,13,43,25};
fanzhuan(arr);
printArr(arr);
}
public static void fanzhuan(int[] arr)
{
for (int start=0,end=arr.length-1;start<end ;start++,end--)
{
if (arr[start]<arr[end])
{
int temp=arr[start];
arr[start]=arr[end];
arr[end]=temp;
}
}
}
public static void printArr(int[] arr)
{
System.out.print("[");
for (int x=0;x<arr.length;x++ )
{
if (x==arr.length-1)
System.out.print(arr[x]);
else
System.out.print(arr[x]+",");
}
System.out.println("]");
}
*/
19 折半查找
//折半查找是取中间值进行与要查询的元素比较,比此元素大,那么取数组后一半,比元素小,取数组前一半,等于每次把数组砍掉一半,提高了查询的效率,注意,数组需要是有序的才可以使用这个方法,否则是不准确的
public static void main(String[] args)
{
int[] arr = {1,2,3,4,5,6,7,8};
// printArr(arr);
int index = search(arr,6);
System.out.println("index="+index);
}
public static int search(int[] arr,int key)
{
//定义数组开始 中间 最后指针
int min=0;
int max=arr.length-1;
int mid=(min+max)/2;
//如中间值不等于要查询的数值,那么进入while循环继续查找
while (arr[mid]!=key)
{
if (key>arr[mid])//如果要找的值大于数组中间的值,那么就看数组后面的一半,从中间值后面一位开始,mid+1
min= mid+1;
else if (key<arr[mid])//如果要查询的值小于了数组中的中间值,那么就看数组前面一半,最大指针等于中间mid-1
max = mid-1;
if (min>max)//如果小指针大于了大指针,即说明数组中没有这个元素,直接返回-1
return -1;
2mid=(min+max)/2;//否则直接中间值就是要查询的元素 返回即可
}
return mid;
}
public static void printArr(int[] arr)
{
System.out.print("[");
for (int x=0;x<arr.length;x++ )
{
if (x==arr.length-1)
System.out.print(arr[x]);
else
System.out.print(arr[x]+",");
}
System.out.println("]");
}
20. 查表法
public static void main(String[] args)
{
//制作表
toBin(60);
}
public static void toBin(int num)
{
//制作一个表
char[] chs = {'0','1'};
//定义一个存储容器
char[] arr= new char[32];
//定义一个指针
int pos=arr.length;
while (num!=0)
{
int temp = num&1;
arr[--pos]=chs[temp];
num = num>>>1;
}
//for循环遍历数组
for (int x=pos;x<arr.length ;x++)
{
System.out.print(arr[x]);
}
}
21. 多维数组
数组中的每一个元素都是数组,这样的数组就是多维数组。
int[][] arr = { { 1, 2, 3 }, { 4, 5 }, { 6, 7, 8, 9 } };
定义二维数组arr, 其中有三个元素都是数组, 第一个数组3个元素, 第二个2个元素, 第三个4个元素.
android培训、java培训、期待与您交流! ----------
JAVA基础部分笔记总结
1. Java开发环境搭建
1.1环境搭建方法:
(1):右键计算机选择属性-高级系统设置-计算机系统-高级-环境变量,然后在用户变量中点击新建,在弹出的菜单中变量名中填写path,
变量值中填写你所安装的jdk的javac.exe路径,然后确定即可
(2):临时用户变量及在dos命令行中设置的.格式为:set path=bin目录路径
如 图:
临时变量只在当前窗口有效,关闭即消失作用
1.2 Path和Classpath的作用:
1.2.1 Path:是指java开发工具的文件路径
(1) 没有设置path情况下.开发工具只能在所安装的目录执行 其他路径执行javac则报错.
(2) 安装后path环境变量,系统默认当前目录去找,当前目录不存在会按照path路径中去找
1.2.2 Classpath:是运行字节码文件工具所在的路径
(2)没有配置classpath环境变量,java虚拟机只在当前目录下查找要运行的类文件。
(3)配置好classpath环境变量分2种情况:
第一. 值的结尾处如果加上分号,那么JVM在classpath目录下没有找到指定的类文件,会在当前目录下在查找一次。
第二. 值的结尾出如果没有分号,那么JVM在classpath目录下没有找到要指定的类文件,不会在当前目录下查找,即使当前目录下有,也不会运行。
1.2.3JAVA_HOME的设置方法和作用
作用: 为了不因为jdk的目录或者目录名称的改变,而不断更改path的值,而导致对path变量值的误操作
设置方法: 新创建一个环境变量 JAVA_HOME 记录住jdk的目录,在path中通过%%动态的获取JAVA_HOME的值即可。
2 编写一个简单的java程序
class HelloWorld
{
public static void main(String[] args)
{
System.out.println("传\n智\n播\n客");
System.out.println("传智播客");
}
}
3 Jdk及jre的区别:
Jdk是提供给程序员使用的java开发工具集并且包含jre,安装jdk之后不必在安装jre了
Jre是包含了jvm及其java程序所需要的核心类库
4. 常见错误提示:
4.1 找不到文件
(1) 文件名错误
(2) 扩展名隐藏
4.2 找不到main函数
(1) 没写main函数,编译可以通过,但是无法运行
(2) main函数写错
4.3 软件包不存在
(1) 软件报名写错,注意大小写
5关键字和标识符:
关键字: 被java赋予特殊含义的单词,所有字母都是小写的
标识符: 有数字1~9,字母a~z,下划线_,美元符号$等组成, 注意不能以数字开头,不能是java关键字
在一个成员函数调用的外面写一个try语句,在这个成员函数内部写另一个try语句保护其他代码。每当遇到一个try语句,"异常"的框架就放到堆栈上面,直到所有的try语句都完成。如果下一级的try语句没有对某种"异常"进行处理,堆栈就会展开,直到遇到有处理这种"异常"的try语句。
6.进制类型
二进制: 由1和0组成,逢二进一
八进制: 由1~7组成,逢八进一,开头用0表示
十进制: 由1~9组成,逢十进一
十六进制:由1~9和A~F组成 逢十六进一,开头以0x开头
7进制转换:
十进制转二进制: 除2取模
二进制转十进制: 乘以2 的幂
十进制转八进制: 除8取模
八进制转二进制:从后往前,三位八进制对应一个二进制.
十六进制转二进制:可以先转成十进制在转成二进制
二进制转十六进制:四位二进制可以转为一位十六进制
负数的二进制表现形式: 是该数的整数的二进制取反加一
8常量
常量 | 整型 | 长整型 | 单精浮点 | 双精浮点 | 布尔 | 字符型 |
所占字节 | 4 | 8 | 4 | 8 | 1 | 2 |
所占位数 | 32位 | 64位 | 3位 | 64位 | 8位 | 16位 |
长整型: 占8个字节
单精度浮点型:4个字节
双精度浮点型 占8个字节
布尔型: 占一个字节
字符型: 占2个字节
9变量
J ava中的变量只能存储同一种类型的值,是不可以被改变的
10数据类型
基本数据类型:
数值型 (byte short int long)
字符型 (char)
浮点型 (float double)
Boolean (true false)
引用数据类型
接口
数组
类
11运算符
算术: + - * / %
赋值 : = , += , -=, *=, %=
比较: > , < , >=, <=
逻辑: &, &&, |, ||
位运算符: ^ | & ,<< ,>> ,>>>(无符号右移,前面补零)
一个数被别的数异或2次,等于这个数本身
12判断语句
If(条件表达式){System/out.println();//输出语句}
----------------------------------------------------------------
If(条件表达式){System/out.println();//条件为真执行这条语句}
else{System/out.println();//条件为家执行这条语句}
----------------------------------------------------------------
If(){}
else if(){}
else{}
//先判断第一个if 语句,不符合再判断第二个else if,都为假执行最后一条else
例子程序:
class IfDemo
{
public static void main(String[] args)
{
int x= 8;
/*
//双或方式判断月份是什么季节
if(x==3||x==4||x==5)
{
System.out.println("春天");
}
else if(x==6||x==7||x==8)
{
System.out.println("夏天");
}
else
{
System.out.println("秋天");
}
*/
//双与形式判断月份属于什么季节
if(x<1&&x>=12)
{
System.out.println("非法输入");
}
else if(x>=3&&x<=5)
{
System.out.println("春天");
}
else if(x>=6&&x<=8)
{
System.out.println("夏天");
}
else if(x>=9&&x<=12)
{
System.out.println("秋天");
}
else
{
System.out.println("冬天");
}
}
<
1050c
p>
注意:Byte-short-char-int- float-long-double 从小到大排序
-----------------------------------------------------------------
13小练习
1. 用最有效的方法算出2*8的代码
2<<3 (因为计算机直接能计算二进制数据)
2. 对2个变量的值进行互换(三种方法)
(1)第一种方法: 使用第三方变量
class demo
{ public static void main(String[] args)
{
Int X = 3, Y= 6;
Int temp;
Temp= x;
X=y;
Y=temp;
System.out.println(”X=”+x+”y=”+y)
}
}
(2)第二种方法: 位运算 (一个数异或2次还等于这个数本身)
Int a=6 ,b=3;
X = x^y;
Y=x^y;
X=x^y;
(3)第三种方法: 和方式
Int x=6 ,y=3;
X= x+y; //x= 6+3=9;
Y=x-y; //y =9-3=6;
X=x-y; //;x=9-6=3
14 循环语句:
14.1 选择结构
Switch()
Case 1:{}
Case 2:{}
Default{}
14.2 While循环
(1)While(条件表达式){条件为真执行此方法体}
(2)Do{无论条件是否为真,都先执行一处}
While()
14.3For循环
(1)For(;;){}//条件符合一直循环执行
(2)For(;;){for(;;){}} 外边先判定是否满足条件,满足之后进入里面的for循环,内循环执行 完之后在跳出内循环 进入外循环
13.4 Break和 continue
break : 是结束本次循环
Continue: 是结束本次循环进行下一次循环
----------------------------------------------------------------------------------------------------------------------
15小练习:
第一题:
考试成绩分等级。
90~100 A等。
80-89 B等。
70-79 C等。
60-69 D等。
60以下 E等。
请根据给定成绩,输出对应的等级。
class TestDemo
{
public static void main(String[] args)
{
int x= 80;
if (x>=90&&x<=100)
{
System.out.println("分成绩为A等");
}
else if (x>=80&&x<=89)
{
System.out.println(x+"分成绩为B等");
}
else if (x>=70&&x<=79)
{
System.out.println(x+"分成绩为C等");
}
else if (x>=60&&x<=69)
{
System.out.println(x+"分成绩为D等");
}
else if(x<60)
{
System.out.println(x+"分成绩为E等");
}
else
{
System.out.println("输入不合法");
}
}
}
----------------------------------------------------------------------------------------------------------------------
第二题:
打印出所有的"水仙花数"。
所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
提示:
1:采用循环取得所有的三位数。(三位数指的是100-999之间的数)。
2:把每个三位数的个位,十位,百位进行分解。
for (int x=99; x<1000 ;x++ )
{
//获取百位,十位,个位上的数字
int a = x/100;
int b = x/10%10;
int c = x%10;
//获取到的三个数字立方和等于这个三位数
if (x==a*a*a+b*b*b+c*c*c)
//if(x==(Math.pow(a,3)+Math.pow(b,3)+Math.pow(c,3)))
System.out.println(x);
}
//System.out.println(a);
//System.out.println(b);
//System.out.println(c);
-------------------------------------------------------------------------------------------------------------------
第三题:
求5的阶乘。
提示:5的阶乘就是:5*4*3*2*1。
int sum=1;
for (int a =1; a<=5; a++)
{
sum *=a;
//System.out.println(sum);
}
System.out.println(sum);
----------------------------------------------------------------------------------------------------------------------
第四题:
韩信点兵。
刘邦和韩信的故事,这个大家都知道把。
刘邦当时问了韩信一句,如果带兵,我可以带多少人,你可以带多少人。
韩信答曰:大王最多十万,而韩信则是多多益善。
从此以后啊,刘邦就对韩信怀恨在心,有一次,刘邦和韩信聊天,看到面前有一大队士兵,刘邦就问:你能准确的说出这里有多少士兵吗?韩信想了想:说,可以。
接着,他就让士兵每3个人一排,结果余下2人;每5个人一排,结果余下3人;每7个人一排,结果也是余下2人。
然后,他微笑的告诉了刘邦士兵的人数。刘邦大为震惊。
请问如果这群士兵人数在0-1000之间,那么,这群士兵可能有多少人呢?
提示:这个故事纯属杜撰,不用去查,做题即可。
看红色部分,想想什么意思。想明白了题目就非常简答了。
for (int x=0;x<1000 ;x++ )
{
if(x%3==2&&x%5==2&&x%7==2)
System.out.println(x);
}
----------------------------------------------------------------------------------------------------------------------
第五题:
我国最高山峰是珠穆朗玛峰,8848米。现在我有一张足够大的纸,它的厚度是0.01米。请问,我折叠多少次,可以折成珠穆朗玛峰的高度。(思考题)
int count=0;//折叠次数
for(double x=0.01;x<8848;x*=2)
{
count++;
}
System.out.println(count);
16. 选择排序:
----------选择排序就是第一个数字一次与后面数字比较,在第一位上可以得出最大数或者最小数,然后在从第二位数字依次与后面的数比较....知道比较完成位置 即可完成数组排序
示例小程序:
class SelectDemo
{
public static void main(String[] args)
{
int[] arr = {12,3,8,5,2,32,11,23,15};//定义一个数组
select(arr)//调用比较大小的函数
select(arr);// 专门封转一个比较函数,直接调用即可,方便复用
print(arr);
}
public static void select(int[] arr)
{
//for循环特点:外圈取值一次,内循环跑一圈
for (int x=0;x<arr.length ;x++ )
{
for (int y=x+1;y<arr.length ;y++ )
{
if (arr[x]>arr[y])
{
//若x角标对应的元素比y角标对应的元素值大,那么就换位
int temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
}
}
//System.out.print(arr[x]+",");
}
}
public static void swap(int[] arr,int a,int b)
{
int temp = arr[a];
arr[a] = arr;
arr[b] = temp;
}
//此函数作用是加前后中括号,元素之间的逗号 并且最后一个元素后面不能跟逗号,还有一个功能是遍历排好序的数组,并打印
public static void print(int[] arr)
{
System.out.print("[");
for(int x =0;x<arr.length;x++)
{
if(x==arr.length-1)//若是最后一个元素,那么就直接打印不需要逗号,否则打印逗号
System.out.print(arr[x]);
else
System.out.print(arr[x]+",");
}
System.out.print("]");
}
}
[b]17. 冒泡排序
//冒泡排序 “其实是相邻的2个数字比较,取大数或者最小值往后放,每次得出一个最值,取得的值不必在比较,前面的数组直到比较完成即完成了排序
public static void main(String[] args)
{
int[] arr = {4,71,31,2,8,5,9,11};
bubbleSort(arr);
printArr(arr);
}
public static void bubbleSort(int[] arr)
{
for(int x = 0 ; x < arr.length - 1 ;x ++)
{
for(int y=0; y < arr.length-1 ;y++)
{
//若前一个元素比后面一个元素大,那么交换位置,
if(arr[y] > arr[y+1])
{
int temp = arr[y];
arr[y] = arr[y+1];
arr[y+1] = temp;
}
}
}
}
public static void printArr(int[] arr)
{
System.out.print("[");
for(int x = 0 ; x < arr.length ;x++)// 0 1 2 3 length = 4
{
//当循环变量 x 到达数组最大索引,不打印逗号
if(x == arr.length - 1) /
System.out.print(arr[x]);
else
System.out.print(arr[x]+",");
}
System.out.println("]");
}
18. 反转
//反转就是把原数组倒着打印出来,不必排序
public static void main(String[] args)
{
int[] arr = {8,5,3,4,56,6,13,43,25};
fanzhuan(arr);
printArr(arr);
}
public static void fanzhuan(int[] arr)
{
for (int start=0,end=arr.length-1;start<end ;start++,end--)
{
if (arr[start]<arr[end])
{
int temp=arr[start];
arr[start]=arr[end];
arr[end]=temp;
}
}
}
public static void printArr(int[] arr)
{
System.out.print("[");
for (int x=0;x<arr.length;x++ )
{
if (x==arr.length-1)
System.out.print(arr[x]);
else
System.out.print(arr[x]+",");
}
System.out.println("]");
}
*/
19 折半查找
//折半查找是取中间值进行与要查询的元素比较,比此元素大,那么取数组后一半,比元素小,取数组前一半,等于每次把数组砍掉一半,提高了查询的效率,注意,数组需要是有序的才可以使用这个方法,否则是不准确的
public static void main(String[] args)
{
int[] arr = {1,2,3,4,5,6,7,8};
// printArr(arr);
int index = search(arr,6);
System.out.println("index="+index);
}
public static int search(int[] arr,int key)
{
//定义数组开始 中间 最后指针
int min=0;
int max=arr.length-1;
int mid=(min+max)/2;
//如中间值不等于要查询的数值,那么进入while循环继续查找
while (arr[mid]!=key)
{
if (key>arr[mid])//如果要找的值大于数组中间的值,那么就看数组后面的一半,从中间值后面一位开始,mid+1
min= mid+1;
else if (key<arr[mid])//如果要查询的值小于了数组中的中间值,那么就看数组前面一半,最大指针等于中间mid-1
max = mid-1;
if (min>max)//如果小指针大于了大指针,即说明数组中没有这个元素,直接返回-1
return -1;
2mid=(min+max)/2;//否则直接中间值就是要查询的元素 返回即可
}
return mid;
}
public static void printArr(int[] arr)
{
System.out.print("[");
for (int x=0;x<arr.length;x++ )
{
if (x==arr.length-1)
System.out.print(arr[x]);
else
System.out.print(arr[x]+",");
}
System.out.println("]");
}
20. 查表法
public static void main(String[] args)
{
//制作表
toBin(60);
}
public static void toBin(int num)
{
//制作一个表
char[] chs = {'0','1'};
//定义一个存储容器
char[] arr= new char[32];
//定义一个指针
int pos=arr.length;
while (num!=0)
{
int temp = num&1;
arr[--pos]=chs[temp];
num = num>>>1;
}
//for循环遍历数组
for (int x=pos;x<arr.length ;x++)
{
System.out.print(arr[x]);
}
}
21. 多维数组
数组中的每一个元素都是数组,这样的数组就是多维数组。
int[][] arr = { { 1, 2, 3 }, { 4, 5 }, { 6, 7, 8, 9 } };
定义二维数组arr, 其中有三个元素都是数组, 第一个数组3个元素, 第二个2个元素, 第三个4个元素.
相关文章推荐
- 【Java学习笔记】基础知识学习10【继承与多态】
- Java基础知识强化之网络编程笔记14:TCP之多个客户端上传到一个服务器的思考(多线程改进)
- Java基础知识强化之集合框架笔记09:Collection集合迭代器使用的问题探讨
- Java基础知识强化之集合框架笔记11:Collection集合之迭代器的原理及源码解析
- Java基础知识强化之IO流笔记66:Properties的概述 和 使用(作为Map集合使用)
- Java基础知识强化之集合框架笔记24:ArrayList存储自定义对象并遍历
- Java基础知识强化之集合框架笔记33:Arrays工具类中asList()方法的使用
- java--数组的学习笔记一之基础知识
- Java基础知识强化之集合框架笔记37:用户登录注册案例
- Java基础知识强化之集合框架笔记39:Set集合之HashSet存储字符串并遍历
- 【java基础知识(学习笔记)】--方法的重载
- 黑马程序员_java基础学习笔记03_函数以及数组知识
- Java基础知识强化之网络编程笔记05:UDP之多线程实现聊天室案例
- Java基础知识_毕向东_Java基础视频教程笔记(22-25 GUI 网络编程 正则)
- 【Java 学习笔记】基础知识
- Java学习笔记—基础知识点拾漏补遗
- Java基础知识强化之IO流笔记25:FileInputStream / FileOutputStream 复制图片案例
- 【Java学习笔记】基础知识学习19【一个大文件的复制方法】
- 黑马程序员_java基础笔记(09)...HTML基本知识、CSS、JavaScript、DOM
- Java学习笔记-《Java程序员面试宝典》-第四章基础知识-4.2面向对象技术(4.2.1-4.2.2)