------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
在决定报名黑马之前,自己已经自学了一部分java知识,根据自己情况和认识,决定通过实践找出自己的不知,为此十道测试题成为练兵的开始。
黑马的十道测试题要求如下:
第一题:求斐波那契数列第n项,n<30,斐波那契数列前10项为 1,1,2,3,5,8,13,21,34,55
第2题:定义一个二维int数组,编写代码获取最小元素。
第3题:请列举您了解的一些排序算法,并用Java语言实现一个效率较高的。
第4题:从键盘接受一个数字,列出该数字的中文表示格式,例如:键盘输入123,打印出一二三;键盘输入3103,打印出三一零三。
第5题:使用带缓冲功能的字节流复制文件。
第6题:编写程序,打印1到100之内的整数,但数字中包含7的要跳过,例如:17、27、71、72
第7题:编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符,例如:原始字符串是"abc",打印得到下列所有组合情况:"a" "b" "c"
"ab" "bc" "ca" "ba" "cb" "ac" "abc" "acb" "bac" "bca" "cab" "cba"
第8题: 写出以下代码执行结果,分析为什么?(没有分析结果不得分)
第9题: 写一个正则表达式,可以匹配尾号5连的手机号。
第10题: 一位老农带着猫、狗、鱼过河,河边有一条船,每次老农只能带一只动物过河。
在此,我将附上自己写的代码,水平有限,供大家交流,共同进步。
- package com.itheima;
- import java.util.Scanner;
- /**
- *第一题:求斐波那契数列第n项,n<30,斐波那契数列前10项为 1,1,2,3,5,8,13,21,34,55
- *
- * */
- public class Test1 {
- private static Scanner input;
- public static void main(String[] args) {
- input = new Scanner(System.in);
- System.out.println("请输入一个0~30之内的正整数,程序将计算出裴波那契的相应项之值。");
- //接收用户输入的数值并进行存储
- int come = input.nextInt();
- //对用户输入的值进行条件判断,如果输入有误讲提示并推出
- if((come<0)||(come>=30)){
- System.out.println("输入有误,程序结束");
- return;
- }
- System.out.println("您输入的值为"+come);
- int dispose = fun(come);
- System.out.println("运行结果为"+dispose);
- }
- //斐波那契数列,又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、……在数学上,
- //斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n>=2,n∈N*)
- public static int fun(int come){
- if(come<=1){
- return 1;
- }
- return fun(come-1)+fun(come-2);
- }
- }
- package com.itheima;
- /**
- * 第2题:定义一个二维int数组,编写代码获取最小元素。
- * */
- public class Test2 {
- public static void main(String[] args) {
- //随意定义一个二维数组
- int[][] array = {{3,2,1},{5,8,9,10},{15,64,185,38,79,85}};
- //存储最大值
- int temp = array[0][0];
- //运用循环比较最大值
- for (int i = 0; i < array.length; i++) {
- for (int j = 0; j < array.length; j++) {
- if(array[i][j]<temp){
- temp = array[i][j];
- }
- }
- }
- System.out.println("二维数组的最小元素为:"+temp);
- }
- }
- package com.itheima;
- /**
- * 第3题:请列举您了解的一些排序算法,并用Java语言实现一个效率较高的。
- *
- * */
- public class Test3 {
- public static void main(String[] args) {
- //随意定义一个一维数组
- int[] array = {9,8,6,7,5,3,4,2,1,10,42,75,53,86,91};
- System.out.print("所定义数组为: ");
- for (int i : array) {
- System.out.print(i+" ");
- }
- System.out.println();
- first(array);
- second(array);
- }
- //冒泡法
- public static void first(int[] a){
- for (int i = 0; i < a.length; i++) {
- for (int j = 0; j < a.length-i-1; j++) {
- if(a[j]>a[j+1]){
- int temp = a[j];
- a[j] = a[j+1];
- a[j+1] = temp;
- }
- }
- }
- System.out.print("冒泡法:");
- for (int i : a) {
- System.out.print(i+" ");
- }
- }
- //二分法
- public static void second(int[] a){
- for (int i = 0; i < a.length; i++) {
- int start,end,mid;
- start = 0;
- end = i-1;
- mid = 0;
- int temp = a[i];
- while(start<=end){
- mid = (start + end)/2;
- if(a[mid] > temp){
- end = mid - 1;
- }else{
- start = mid + 1;
- }
- }
- }
- System.out.println();
- System.out.print("二分法:");
- for (int i : a) {
- System.out.print(i+" ");
- }
- }
- }
- package com.itheima;
- import java.util.Scanner;
- /**
- * 第4题:从键盘接受一个数字,列出该数字的中文表示格式,例如:键盘输入123,打印出一二三;键盘输入3103,打印出三一零三。
- *
- * */
- public class Test4 {
- private static Scanner input;
- public static void main(String[] args) {
- System.out.println("请输入阿拉伯数字(限5位),程序将自动转换为相应汉字");
- input = new Scanner(System.in);
- String come = input.next();
- //将由come接收的字符串转换为字符数组
- char[] array = come.toCharArray();
- //用于存放字符串强转后的int数组
- int[] change = new int[array.length];
- for (int i = 0; i < array.length; i++) {
- //转换
- change[i] = (int)array[i] - 48;
- }
- //调用fun方法
- fun(change);
- }
- //实现数字与汉字的对于关系并打印
- public static void fun(int[] tab){
- for (int i = 0; i < tab.length; i++) {
- switch(tab[i]){
- case 0:System.out.print("零");break;
- case 1:System.out.print("一");break;
- case 2:System.out.print("二");break;
- case 3:System.out.print("三");break;
- case 4:System.out.print("四");break;
- case 5:System.out.print("五");break;
- case 6:System.out.print("六");break;
- case 7:System.out.print("七");break;
- case 8:System.out.print("八");break;
- case 9:System.out.print("九");break;
- //实现对数字的判断,如果输入不是阿拉伯数字,提示错误并结束程序
- default:System.out.println("输入错误,程序结束");return;
- }
- }
- }
- }
- package com.itheima;
- import java.io.BufferedInputStream;
- import java.io.BufferedOutputStream;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
- import java.io.IOException;
- /**
- *第五题:使用带缓冲功能的字节流复制文件。
- *
- * */
- public class Test5 {
- public static void main(String[] args) {
- copy("d://C_MySpace//DownSpace//浏览器下载//pictureC.jpg","d://t.jpg");
- System.out.println("succeed");
- }
- public static void copy(String srcName,String copyName){
- File srcfile = new File(srcName);
- File copyfile = new File(copyName);
- int len = -1;
- byte[] bytes = new byte[1024];
- try {
- BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcfile));
- BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(copyfile));
- while((len = bis.read(bytes))!=-1){
- bos.write(bytes, 0, len);
- bos.flush();
- }
- bos.close();
- bis.close();
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
- package com.itheima;
- /**
- *第六题:编写程序,打印1到100之内的整数,但数字中包含7的要跳过,例如:17、27、71、72
- *
- * */
- public class Test6 {
- public static void main(String[] args) {
- //利用循环,完成1-100数字的筛选
- for (int i = 1; i <= 100; i++) {
- //条件筛选
- if(i==7||i/10==7||i%10==7){
- continue;
- }
- System.out.print(i+" ");
- }
- }
- }
- package com.itheima;
- /**
- * 第7题:编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符,例如:
- * 原始字符串是"abc",打印得到下列所有组合情况:
- * "a" "b" "c"
- * "ab" "bc" "ca" "ba" "cb" "ac"
- * "abc" "acb" "bac" "bca" "cab" "cba"
- *
- * */
- public class Test7 {
- public static void main(String[] args) {
- //字符串abc
- String str = "abc";
- //字符串转换为字符数组
- char[] array = str.toCharArray();
- //功能实现函数
- fun(array);
- }
- public static void fun(char[] src){
- //打印"a" "b" "c"
- for (int i = 0; i < src.length; i++) {
- System.out.print(src[i]+" ");
- }
- //换行
- System.out.println();
- //打印"ab" "bc" "ca" "ba" "cb" "ac"
- for (int i = 0; i < src.length; i++) {
- for (int j = 0; j < src.length; j++) {
- //判断去重复
- if(src[i]==src[j]){
- continue;
- }
- System.out.print(src[i]+""+src[j]+" ");
- }
- }
- //换行
- System.out.println();
- //打印"abc" "acb" "bac" "bca" "cab" "cba"
- for (int i = 0; i < src.length; i++) {
- for (int j = 0; j < src.length; j++) {
- for (int j2 = 0; j2 < src.length; j2++) {
- //判断去重复
- if((src[i]==src[j])||(src[i]==src[j2])||(src[j]==src[j2])){
- continue;
- }
- System.out.print(src[i]+""+src[j]+""+src[j2]+" ");
- }
- }
- }
- }
- }
- package com.itheima;
- /**
- * 第8题: 写出以下代码执行结果,分析为什么?(没有分析结果不得分)
- *
- * */
- /**
- * 分析1:自己首先读了一下程序,运行后发现原始的System.out.println(s);与自己的预计有出入,而System.out.println(s == value);
- * 比较简单,因为两个字符串在内存中位置不同,==判断变量时判断的时位置是否相同,equals才是判断字符串内容是否相同,s与value是两个不同对象,所以输出false。
- * 分析2:继续分析substring和replace,因此进行验证1-->"abc"于是进行验证2-->"bc",于是我好像发现了什么,赶快进行验证3-->"axyz",原来substring
- * 和replace对字符串的操作不会覆盖原来的对象,而是产生新对象,而本题中substring和replace操作后并没有将新对象存储或覆盖旧对象,所以导致
- * System.out.println(s);输出对象依然是"abc",与substring与replace操作无关。
- * */
- public class Test8 {
- public static void main(String[] args) {
- String s = "abc";
- s.substring(1);
- // System.out.println("my_1-->"+s);//验证1
- System.out.println("my_2-->"+s.substring(1));//验证2
- s.replace("bc", "xyz");
- System.out.println("my_3-->"+s.replace("bc", "xyz"));//验证3
- System.out.println(s);
- String value = new String ("abc");
- System.out.println(s == value);
- }
- }
- package com.itheima;
- import java.util.Scanner;
- import java.util.regex.Pattern;
- /**
- *第9题: 写一个正则表达式,可以匹配尾号5连的手机号。
- * 规则: 第1位是1,第二位可以是数字3458其中之一,后面4位任意数字,最后5位为任意相同的数字。
- * 例如:18601088888、13912366666
- *
- * */
- public class Test9 {
- public static void main(String[] args) {
- //输入提示
- System.out.println("请输入手机号码,第1位是1,第二位可以是数字3458其中之一,后面4位任意数字,最后5位为任意相同的数字。");
- System.out.println("程序将对号码进行判定");
- //Scanner用于检测输入
- Scanner input = new Scanner(System.in);
- //字符串come用于存储输入字符串
- String come = input.next();
- //Pattern中的matches,括号中为正则表达式,对电话号码进行匹配,返回boolean值
- boolean flag = come.matches("[1][3458]\\d{4}(\\d)\\1{4}");System.out.println(flag);
- //对上一步flag进行判断,true表示号码匹配,false表示不匹配
- if(flag){
- System.out.println("电话号码格式正确");
- }else{
- System.out.println("电话号码格式不正确");
- }
- }
- }
- package com.itheima;
- import java.util.ArrayList;
- /**
- * 第10题: 一位老农带着猫、狗、鱼过河,河边有一条船,每次老农只能带一只动物过河。
- * 当老农不和猫狗鱼在一起时,狗会咬猫,猫会吃鱼,当老农和猫狗鱼在一起时,则不会发生这种问题。编程解决猫狗鱼过河问题。
- *
- * */
- public class Test10 {
- public static void main(String[] args) {
- //存放河岸A(起始位置)现有动物
- ArrayList thisLan = new ArrayList<String>();
- //存放河岸B(起始位置)现有动物
- ArrayList thatLan = new ArrayList<String>();
- //添加动物狗
- thisLan.add("猫");
- //添加动物猫
- thisLan.add("鱼");
- //添加动物鱼
- thisLan.add("狗");
- //老农类,实现所以功能
- Fammer fammer = new Fammer();
- //老农类中的dispose方法,其中调用tothatLan与tothisLan方法
- fammer.dispose(thisLan, thatLan);
- }
- //实现农夫运送动物的功能
- }
- class Fammer{
- //元素缓存,辅助tothatLan和tothisLan进行元素删除与恢复
- private String temp;
- //步骤记录
- private int time = 1;
- //当老农不在时,判断猫狗鱼三者的关系。如果出现狗会咬猫,猫会吃鱼的情况返回false,否则返回true
- public boolean safe(ArrayList<String> a){
- if((a.contains("狗")&&a.contains("猫")) || (a.contains("猫")&&a.contains("鱼"))){
- return false;
- }
- return true;
- }
- //从河岸A向河岸B运送动物的方法
- public void tothatLan(ArrayList<String> tis,ArrayList<String> tat){
- //用于while循环
- boolean flag = true;
- while(true){
- //当河岸A没有动物时说明动物均被带到河岸B
- if(tis.size()==0){
- //提示结束
- System.out.println("结束!");
- return;
- }
- //自动查询符合条件的动物,并带到河岸B
- for (int i = 0; i < tis.size(); i++) {
- //缓存,用于删除与恢复动物
- temp = tis.get(i);
- if(tis.remove(temp)){
- if(this.safe(tis)){
- System.out.println("第"+time+"步,将"+temp+"从河岸A运送到河岸B");
- time++;
- //动物过河
- tat.add(temp);
- temp = null;
- System.out.println(" "+"河岸A有"+tis);
- System.out.println(" "+"河岸B有"+tat);
- return;
- }else{
- //恢复删除
- tis.add(temp);
- continue;
- }
- }else{
- continue;
- }
- }
- }
- }
- //从河岸B向河岸A运送动物的方法,与tothatLan相似
- public void tothisLan(ArrayList<String> tis,ArrayList<String> tat){
- //用于while循环
- boolean flag = true;
- while(flag){
- //当河岸B的动物符合要求或没有动物,便不需要将动物带回河岸A
- if(tat.size()<1 || this.safe(tat)){
- return;
- }
- //自动查询符合条件的动物,并带到河岸A
- for (int i = 0; i < tat.size(); i++) {
- //缓存,用于删除与恢复动物
- temp = tat.get(i);
- if(tat.remove(temp)){
- if(this.safe(tat)){
- System.out.println("第"+time+"步,将"+temp+"从河岸B运送到河岸A");
- time++;
- //动物过河
- tis.add(temp);
- temp = null;
- System.out.println(" "+"河岸A有"+tis);
- System.out.println(" "+"河岸B有"+tat);
- return;
- }else{
- //恢复删除
- tat.add(temp);
- continue;
- }
- }else{
- continue;
- }
- }
- }
- }
- //自动完成动物过河,调用tothatLan和tothisLan的方法
- public void dispose(ArrayList<String> tis,ArrayList<String> tat){
- boolean flag = true;
- while(flag){
- //当河岸A没有动物说明动物全部过河
- if(tis.isEmpty()){
- return;
- }
- this.tothatLan(tis, tat);
- //当河岸A没有动物说明动物全部过河
- if(tis.isEmpty()){
- return;
- }
- this.tothisLan(tis, tat);
- }
- }
- }