1.需求:请设计一个方法,可以实现获取任意范围内的随机数。
package homework.day_13;
import java.util.Scanner;
public class RandomDemo {
public static void main(String[] args) {
//创建键盘录入对象
Scanner sc = new Scanner(System.in);
//录入并接收对象
System.out.println("请输入start的值:");
int start = sc.nextInt();
System.out.println("请输入end的值:");
int end = sc.nextInt();
//调用产生随机数的方法
int result = getRandom(start,end);
System.out.println("result="+result);
}
public static int getRandom(int start,int end){
//int nummer = (int)(Math.random()*100)+1;//产生1-100的随机数
int num = (int)(Math.random()*(end - start + 1))+start;
return num;
}
}
2.下面代码执行的结果是:
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));
}
}
package homework.day_13;
import java.util.Scanner;
public class RandomDemo {
public static void main(String[] args) {
//创建键盘录入对象
Scanner sc = new Scanner(System.in);
//录入并接收对象
System.out.println("请输入start的值:");
int start = sc.nextInt();
System.out.println("请输入end的值:");
int end = sc.nextInt();
//调用产生随机数的方法
int result = getRandom(start,end);
System.out.println("result="+result);
}
public static int getRandom(int start,int end){
//int nummer = (int)(Math.random()*100)+1;//产生1-100的随机数
int num = (int)(Math.random()*(end - start + 1))+start;
return num;
}
}
false,true
分析:"=="比较的是两个对象的地址值,new的两个对象在堆内存的地址值不一样;"equals()"方法比较的是两个对象的地址值,但是String类底层重写了equals方法,实际比较的是两个对象的值。
3:下面代码执行的结果是:
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 x, StringBuffer y) {
x.append(y);//缓冲区的值改变
y = x; //缓冲区不变,引用改变,但方法结束后局部变量消失,所以引用断开
}
AB,B
分析:StringBuffer会构造一个字符串缓冲区,对于append()没有创建新的对象,在原来的对象中添加内容;方法结束后,局部变量消失
4、下列代码的执行结果是:
String str1 = "This is a test!";StringBuffer str2 =new StringBuffer( "This is a test!");
str1 = str1+"Hi"; //字符串常量赋值给字符串对象,最终str1的地址值发生了变化,不是“String str1 = "This is a test!";”时的地址值
str2.append("Hi");//append()字符串缓冲区的值改变
System.out.println("str1 == " + str1);
System.out.println("str2 == " + str2);
结果:
str1==This is a test!Hi
str2==This is a test!Hi
str1==This is a test!Hi
str2==This is a test!Hi
分析:字符串的特点:将一个字符串常量赋值给字符串对象,首先在方法区中的字符串常量池中找有没有这个值,有就返回地址值,没有,就在其中开辟空间。
5:下面代码能最后打印的值是?
public class TestValue {private static int a;
public static void main(String[] args) {
modify(a);
System.out.println(a);
}
public static void modify(int a) {
a++;
}
}
A)编译错误 B)null C)0 D)1
c)
分析:成员变量,当没有初始化时,系统会根据数据类型初始化,静态成员变量的值一经赋值就不再改变。
6:集合的嵌套遍历
需求:我们班有学生,每一个学生是不是一个对象。所以我们可以使用一个集合表示我们班级的学生。ArrayList<Student>
但是呢,我们旁边是不是还有班级,每个班级是不是也是一个ArrayList<Student>。
而我现在有多个ArrayList<Student>。也要用集合存储,怎么办呢?
定义一个大集合 ArrayList<ArrayList<Student>>
package homework.day_13;
import java.util.ArrayList;
/**
*集合的嵌套:ArrayList<ArrayList<Student>>
*/
public class ArrayListDemo {
public static void main(String[] args) {
// 创建大集合对象
ArrayList<ArrayList<Student>> bigArrayList = new ArrayList<ArrayList<Student>>();
//创建第一个班级的学生集合
ArrayList<Student> firstArrayList = new ArrayList<Student>();
//创建学生对象
Student s1 = new Student("zhang",13);
Student s2 = new Student("wang",14);
//给结合添加成员
firstArrayList.add(s1);
firstArrayList.add(s2);
//把第一个班级存储到学生系统中
bigArrayList.add(firstArrayList);
//创建第二个班级的学生集合
ArrayList<Student> secondArrayList = new ArrayList<Student>();
//创建学生对象
Student s3 = new Student("li",15);
Student s4 = new Student("zhao",16);
//给结合添加成员
secondArrayList.add(s3);
secondArrayList.add(s4);
//把第二个班级存储到学生系统中
bigArrayList.add(secondArrayList);
//遍历
for(ArrayList<Student> array : bigArrayList){
for(Student s : array){
Student stu = s;
System.out.println(stu.getName()+"----"+stu.getAge());
}
}
}
}
7.获取10个1-20之间的随机数,要求不能重复
package homework.day_13;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Random;
/**
* 2:获取10个1-20之间的随机数,要求不能重复
* */
public class RandomTest {
public static void main(String[] args) {
// 创建产生随机数的对象
Random random = new Random();
//使用集合存储产生的随机数,list集合中的元素可以重复
List list = new ArrayList();
//定义一个统计变量
int count = 0;
//判断统计变量是否小于10
while(count<10){
//生成一个随机数
int num = random.nextInt(20)+1;
//判断该随机数在集合中是否存在
if(!list.contains(num)){
//不存在,将随机数添加到集合中,并且统计变量++
list.add(num);
count++;
}
}
//遍历集合
//获取迭代器对象
Iterator it = list.iterator();
while(it.hasNext()){
System.out.print(it.next()+" ");
}
}
}
8.使用ArrayList集合存储自定义对象并遍历(三种方式去实现)
package homework.day_13;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
public class ArrayListTest {
public static void main(String[] args) {
// 创建集合对象
List list = new ArrayList();
//创建学生对象
Student s1 = new Student("zhang",13);
Student s2 = new Student("wang",14);
Student s3 = new Student("zhao",15);
//给集合添加元素
list.add(s1);
list.add(s2);
list.add(s3);
//遍历集合元素
//方式1:使用Iterator
Iterator it = list.iterator();
while(it.hasNext()){
Student s =(Student)it.next();
System.out.println(s.getName()+"-----"+s.getAge());
}
//方式2:使用ListIterator
ListIterator lit = list.listIterator();
while(lit.hasNext()){
Student s =(Student)lit.next();
System.out.println(s.getName()+"-----"+s.getAge());
}
//倒序遍历
while(lit.hasPrevious()){
Student s =(Student)lit.previous();
System.out.println(s.getName()+"-----"+s.getAge());
}
//方式3:一般的集合遍历(for循环)
for(int i=0;i<list.size();i++){
Student s = (Student)list.get(i);
System.out.println(s.getName()+"-----"+s.getAge());
}
}
}
package homework.day_13;
public class Student {
private String name;
private int age;
public Student() {
super();
// TODO Auto-generated constructor stub
}
public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}
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;
}
}