1,本题考察栈中的数据不能通过方法的形式修改,基本数据类型都是存储在栈中的,String是复合类型,存储在字符串常量池中,所以也不可以通过方法的方式修改本身.
@Test public void TestChange(){ String name="yin"; int age=20; changeDate(name,age); System.out.println("查看name值是否改变:"+name+"*"+age);//输出name为:yin*20 } public void changeDate(String name,int age){ name = "yinyanling"; age = 26; }
2.本题考查switch和break的用法,switch语句就是一个多条件选择执行语句,简称开关语句,类似于if.. else if.. else 语句;
使用switch语句有第两点必须注意:
一.在每一个分支里面都必须写break,此语句表示退出整个switch()循环;
如果不使用break语句则所有的操作将在第一个满足条件之后的语句全部输出,直到遇到break语句为止; 下面例子中将会从条件满足5的地方往后全部执行,直到遇到break为止结果输出250
二.switch选择条件只能是数字或者字符或者枚举类型.
1 public void testSwitch(){ 2 int num1 = 5; 3 int result = 2; 4 switch(num1){ 5 case 0: 6 result = num1*result; 7 case 3: 8 result = num1*result; 9 case 5: 10 result = num1*result;//10 11 case 7: 12 result = num1*result;//50 13 case 10: 14 result = num1*result;//250 15 } 16 System.out.println(result);//输出结果250 17 18 }
3,本题考查ArrayList的存储结构为数组类型 如果在遍历的过程中删除某个元素将会报 并发修改异常 (java.util.ConcurrentModificationException)
1 public void TestList(){ 2 List<Integer> list = new ArrayList<Integer>(); 3 for(int i=0;i<5;i++){ 4 list.add(i); 5 } 6 for(int a:list){ 7 if(a == 1){ 8 list.remove(a); 9 } 10 } 11 System.out.println(list.size()); 12 }
@Test public void testList2(){ ArrayList<Integer> list = new ArrayList<Integer>(); for(int i=0;i<5;i++){ list.add(i); } Iterator<Integer> iterator = list.iterator(); while(iterator.hasNext()){ Integer integer = iterator.next(); if(integer==2) list.remove(integer); } }
解决java.util.ConcurrentModificationException,
一,将for each循环用迭代器代替
1 public static void main(String[] args) { 2 3 ArrayList<Integer> list = new ArrayList<Integer>(); 4 for(int i=0;i<5;i++){ 5 list.add(i); 6 } 7 8 Iterator<Integer> iterator = list.iterator(); 9 while(iterator.hasNext()){ 10 Integer integer = iterator.next(); 11 if(integer==2) 12 iterator.remove(); //注意这个地方 13 } 14 System.out.println(list.size()); 15 }
二,将for each循环用普通for循环代替
1 public void testList3(){ 2 3 List<Integer> list = new ArrayList<Integer>(); 4 for(int i=0;i<5;i++){ 5 list.add(i); 6 } 7 8 for(int j=0;j<list.size();j++){ 9 if(list.get(j)==1){ 10 list.remove(j); 11 j--; 12 } 13 } 14 System.out.println("集合长度:"+list.size()); 15 }
关于list.remove的问题分析及解决方案详细请查看http://www.cnblogs.com/andy-zhou/p/5339683.html;非常感谢这位爱心朋友
4,在字符串中找出连续最长的数字串,返回这个串的长度,并打印这个最长数字串.
eg:1234abc123465ef,返回6 ,打印123465
1 public void maxStr(){ 2 3 Scanner input = new Scanner(System.in); 4 System.out.println("请输入字符串"); 5 String str=input.nextLine(); 6 7 String str1=""; 8 for(char ch:str.toCharArray()){ 9 10 if(ch>='0' && ch<='9'){ 11 12 str1+=ch; 13 14 }else{ 15 16 str1+="a"; 17 } 18 } 19 20 String[] str2=str1.split("a"); 21 int max=0;//最长数字串的长度 22 int index=0;//最长数字串所在数组的下标 23 for(int i=0;i<str2.length;i++){ 24 25 max=str2[i].length()>max?str2[i].length():max; 26 index=i; 27 28 } 29 30 System.out.println("最长的数字串为:"+str2[index]+" 长度为:"+max); 31 }
4,约瑟夫环是一个数学的应用问题: 已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列; 他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。
1 @Test 2 public void test(){ 3 4 putDate(1000,3); 5 } 6 /** 7 * @param n个数据 8 * @param 第 m 个数据删除(出局) 9 */ 10 11 public void putDate(int n,int m){ 12 13 /*List<Integer> list = new ArrayList<Integer>();*/ 14 15 LinkedList<Integer> list = new LinkedList<Integer>();//向集合中添加、删除(add、remove)数据 使用Linkedlist优于Arraylist,因为ArrayList要移动数据 16 for(int i = 0; i < n; i++){ 17 list.add(i); 18 } 19 20 int count = 1; 21 loopDate(list,m, count); 22 } 23 24 /** 25 * 按删除(出局)顺序存放数据 26 */ 27 private static StringBuffer strBuffer = new StringBuffer(""); 28 29 /** 30 * @param list 原始数据集合 31 * @param 第 m 个数据删除(出局) 32 * @param count 中间变量 33 */ 34 public static void loopDate(LinkedList<Integer> list, int m, int count){ 35 36 int leng = list.size(); 37 if(leng>1){ 38 39 for(int i=0; i<leng; i++){ 40 41 if(count == m){ 42 43 strBuffer.append(list.get(i)).append(","); 44 list.remove(i); 45 leng = list.size(); 46 i--; 47 count = 0; 48 49 } 50 51 count++; 52 } 53 54 //让链表返回头部 55 loopDate(list,m,count); 56 57 }else{ 58 strBuffer.append(list.get(0)); 59 60 System.out.println("出列顺序为:"+strBuffer.toString()); 61 System.out.println("最后一位出列的数字是:"+list.get(0)); 62 } 63 }
5,集合转成数组
1 public void listToArray1(){ 2 3 List list=new ArrayList(); 4 list.add("aa"); 5 list.add("bb"); 6 //方法一 7 Object[] array=list.toArray(); 8 //方法二 也可给数组指定大小 9 String[] array1=(String[]) list.toArray(new String[list.size()]); 10 //方法三 通过循环遍历将集合转换成数组 11 12 }
6,数组转集合
1 public void arrayToList(){ 2 String[] array={"aa","bb"}; 3 List list=new ArrayList(); 4 //方法一 5 Collections.addAll(list, array); 6 //方法二 7 List<String> List1 = Arrays.asList(array); 8 //另:Arrays.asList()返回一个受指定数组支持的固定大小的列表。所以不能做Add、Remove等操作。 9 List list2 = new ArrayList(Arrays.asList(array));//这样操作就可以了。 10 //方法三 通过笨方法循环遍历将数组转集合 11 }