您的位置:首页 > 职场人生

java程序员从笨鸟到菜鸟之回顾练习

2017-11-07 22:14 225 查看
练习1  在1-20之间生成10个不同的随机数

package 测试;
//快速导入--shift+ctrl+o
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;

/*
* 题目2:
*    获取10个1-20之间的随机数,要求不能重复(flag标志位?)
* 分析:
*    1---Math类的random生成随机数[0.0,1.0)
*    2---集合(保存元素)----equals()判断是否相等
*    3---size()集合个数---10
*    4---toArray---?
*    5---由于目前只学了ArrayList(用此类)
*    6---listIterator迭代器遍历
*
*
* 问题来了----集合嵌套概念(下回分解)
* */
public class MathDemoRandom {
public static void main(String[] args) {
//从集合的角度去实现,Integer类(valueOf或parseInt)从集合转化为数组
List list=new ArrayList();
//10个随机数

//方式1
while(list.size()<10){
//随机数生成:[1,20]---[-128,127]之间---常量池
int random=(int)(Math.random()*20)+1;
list.add(random);//jdk5.0以后的装箱----Integer类型
//只有查过两个元素才去比较
if(list.size()==1){
continue;
}
//判断
for(int i=0;i<list.size()-1;i++){
//每添加一个就遍历
if(list.get(list.size()-1).equals(list.get(i))){
list.remove(list.size()-1);//删除对应的元素
break;//继续进行While判断
}
}
}
//生成10个随机数后将其转换为数组---toArray()
System.out.println(list);//集合输出的形式
Object[] a=list.toArray();
System.out.println("分割线------------------------");

//方式2
//创建迭代器对象(List特有的)
ListIterator iterator = list.listIterator();
while(iterator.hasNext()){
Integer integer=(Integer)iterator.next();
int temp=integer.intValue();
System.out.print(temp+" ");
}

}
}
练习2

package 测试;
//学生类
public class Student{
private String name;
private int age;

public Student() {
// ctrl+alt+s---c----默认构造方法
super();
}

public Student(String name, int age) {
//ctrl+alt+s---o---有参的构造方法
super();
this.name = name;
this.age = age;
}

//ctrl+alt+s---r----SetXXX,GetXXX方法
public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

}


测试类

package 测试;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;

//使用ArrayList集合存储自定义对象并遍历(三种方式去实现)
public class ArrayListDemo {
public static void main(String[] args) {
List list=new ArrayList();
Student a1=new Student("张三",23);
Student b1=new Student("李四",24);
Student c1=new Student("王五",25);
Student d1=new Student("麻六",26);
//向集合添加元素
list.add(a1);//向上转型
list.add(b1);
list.add(c1);
list.add(d1);
//明白一点:此时List集合中的元素类型是Object,所以get()获得的是object对象

//方式1--for循环--get()+size()
for(int i=0;i<list.size();i++){
Student student=(Student)list.get(i);
System.out.print(student.getName()+":"+student.getAge()+"--"+" ");
}
System.out.println();

//方式2---大众化的Iterator
Iterator iterator=list.iterator();
while(iterator.hasNext()){
Student student=(Student)iterator.next();
System.out.print(student.getName()+":"+student.getAge()+"--"+" ");
}
System.out.println();

//方式3---List特有的ListIterator
ListIterator listIterator = list.listIterator();
while(listIterator.hasNext()){
Student student=(Student)listIterator.next();
System.out.print(student.getName()+":"+student.getAge()+"--"+" ");
}
System.out.println();

//方式4---for循环(老美常用)
//方式3与方式4的区别:方式4由于迭代器对象是在方法内创建的,更节省内存,但我们更倾向于使用方式3
for(Iterator iterator1=list.iterator();iterator1.hasNext();){
Student student=(Student)iterator1.next();
System.out.print(student.getName()+":"+student.getAge()+"--"+" ");
}

}
}


练习3

package 测试;

public class Demo1 {
public static void main(String[] args) {
String s1 = new String("hello");
String s2 = new String("hello");
System.out.print(s1 == s2);//地址
System.out.print(",");
System.out.println(s1.equals(s2));//内容
}
}
/* 明白一点:new String在方法区在堆内存开辟空间,而不是在常量池
* 结果:false,true
*/
练习4

package 测试;

public class Demo2 {
public static void main(String arg[]) {
StringBuffer a = new StringBuffer("A");
StringBuffer b = new StringBuffer("B");
operate(a, b);//调用方法
System.out.println(a + "," + b);
}
static void operate(StringBuffer a, StringBuffer b) {
a.append(b);//x变了,y不变→x:AB---y:B
b = a;//x、y都指向x的对象--→x:AB---y:AB
}
}
/* 明白一点StringBuffer未创建新的对象
* 结果:AB,B
* 分析是不是很惊奇,为何不是AB,AB---理解上在方法区开辟了一个新的变量x,y--方法结束后,引用断开(被垃圾回收)
* 如果带点迷惑性,将x,y变成a,b呢?你还会"晕倒"吗?
*/
练习5

package 测试;

public class Demo3 {
public static void main(String[] args) {
String str1 = "This is a test!";
StringBuffer str2 = new StringBuffer("This is a test!");
str1 = str1 + "Hi";
str2.append("Hi");
System.out.println("str1 == " + str1);
System.out.println("str2 == " + str2);
}
}
/* 结果:str1 == This is a test!Hi
*     str2 == This is a test!Hi
* 分析:常量池,堆内存,直接赋值(对象不可改变,只能去创建新的对象)
*
**/
练习6

package 测试;

public class TestValue {
private static int a;//(1)

public static void main(String[] args) {//(2)
modify(a);//(3)
System.out.println(a);//(5)
}

public static void modify(int a) {//(4)
a++;
}

}
/*
* 结果:0
* 分析:成员变量---系统会根据对应数据类型赋值
*     了解静态变量的初始化方式--→熟知的由静态代码块和定义时赋值
*     关于成员方法----使用时才去调用(不管是否静态)
*     关于类加载,在静态方法区,先去加载类,再去加载静态成员(对象,变量,静态代码块---不分先后)
*
*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  练习题 静态
相关文章推荐