我的基础测试题及答案

-----------android培训java培训、java学习型技术博客、期待与您交流!------------


1、 以下代码哪个是正确的?为什么?


a. byte b = 1 + 1;     
b. byte b = 1; b = b + 1;
c. byte b = 1; b = b += 1;    
d. byte b = 1; b = ++b;  
a,c,d正确;
选项b中,b+1的结果默认转换为int型,int型不能直接转换为byte型,需强制转换。应改为:byte b=1;b=(byte)(b+1);
选项c中,b+=1包含了一个隐藏的类型转换,相当于 b=(byte)(b+1);
选项d中,b=++b也包含了一个隐藏的类型转换

2、 编程计算3乘8等于几,什么方法效率更高?
package com.jwd.black.test;

/**
 * 编程计算3乘8等于几,什么方法效率更高
 *
 * @author:Jwd
 *
 */
public class Test2 {
    public static void main(String args[]) {
        // 采用移位运算输出结果
        System.out.println(3 << 3);// 左移相当于乘. 左移n位相当于乘2的n次方,左移三位相当于乘8
    }
}



3、 编写一个延迟加载的单例设计模式。
/**
 * 延迟加载的单例设计模式
 * @author jwd
 *
 */
public class LazySingleton {

    private static LazySingleton  instance;      
    private LazySingleton()
    {
        
    }
    
    public   static  LazySingleton  getSingleInstance()
    {
        if (instance == null)
        {
                    instance = new LazySingleton();
        }        
        return instance;
    }    
}



4、 从键盘接受一个数字,列出该数字的中文表示格式,例如:键盘输入123,打印出一二三;键盘输入3103,打印出三一零三。

package com.jwd.black.test;

import java.util.Scanner;

/**
 * 从键盘接受一个数字,列出该数字的中文表示格式,例如:键盘输入123,打印出一二三;键盘输入3103,打印出三一零三。
 *
 * @author Jwd
 *
 */
public class Test4 {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.next();
        String a[] = { "零", "一", "二", "三", "四", "五", "六", "七", "八", "九" };
        for (int i = 0; i < s.length(); i++) {
            int x = s.charAt(i);

            System.out.print(a[x - 48]);
        }

    }
}



5、 编写程序,打印1到100之内的整数,但数字中包含7的要跳过,例如:17、27、71、72
package com.jwd.black.test;

/**
 * 编写程序,打印1到100之内的整数,但数字中包含7的要跳过,例如:17、27、71、72
 *
 * @author jwd
 *
 */
public class Test5 {
    public static void main(String[] args) {
        int i;
        for (i = 0; i < 100; i++) {
            if (i % 10 != 7 && i / 10 != 7)
                System.out.println(i);
        }
    }
}



6、 写一个正则表达式,可以匹配尾号5连的手机号。规则: 第1位是1,第二位可以是数字3458其中之一,后面4位任意数字,最后5位为任意相同的数字。
例如:18601088888、13912366666
[1][3458][0-9]{4}(\\d)\\1{4}

7、 throw和throws有什么区别? try、catch、finally分别在什么情况下使用?
throw语句用来明确地抛出一个“异常”。throws用来标明一个成员函数可能抛出的各种“异常”。
try用来指定一块预防所有“异常”的程序。
紧跟在try程序后面,应包含一个catch子句来指定你想要捕捉的“异常”的类型
Finally为确保一段代码不管发生什么“异常”都被执行一段代码。

8、 编写一个可以获取文件扩展名的函数,形参接收一个文件名字符串,返回一个扩展名字符串。
package com.jwd.black.test;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 * 编写一个可以获取文件扩展名的函数,形参接收一个文件名字符串,返回一个扩展名字符串。
 *
 * @author jwd
 *
 */
public class Test8 {

    public static void main(String[] args) throws IOException {
        System.out.println("请从键盘上随便输入一个带扩展名的文件");
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String s = br.readLine();
        System.out.println(getPath(s));
    }

    public static String getPath(String path) {

        return path == null || path.lastIndexOf(".") == -1 ? null : path
                .substring(path.lastIndexOf(".") + 1);
    }
}



9、 编写程序,该程序启动后用户可以按“yyyy-MM-dd”的格式输入一个日期,程序计算这一天是星期几,并且计算出是一年中的第几天。
1、 以下代码哪个是正确的?为什么?

a. byte b = 1 + 1;     
b. byte b = 1; b = b + 1; 
c. byte b = 1; b = b += 1;    
d. byte b = 1; b = ++b;  
a,c,d正确;
选项b中,b+1的结果默认转换为int型,int型不能直接转换为byte型,需强制转换。应改为:byte b=1;b=(byte)(b+1);
选项c中,b+=1包含了一个隐藏的类型转换,相当于 b=(byte)(b+1);
选项d中,b=++b也包含了一个隐藏的类型转换

2、 编程计算3乘8等于几,什么方法效率更高?
package com.jwd.black.test;

/**
 * 编程计算3乘8等于几,什么方法效率更高
 * 
 * @author:Jwd
 *
 */
public class Test2 {
	public static void main(String args[]) {
		// 采用移位运算输出结果
		System.out.println(3 << 3);// 左移相当于乘. 左移n位相当于乘2的n次方,左移三位相当于乘8
	}
}

3、 编写一个延迟加载的单例设计模式。
/**
 * 延迟加载的单例设计模式
 * @author jwd
 *
 */
public class LazySingleton {

	private static LazySingleton  instance;	  
	private LazySingleton()
	{
		
	}
	
	public   static  LazySingleton  getSingleInstance()
	{
		if (instance == null) 
		{
				    instance = new LazySingleton();
	    }		
		return instance;
	}	
}


4、 从键盘接受一个数字,列出该数字的中文表示格式,例如:键盘输入123,打印出一二三;键盘输入3103,打印出三一零三。

package com.jwd.black.test;

import java.util.Scanner;

/**
 * 从键盘接受一个数字,列出该数字的中文表示格式,例如:键盘输入123,打印出一二三;键盘输入3103,打印出三一零三。
 * 
 * @author Jwd
 *
 */
public class Test4 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		String s = sc.next();
		String a[] = { "零", "一", "二", "三", "四", "五", "六", "七", "八", "九" };
		for (int i = 0; i < s.length(); i++) {
			int x = s.charAt(i);

			System.out.print(a[x - 48]);
		}

	}
}


5、 编写程序,打印1到100之内的整数,但数字中包含7的要跳过,例如:17、27、71、72
package com.jwd.black.test;

/**
 * 编写程序,打印1到100之内的整数,但数字中包含7的要跳过,例如:17、27、71、72
 * 
 * @author jwd
 *
 */
public class Test5 {
	public static void main(String[] args) {
		int i;
		for (i = 0; i < 100; i++) {
			if (i % 10 != 7 && i / 10 != 7)
				System.out.println(i);
		}
	}
}


6、 写一个正则表达式,可以匹配尾号5连的手机号。规则: 第1位是1,第二位可以是数字3458其中之一,后面4位任意数字,最后5位为任意相同的数字。
例如:18601088888、13912366666
[1][3458][0-9]{4}(\\d)\\1{4}

7、 throw和throws有什么区别? try、catch、finally分别在什么情况下使用?
throw语句用来明确地抛出一个“异常”。throws用来标明一个成员函数可能抛出的各种“异常”。 
try用来指定一块预防所有“异常”的程序。
紧跟在try程序后面,应包含一个catch子句来指定你想要捕捉的“异常”的类型
Finally为确保一段代码不管发生什么“异常”都被执行一段代码。

8、 编写一个可以获取文件扩展名的函数,形参接收一个文件名字符串,返回一个扩展名字符串。
package com.jwd.black.test;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 * 编写一个可以获取文件扩展名的函数,形参接收一个文件名字符串,返回一个扩展名字符串。
 * 
 * @author jwd
 *
 */
public class Test8 {

	public static void main(String[] args) throws IOException {
		System.out.println("请从键盘上随便输入一个带扩展名的文件");
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String s = br.readLine();
		System.out.println(getPath(s));
	}

	public static String getPath(String path) {

		return path == null || path.lastIndexOf(".") == -1 ? null : path
				.substring(path.lastIndexOf(".") + 1);
	}
}


9、 编写程序,该程序启动后用户可以按“yyyy-MM-dd”的格式输入一个日期,程序计算这一天是星期几,并且计算出是一年中的第几天。
package com.jwd.black.test;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;

public class Test9 {
	public static void main(String[] args) throws ParseException {
		// 创建键盘输入对象
		Scanner sca = new Scanner(System.in);
		System.out.println("请按照yyyy-MM-dd的格式输入要制定的日期");
		String str = sca.next();// 使用一个字符串接收输入的日期
		SimpleDateFormat simp = new SimpleDateFormat("yyyy-MM-dd");// 创建对象,指定日期格式
		Date dat = simp.parse(str); // 将字符串转换成日期对象
		Calendar cal = Calendar.getInstance();// 创建calendar对象
		cal.setTime(dat);// 设置时间
		int year = cal.get(Calendar.YEAR);// 提取年
		System.out.println("这是" + year + "年");
		int dayofWeek = cal.get(Calendar.DAY_OF_WEEK);
		int dayofyear = cal.get(Calendar.DAY_OF_YEAR);
		String d = null;
		switch (dayofWeek) {
		case 1:
			d = "日";
			break;
		case 2:
			d = "一";
			break;
		case 3:
			d = "二";
			break;
		case 4:
			d = "三";
			break;
		case 5:
			d = "四";
			break;
		case 6:
			d = "五";
			break;
		case 7:
			d = "六";
		}
		System.out.println("这是一年中的第" + dayofyear + "天");
		System.out.println("这一天星期" + d);
	}
}

10、 一位老农带着猫、狗、鱼过河,河边有一条船,每次老农只能带一只动物过河。当老农不和猫狗鱼在一起时,狗会咬猫,猫会吃鱼,当老农和猫狗鱼在一起时,则不会发生这种问题。编程解决猫狗鱼过河问题。

package com.jwd.black.test;

import java.util.LinkedList;

public class Test10 {

	int[] route = new int[16];

	int farmer(int location) {
		if ((location & 0x08) != 0)
			return 1;
		else
			return 0;
	}

	int dog(int location) {
		if ((location & 0x04) != 0)
			return 1;
		else
			return 0;
	}

	int cat(int location) {
		if ((location & 0x02) != 0)
			return 1;
		else
			return 0;
	}

	int fish(int location) {
		if ((location & 0x01) != 0)
			return 1;
		else
			return 0;
	}

	boolean isSafe(int location) {
		if ((farmer(location) != cat(location))
				&& (cat(location) == fish(location)))// 如果农夫不在场且猫和鱼在一起则不安全
			return false;
		if ((farmer(location) != dog(location))
				&& (dog(location) == fish(location)))// 如果农夫不在上且狗和猫在一起则不安全
			return false;
		return true;// 其余情况安全
	}

	public static void main(String[] args) {
		Test10 fcr = new Test10();
		int location = 0x00;
		int newlocation;
		int route[] = new int[16];//从0000-1111总共有16种状态
		for (int i = 0; i < route.length; i++)
			route[i] = -1;//-1在二进制里的表达就是全1
		route[0] = 0;// 首先考虑0000状态
		LinkedList<Integer> ll = new LinkedList<Integer>();
		LinkedList<Integer> route_list = new LinkedList<Integer>();// 存储route[]非零的路线图
		ll.addFirst(location);//将给定元素插入列表开头.
		while (!ll.isEmpty() && route[15] == -1) {
			location = (Integer) ll.removeFirst();//移除并返回此列表的第一个元素
			for (int movers = 1; movers <= 8; movers <<= 1) {
				if ((0 != (location & 0x08)) == (0 != (location & movers))) {
					newlocation = location ^ (0x08 | movers);
					if (fcr.isSafe(newlocation) && (route[newlocation] == -1)) {
						route[newlocation] = location;
						ll.addFirst(newlocation);
					}
				}
			}
		}
		if (route[15] != -1)
		// 到达最终状态
		{
			for (location = 15; location >= 0; location = route[location]) {
				if (location != 0)
					route_list.addFirst(location);				
				else {
					route_list.addFirst(location);
					break;
				}
			}
		} else
			System.out.println("No solution.\n");
		// 问题无解
		int length = route_list.size();
		for (int i = 0; i < length; i++) {
			int lo = (Integer) route_list.removeLast();//移除并返回此列表的最后一个元素
			System.out.print("第" + i + "步,河的这边还有: ");
			if (fcr.farmer(lo) == 1)
				System.out.print("农夫 ");
			if (fcr.dog(lo) == 1)
				System.out.print("狗 ");
			if (fcr.cat(lo) == 1)
				System.out.print("猫 ");
			if (fcr.fish(lo) == 1)
				System.out.print("鱼");
			System.out.println();
			System.out.print("河的对岸有: ");
			if (fcr.farmer(lo) == 0)
				System.out.print("农夫 ");
			if (fcr.dog(lo) == 0)
				System.out.print("狗 ");
			if (fcr.cat(lo) == 0)
				System.out.print("猫 ");
			if (fcr.fish(lo) == 0)
				System.out.print("鱼");
			System.out.println();
			System.out.println();
		}
	}
}






10、 一位老农带着猫、狗、鱼过河,河边有一条船,每次老农只能带一只动物过河。当老农不和猫狗鱼在一起时,狗会咬猫,猫会吃鱼,当老农和猫狗鱼在一起时,则不会发生这种问题。编程解决猫狗鱼过河问题。

1、 以下代码哪个是正确的?为什么?

a. byte b = 1 + 1;     
b. byte b = 1; b = b + 1; 
c. byte b = 1; b = b += 1;    
d. byte b = 1; b = ++b;  
a,c,d正确;
选项b中,b+1的结果默认转换为int型,int型不能直接转换为byte型,需强制转换。应改为:byte b=1;b=(byte)(b+1);
选项c中,b+=1包含了一个隐藏的类型转换,相当于 b=(byte)(b+1);
选项d中,b=++b也包含了一个隐藏的类型转换

2、 编程计算3乘8等于几,什么方法效率更高?
package com.jwd.black.test;

/**
 * 编程计算3乘8等于几,什么方法效率更高
 * 
 * @author:Jwd
 *
 */
public class Test2 {
	public static void main(String args[]) {
		// 采用移位运算输出结果
		System.out.println(3 << 3);// 左移相当于乘. 左移n位相当于乘2的n次方,左移三位相当于乘8
	}
}

3、 编写一个延迟加载的单例设计模式。
/**
 * 延迟加载的单例设计模式
 * @author jwd
 *
 */
public class LazySingleton {

	private static LazySingleton  instance;	  
	private LazySingleton()
	{
		
	}
	
	public   static  LazySingleton  getSingleInstance()
	{
		if (instance == null) 
		{
				    instance = new LazySingleton();
	    }		
		return instance;
	}	
}


4、 从键盘接受一个数字,列出该数字的中文表示格式,例如:键盘输入123,打印出一二三;键盘输入3103,打印出三一零三。

package com.jwd.black.test;

import java.util.Scanner;

/**
 * 从键盘接受一个数字,列出该数字的中文表示格式,例如:键盘输入123,打印出一二三;键盘输入3103,打印出三一零三。
 * 
 * @author Jwd
 *
 */
public class Test4 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		String s = sc.next();
		String a[] = { "零", "一", "二", "三", "四", "五", "六", "七", "八", "九" };
		for (int i = 0; i < s.length(); i++) {
			int x = s.charAt(i);

			System.out.print(a[x - 48]);
		}

	}
}


5、 编写程序,打印1到100之内的整数,但数字中包含7的要跳过,例如:17、27、71、72
package com.jwd.black.test;

/**
 * 编写程序,打印1到100之内的整数,但数字中包含7的要跳过,例如:17、27、71、72
 * 
 * @author jwd
 *
 */
public class Test5 {
	public static void main(String[] args) {
		int i;
		for (i = 0; i < 100; i++) {
			if (i % 10 != 7 && i / 10 != 7)
				System.out.println(i);
		}
	}
}


6、 写一个正则表达式,可以匹配尾号5连的手机号。规则: 第1位是1,第二位可以是数字3458其中之一,后面4位任意数字,最后5位为任意相同的数字。
例如:18601088888、13912366666
[1][3458][0-9]{4}(\\d)\\1{4}

7、 throw和throws有什么区别? try、catch、finally分别在什么情况下使用?
throw语句用来明确地抛出一个“异常”。throws用来标明一个成员函数可能抛出的各种“异常”。 
try用来指定一块预防所有“异常”的程序。
紧跟在try程序后面,应包含一个catch子句来指定你想要捕捉的“异常”的类型
Finally为确保一段代码不管发生什么“异常”都被执行一段代码。

8、 编写一个可以获取文件扩展名的函数,形参接收一个文件名字符串,返回一个扩展名字符串。
package com.jwd.black.test;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 * 编写一个可以获取文件扩展名的函数,形参接收一个文件名字符串,返回一个扩展名字符串。
 * 
 * @author jwd
 *
 */
public class Test8 {

	public static void main(String[] args) throws IOException {
		System.out.println("请从键盘上随便输入一个带扩展名的文件");
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String s = br.readLine();
		System.out.println(getPath(s));
	}

	public static String getPath(String path) {

		return path == null || path.lastIndexOf(".") == -1 ? null : path
				.substring(path.lastIndexOf(".") + 1);
	}
}


9、 编写程序,该程序启动后用户可以按“yyyy-MM-dd”的格式输入一个日期,程序计算这一天是星期几,并且计算出是一年中的第几天。
package com.jwd.black.test;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;

public class Test9 {
	public static void main(String[] args) throws ParseException {
		// 创建键盘输入对象
		Scanner sca = new Scanner(System.in);
		System.out.println("请按照yyyy-MM-dd的格式输入要制定的日期");
		String str = sca.next();// 使用一个字符串接收输入的日期
		SimpleDateFormat simp = new SimpleDateFormat("yyyy-MM-dd");// 创建对象,指定日期格式
		Date dat = simp.parse(str); // 将字符串转换成日期对象
		Calendar cal = Calendar.getInstance();// 创建calendar对象
		cal.setTime(dat);// 设置时间
		int year = cal.get(Calendar.YEAR);// 提取年
		System.out.println("这是" + year + "年");
		int dayofWeek = cal.get(Calendar.DAY_OF_WEEK);
		int dayofyear = cal.get(Calendar.DAY_OF_YEAR);
		String d = null;
		switch (dayofWeek) {
		case 1:
			d = "日";
			break;
		case 2:
			d = "一";
			break;
		case 3:
			d = "二";
			break;
		case 4:
			d = "三";
			break;
		case 5:
			d = "四";
			break;
		case 6:
			d = "五";
			break;
		case 7:
			d = "六";
		}
		System.out.println("这是一年中的第" + dayofyear + "天");
		System.out.println("这一天星期" + d);
	}
}

10、 一位老农带着猫、狗、鱼过河,河边有一条船,每次老农只能带一只动物过河。当老农不和猫狗鱼在一起时,狗会咬猫,猫会吃鱼,当老农和猫狗鱼在一起时,则不会发生这种问题。编程解决猫狗鱼过河问题。

package com.jwd.black.test;

import java.util.LinkedList;

public class Test10 {

	int[] route = new int[16];

	int farmer(int location) {
		if ((location & 0x08) != 0)
			return 1;
		else
			return 0;
	}

	int dog(int location) {
		if ((location & 0x04) != 0)
			return 1;
		else
			return 0;
	}

	int cat(int location) {
		if ((location & 0x02) != 0)
			return 1;
		else
			return 0;
	}

	int fish(int location) {
		if ((location & 0x01) != 0)
			return 1;
		else
			return 0;
	}

	boolean isSafe(int location) {
		if ((farmer(location) != cat(location))
				&& (cat(location) == fish(location)))// 如果农夫不在场且猫和鱼在一起则不安全
			return false;
		if ((farmer(location) != dog(location))
				&& (dog(location) == fish(location)))// 如果农夫不在上且狗和猫在一起则不安全
			return false;
		return true;// 其余情况安全
	}

	public static void main(String[] args) {
		Test10 fcr = new Test10();
		int location = 0x00;
		int newlocation;
		int route[] = new int[16];//从0000-1111总共有16种状态
		for (int i = 0; i < route.length; i++)
			route[i] = -1;//-1在二进制里的表达就是全1
		route[0] = 0;// 首先考虑0000状态
		LinkedList<Integer> ll = new LinkedList<Integer>();
		LinkedList<Integer> route_list = new LinkedList<Integer>();// 存储route[]非零的路线图
		ll.addFirst(location);//将给定元素插入列表开头.
		while (!ll.isEmpty() && route[15] == -1) {
			location = (Integer) ll.removeFirst();//移除并返回此列表的第一个元素
			for (int movers = 1; movers <= 8; movers <<= 1) {
				if ((0 != (location & 0x08)) == (0 != (location & movers))) {
					newlocation = location ^ (0x08 | movers);
					if (fcr.isSafe(newlocation) && (route[newlocation] == -1)) {
						route[newlocation] = location;
						ll.addFirst(newlocation);
					}
				}
			}
		}
		if (route[15] != -1)
		// 到达最终状态
		{
			for (location = 15; location >= 0; location = route[location]) {
				if (location != 0)
					route_list.addFirst(location);				
				else {
					route_list.addFirst(location);
					break;
				}
			}
		} else
			System.out.println("No solution.\n");
		// 问题无解
		int length = route_list.size();
		for (int i = 0; i < length; i++) {
			int lo = (Integer) route_list.removeLast();//移除并返回此列表的最后一个元素
			System.out.print("第" + i + "步,河的这边还有: ");
			if (fcr.farmer(lo) == 1)
				System.out.print("农夫 ");
			if (fcr.dog(lo) == 1)
				System.out.print("狗 ");
			if (fcr.cat(lo) == 1)
				System.out.print("猫 ");
			if (fcr.fish(lo) == 1)
				System.out.print("鱼");
			System.out.println();
			System.out.print("河的对岸有: ");
			if (fcr.farmer(lo) == 0)
				System.out.print("农夫 ");
			if (fcr.dog(lo) == 0)
				System.out.print("狗 ");
			if (fcr.cat(lo) == 0)
				System.out.print("猫 ");
			if (fcr.fish(lo) == 0)
				System.out.print("鱼");
			System.out.println();
			System.out.println();
		}
	}
}







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值