2017-6-19 专业实习第一天
- JAVA 基础知识
1.一个文件中可以有多个class,但是只能有一个被public修饰的类并且该类的类名必须与文件名相同
如果需执行代码必须提供主函数,主函数的写法是固定的
public static void main(String[] args) {
System.out.println("welcome to world");
2.关于强制转换有两种方法:
public static void main(String[] args) {
//直接转换
float a=12.34f;
int b=(int)a;
System.out.println(b);
//通过转换为字符串,在截取整数部分
String str = String.valueOf(a);//将浮点数a转换为字符串str
int index=str.lastIndexOf(".");//查找小数点的位置
String strNum=str.substring(0, index);//将小数点前的部分截取字符串
String[] strNum1=str.split("\\.");//使用正则表达式
int num=Integer.valueOf(strNum);
int num1=Integer.valueOf(strNum1[0]);
System.out.println(num);
System.out.println(num1);
}
3.关于数组遍历排序
冒泡排序
1、基本思想: 是一种基础的排序算法、用于入门。依次比较相邻的两个数、将小数放在前面、大数放在后面。即首先比较第一个与第二个数、将小数放前面、大数放后面、然后比较第二个数和第三个数、将小数放在前面、大数放在后面、如此继续、直至比较最后两个数、将小数放在前面、大数放在后面。重复上述过程、仍从第一对开始比较、将小数放在前面、大数放在后面。一直比较到前一趟比较得到的最大数前一对相邻数、并将小数放在前面、大数放在后面。如此下去直到完成排序。由于在排序过程中总是小数往前放、大数往后放、相当于气泡往上升、所以称作冒泡排序。 2、算法原理: a)比较相邻元素、如果后者大、则交换他们的位置。 b)对每一对相邻的元素作同样的工作、从开始第一对、到最后一对。一次比较之后、最后一个值应该是最大的。 c)针对上面操作后的所有元素在进行同样的操作、但是下一次的比较不包含本次比较结束之后的最后一个元素。 d)持续对每次越来越少的元素重复上述步骤、直到没有任何一对数字需要比较。
这里写代码片
选择排序
1、基本思想: 对比数组中前一个元素跟后一个元素的大小,如果后面的元素比前面的元素小则用一个变量k来记住他的位置,接着第二次比较,前面“后一个元素”现变成了“前一个元素”,继续跟他的“后一个元素”进行比较如果后面的元素比他要小则用变量k记住它在数组中的位置(下标),等到循环结束的时候,我们应该找到了最小的那个数的下标了,然后进行判断,如果这个元素的下标不是第一个元素的下标,就让第一个元素跟他交换一下值,这样就找到整个数组中最小的数了。然后找到数组中第二小的数,让他跟数组中第二个元素交换一下值,以此类推。 2、算法原理: a)第一次循环:记录第一个数的下标 b)将第一个数的值与后面的值相比、如果比后面值大、则将下标值改为后面值所对应的下标。 c) 第一次循环结束后、如果下标值有改动、说明后面有比此数值小的元素、交换两者位置 d)重复上述操作、直到所有数值都已排序
// 选择排序 每次循环求出一个最大值或最小值与第一个交换
for (int i = 0; i < arr.length; i++) {
int minIndex=i;//定义最小值下标为第一个
for (int j = i + 1; j < arr.length; j++) {
//最小值下标的与数组的每一个进行比较
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
//如果最小值下标与第一个不相同,则与第一个进行交换
if (minIndex!= i) {
int temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
}
System.out.println("选择排序");
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
快速排序
1、简介: 快速排序是排序算法中效率最高的一种、它是利用递归原理、把数组无限制的费城两个部分、对每部分重复分割、排序。直到所有数据都拍好序为止。 2、基本思想: 快速排序是对冒泡排序的一种改进、他的基本思想是通过一次排序将要排序的数据分割成独立的两个部分、其中一个部分所有数据都比另一部分所有数据小、然后再按此方法对这两部分数据分别进行快速排序、整个排序过程是可以递归进行、以此达到整个数据变成有序序列。 3、算法原理: a)设置两个变量i、j、排序开始的时候i=0、j=N-1(N为数组元素个数)。 b)以第一个数组元素作为关键数据、赋值给key。即key=a[0]。 c) 从j开始向前搜索、即由后向前搜索(j--)、找到第一个比key小的值a[j]、将a[j]赋给a[i]。 d)从i开始向后搜索、即由前向后搜索(i++)、找到第一个大于key的a[i]、将a[i]赋给a[j]。 e)重复c、d两步、直到i=j(c、d两步中,没找到符合条件的值,即3中A[j]不小于key,4中A[j]不大于key的时候改变j、i的值,使得j=j-1,i=i+1,直至找到为止。找到符合条件的值,进行交换的时候i,j指针位置不变。另外,i==j这一过程一定正好是i+或j-完成的时候,此时令循环结束)。
插入排序
1、基本思想: 顾名思义、他是一种在已经拍好序的一个序列中插入数据、并且插入以后依然是排好序的。有点类似我们平时打牌一样、将新拿到手的牌插入他应该在的位置(当然、个人习惯和奇葩除外)。 插入排序算法把要排序的数组分成两个部分:第一部分包含了这个数组除了第一位的所有元素(当然也可以是最后一位元素)、而第二部分则只包含第一位元素。在第一位元素排序后(只有他一个、默认也就是排过序了)、依次取出另一部分的每个元素插入到第一部分中的适当位置。 2、算法原理: a)从第一个元素开始、该元素可被认为已经排序 b)取出下一个元素、在已经排序的元素序列中从后向前扫描。 c) 如果该元素(已经排序的序列中的元素)大于新元素、则将该元素向后移一位。 d)重复c步骤、直到找到已排序的元素小于或者等于新元素的位置、或者扫描到已排序元素的最左侧。 e)将新元素插入到合适的位置。 i. 如果扫描到最左侧、则插入到最左侧 ii. 如果新元素小于或等于已排序元素值(称该元素)、则该元素后移一位、新元素插入当前位置 iii. 如果新元素大于所有已排序元素、则插入已排序元素最右侧。 f) 重复上述步骤、直到第二部分所有元素都完成插入操作。
关于数组
package com.lanou.cmq;
public class Demo9 {
/**
* 找出1-100内的素数
*/
public static void main(String[] args) {
// int count=2;
// System.out.print("1 2"+" ");
for (int i = 2; i <= 100; i++) {
boolean k = true;
for (int j = 2; j < i; j++) {
if (i % j == 0) {
k = false;
break;
}
}
if (k) {
System.out.print(i + " ");
// count++;
}
}
// System.out.println(count);
}
}
- 关于String类(大小写的转换。字符串的分割,substring split)
package com.lanou.cmq;
import java.util.Scanner;
public class Demo7 {
/**
* String 类
*/
public static void main(String[] args) {
// 字符串大小写转换
// 输入一个字符串,将该字符串转换为大写
//
// Scanner scanner=new Scanner(System.in);
// String str=scanner.nextLine();
//
// String str1=str.toUpperCase();//转大写
// System.out.println(str1);
// String str2=str.toLowerCase();//转小写
// System.out.println(str2);
//
//www.langou3g.com 提取com
String str3="www.langou3g.com";
String str4=str3.substring(str3.indexOf("c"));//使用substring函数
System.out.println(str4);
String[] str5=str3.split("\\.");//利用正则表达式分割字符串为字符数组
System.out.println(str5[str5.length-1]);
}
}
- 查找鞍点
package com.lanou.cmq;
public class Demo10 {
/**
* @param args
*/
public static void main(String[] args) {
// 创建二维数组,编程查找是否存在鞍点,如果有输出鞍点
// 鞍点是指在该行最大,该列最小
int[][] arr = new int[][] {
{ 1, 2, 3 },
{ 2, 3, 4 },
{ 1, 3, 5 } };
int max = 0, maxIndex = 0;
for (int i = 0; i < arr.length; i++) {
// 取每一组的最大值及其下标
int[] barr = arr[i];
for (int j = 0; j < barr.length; j++) {
if (barr[j] > max) {
max = barr[j];
maxIndex = j;
}
}
System.out.println("最大值:" + max + "最大值下标" + maxIndex);
int min = 1000, minIndex = 0;
for (int j = 0; j < arr.length; j++) {
if (arr[j][maxIndex] < min) {
min = arr[j][maxIndex];
minIndex = j;
}
//System.out.println(min);
}
if (max == min) {
System.out.println("鞍点为:" + max);
}
}
}
}