学习心得
一、专业课
1、数组
1) 基本类型存放于栈,引用类型存放于堆
//基本数据类型存放在 栈
//引用数据类型存放在 堆
int[]a2 = {1,2,3}; //都存放于栈
String[]strings = {"","s"};//都存放于堆
int[]a = {1,2,3};
int[]b = a;
int[]c = a.clone();
/*char[] u ="asdf"; 都抱错
char[] i =new char[]{"ksdajfkl"};*/
System.out.println(a==b);true
System.out.println(a==c);false
2) 数组声明
方式1(推荐,更能表明数组类型)
type[]变量名 = new type[数组中元素的个数];
比如:
int[]a = new int[10];
数组名,也即引用a,指向数组元素的首地址。
方式2(同C语言)
type变量名[] =new type[数组中元素的个数];
如:
inta[] = new int[10];
方式3 定义时直接初始化
type[]变量名 = new type[]{逗号分隔的初始化值};
其中红色部分可省略,所以又有两种:
int[]a = {1,2,3,4};
int[]a = new int[]{1,2,3,4};
其中int[]a = new int[]{1,2,3,4};的第二个方括号中不能加上数组长度,因为元 素个数是由后面花括号的内容决定的。
3) 数组长度
Java中的每个数组都有一个名为length的属性,表示数组的长度。
length属性是public final int的,即length是只读的。数组长度一旦确定,就 不能改变大小
2、排序算法
1)冒泡排序
public staticvoid bubbleSort(int[] is) {
//第一轮,找出最大值,放到最后 比较len-1次
//第二轮,找出最大值,放到最后 比较len-2次
for(int i=0;i<is.length-1; i++){
for(int j=0;j<is.length-i-1;j++){
if(is[j]>is[j+1]) {
swap(is,j, j+1);
}
}
}
}
2)选择排序
public staticvoid selectShort(int[] is) {
int k,t,len = is.length;
for(int i=0;i<len;i++){
k=i;
for(int j=len-1;j>i; j--){
if(is[k]>is[j]) {
k=j;
}
}
t = is[i];
is[i] = is[k];
is[k] = t;
}
}
3)插入排序
/**
* 插入排序<br/>
*<ul>
*<li>从第一个元素开始,该元素可以认为已经被排序 </li>
*<li>取出下一个元素,在已经排序的元素序列中从后向 前扫 描</li>
*<li>如果该元素(已排序)大于新元素,将该元素移到 下一位置</li>
*<li>重复步骤3,直到找到已排序的元素小于或者等于 新元素的位置</li>
*<li>将新元素插入到该位置中</li>
*<li>重复步骤2</li>
*</ul>
* @paramis
*/
public staticvoid insertSort(int[] is) {
int len = is.length,temp,j;
for(int i=1; i<len;i++){
temp= is[i];
for(j=i;j>0&&temp<is[j-1]; j--)
is[j]=is[j-1];
is[j]=temp;
printTimes(is,i);
}
}
二、小组PK
1、我方题目
1、以下哪个程序语句有错(A, B,C,D)(可多选题)(以下变量与类既有定义)
A.int[]is = {1,2,3,4,5,6,};
B.for(intk=0,k<is.length,k++){}
C.int[]a = new int[3]{1,2,3};
D.Person[]person = {new Person('2'),new Person(2)};
提示:Person类定义
classPerson{
inti;
publicPerson(int i) {
this.i= i;
}
}
答案:
B,C
A选项:Java文档 Chapter10.6http://docs.oracle.com/javase/specs/jls/se8/html/jls10.html#jls-10.6
里面有一句话 A trailing comma may appearafter the last expression in an array initializer and is ignored.
也就是会忽视最后的逗号,所以A没错
D选项:由于参数传递时char类型会自动转换为int类型,所以D没错
2、程序填空题?
/**
* 插入排序<br/>
*int[] is = {100,92,56,32,78,12};
*请从小到大排序
*/
publicstatic void insertSort(int[] is) {
int len = is.length,temp,j;
for(int i=1; i<len; i++){
temp= is[i];
for(j=i;__________________; j--)
is[j]=is[j-1];
is[j]=temp;
}
}
答案
j>0&&temp<is[j-1]
/**
* 插入排序<br/>
* <ul>
* <li>从第一个元素开始,该元素可以认为已经被排序</li>
* <li>取出下一个元素,在已经排序的元素序列中从后向前扫描</li>
* <li>如果该元素(已排序)大于新元素,将该元素移到下一位置</li>
* <li>重复步骤3,直到找到已排序的元素小于或者等于新元素的位置</li>
* <li>将新元素插入到该位置中</li>
* <li>重复步骤2</li>
* </ul>
*
* @param is
*/
3.程序填空题
/**
*程序功能是,数组去重
*/
publicstatic void main(String[] args) {
int[]is = {1,2,3,4,3,2,5,6};
Arrays.sort(is);
int[]copy = new int[is.length];
intlen = 0;//代表复制数组中元素的真实长度
for(inti = 0; i<is.length; i++){
if(0== i){
____________________;
}else{
if(____________________) {
copy[len++]= is[i];
}
}
}
//打印数组
for(inti=0;i<len; i++){
System.out.println(copy[i]);
}
}
答案:
copy[len++]= is[i]
copy[len-1]!= is[i]
4,程序输出结果是?
publicstatic void main(String[] args) {
intlen = 9;
inta = 2;
for(inti=0;i<len;i++){
a++;
for(intj=i;j<len;j++){
if(0 == len%a) {
a--;
len-= 3;
continue;
}
}
}
System.out.println("a="+a+"len="+len);
}
答案
a=0len=0
5.程序有错吗?
有,则说明理由;
没有,请输出结果(a的ascii码为97):
publicstatic void main(String[] args) {
Stringstring = "abcd";
int[]arr = new int[string.length()];
char[]chars = string.toCharArray();
for(inti=0; i<arr.length();i++){
arr[i]= chars[i];
}
for(inti:arr){
System.out.println(i);
}
}
答案:
有错,因为arr.length()有错,数组的length是属性不需要(),而String的length是方法需要 ().
2、对方题目
1、下面错误的初始化语句是(多选) A BD
A char str[] = "hello";
B char str[100] = "hello";
C char str[] = {'h','e','l','l','o'};
D char str[] = {'hello'};
2、int[] arr = {45, 20, 53, 108, 91, 55,25,84,61};
int len = arr.length;
for (int i = 0; i < len - 1; i++) {
for (int j = i + 1; j < len; j++) {
if (arr[i] > arr[j]) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
A
}
当i=6时,程序运行到A位置时,arr的值是多少。
20 25 45 53 55 61 84 108 91
3、执行完代码"int[]x=new int[25];"后以下(A,B)说明正确的
A. x[1]为0
B. x[24]为0
C. x[25]为未定义
D. x[1]为空
4、int[] a = {1,2,3,4,5};
int[] b = a;
b[2] = b[1] +b[4];
for(int c:b){
System.out.print(c + " ");
}
System.out.println();
for(int c:a){
System.out.print(c + " ");
}
求打印结果
1 2 7 4 5
1 2 7 4 5
5、补充完整下面方法:在[low, hign]区间内获取 n 个不同随机数(n < 区间大小) ,
并把随机数存在一数组中返回。
static int[] getRandom(int n, int low, inthign){
int len = hign - low +1;
int ran[] = new int[len];
int result[] = new int[n];
Random rd = new Random();
for(int i = 0; i < len;i++)
__________________________
for(int j = 0; j < n; j++){
int b =rd.nextInt(len);
result[j] = ran[b];//
for(int k = b; k <len - 1; k++)
ran[k] =ran[k + 1];
______________________________
}
return result;
}
1/ ran[i] = low + i;
2/ len -- ;
学习心得:
1.java编程不管怎么样都会有很多细节问题,望多尝试新型代码,或故意编错
黄品民
2017年3月15日