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

来源:互联网 发布:淘宝店铺音乐怎么添加 编辑:程序博客网 时间:2024/06/06 03:11

练习1  在1-20之间生成10个不同的随机数

package 测试;//快速导入--shift+ctrl+oimport 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:Bb = 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 * 分析:成员变量---系统会根据对应数据类型赋值 *     了解静态变量的初始化方式--→熟知的由静态代码块和定义时赋值 *     关于成员方法----使用时才去调用(不管是否静态) *     关于类加载,在静态方法区,先去加载类,再去加载静态成员(对象,变量,静态代码块---不分先后) *  */