java常见笔试编程题(一)

java常见笔试编程题(一)
  1. 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。但是要保证汉字不被截半个,例如“人abc”,应该截为“人ab”;输入“人abc们”,应该截为“人abc”,而不是截为“人ab+们的半个”
public class Test01 {
	//按照字节数截取字符串
	public static void main(String[] args) {
		String str="我ABC";
		String str1="我ABC汉DEF";
		subStringByBytes(str, 4);
		subStringByBytes(str1, 6);
	}
	public static void subStringByBytes(String str,int len){
		if(str==null){
			return;
		}
		
		if(len>str.length()){
			len=str.length();
		}
		
		byte [] bytes=str.getBytes();
		
		 //对是否出现截半做分类处理,如果出现了截半情况,则asc码值小于0
	       if(bytes[len]<0) {
	           String result = new String(bytes,0, len--);
	           System.out.println("出现了截半情况,结果为:" + result);
	       } else {
	          String result = new String(bytes,0,len);
	          System.out.println("没有出现截半情况,结果为:" + result);
	       }

	}
}
  1. 输出指定范围内有多少个素数
public class Test02 {
	public static void main(String[] args) {
		method(101,200);
	}

	public static void method(int start,int end){
		int count=0;
		boolean flag=false;
		for(int i=start;i<=end;i++){
			for(int j=2;j<i;j++){
				if(i%j==0){
					flag=false;
					break;
				}else{
					flag=true;
				}
			}
			if(flag){
				count++;
				System.out.println(i);
			}
		}
		
		System.out.println(start+"到"+end+"之间有"+count+"个素数");
		
	}
}

3.判断一个数是不是2的次方

public class Test03 {
	public static void main(String[] args) {
		boolean b = method(16);
		if(b){
			System.out.println("是");
		}else{
			System.out.println("不是");
		}
	}
	
	public static boolean method(int num){
		boolean flag = false;
		if((num&(num-1))==0&&num>0){
			flag=true;
		}
		return flag;
		
	}
//	public static boolean method(int num){
//		int k = 1;
//		boolean flag = false;
//		while(k <= num) {
//			if(num == k){
//				flag = true;
//			}
//			k = k * 2;
//		}
//
//		return flag;
//		
//	}
}
  1. 每一个偶数都能拆分成两个素数之和
public class Test04 {
	public static void main(String[] args) {
		int num=24;
		if(num%2==0&&num>0){
			method(num);
		}
	}

	public static void method(int num){
		if(num!=2){
			List<Integer> primes = getPrime(num);
			for (int i = 0; i < primes.size(); i++) {
				for (int j = 0; j < primes.size(); j++) {
					if(primes.get(i)+primes.get(j)==num){
						System.out.println(primes.get(i)+"+"+primes.get(j)+"="+num);
					}
				}
			}
		}else if(num==2){
			System.out.println("2是素数,且不能拆分");
		}
	}

	public static List<Integer> getPrime(int num){
		List<Integer> list=new ArrayList<>();
		for(int i=2;i<=num;i++){
			boolean b=true;
			for(int j=2;j<i;j++){
				if(i%j==0){
					b=false;
					break;
				}
			}
			if (b) {
				list.add(i);
			}
		}
		return list;
	}
}

5.代码实现jdbc,并进行基本的操作

public class Test05 {
	public static void main(String[] args) {
		try {
			Class.forName("com.mysql.jdbc.Driver");
			Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "");
			Statement statement = conn.createStatement();
			String sql="select s_id from student";
			ResultSet rs = statement.executeQuery(sql);
			while(rs.next()){
				int id = rs.getInt(1);
				System.out.println(id);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
  1. 有一个字符串,其中包含中文字符、英文字符和数字字符,请统计和打印出各个字符的个数。
public class Test06 {
	public static void main(String[] args) {
		String str="中国 aadf 的111萨 bbb 菲的 zz 萨菲";
		Map<String, Integer> map = method(str);
		Set<Entry<String,Integer>> set=map.entrySet();
		for(Entry<String,Integer> e:set){
			System.out.println(e.getKey()+":"+e.getValue());
		}
	}
	public static Map<String,Integer> method(String str){
		Map<String,Integer> map=new HashMap<>();
		for(int i=0;i<str.length();i++){
			char c=str.charAt(i);
			Integer num=map.get(String.valueOf(c));
			if(num==null){
				num=1;
			}else{
				num=num+1;
			}
			map.put(String.valueOf(c), num);
		}
		return map;
	}
}

7.有数组 a[n],将数组元素顺序颠倒

public class Test07 {
	public static void main(String[] args) {
		int [] a={1,2,3,4,5};
		int[] newArray = method(a);
		System.out.println(Arrays.toString(newArray));
	}
	public static int[] method(int [] a){
		int temp;
		int len=a.length;
		for(int i=0;i<len/2;i++){
			temp=a[i];
			a[i]=a[len-1-i];
			a[len-1-i]=temp;
		}
		return a;
	}
}

8.金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)->(一千零一拾一元整)输出。

public class Test08 {
	public static void main(String[] args) {
		int money=2350230;
		String renMingBi = method(money);
		System.out.println(renMingBi);
	}
	
	public static String method(int money){
		char[] data = new char[]{'零','壹','贰','叁','肆','伍','陆','柒','捌','玖'};
		char[] units = new char[]{'元','拾','佰','仟','万','拾','佰','仟','亿'};
		StringBuffer sb=new StringBuffer();
		int unit=0;
		while(money!=0){
			sb.insert(0, units[unit++]);
			int num=money%10;
			sb.insert(0, data[num]);
			money/=10;
		}
		return sb.toString();
	}
}
  1. 给定一个字符串,打印 这个字符串的全排列。例如,输入为abc,输出为: abc acb bac bca cba cab
public class Test9 {
	public static void main(String[] args){
		String str = "abc";
		List<String> result = new ArrayList<>();
		getAllList(result, str.toCharArray(), 0);
		for(String each : result){
			System.out.println(each);
		}
	}
	public static void getAllList(List<String> result, char[] strs, int begin){
		if(begin == strs.length-1){
			result.add(String.valueOf(strs));
		}
		for(int i = begin; i < strs.length; i++){
			swap(strs, i, begin);
			getAllList(result, strs, begin+1);
			swap(strs, i, begin);
		}
	}

	private static void swap(char[] strs, int index1, int index2) {
		char temp = strs[index1];
		strs[index1] = strs[index2];
		strs[index2] = temp;
	}


}

10.判断一个字符数组元素是否重复

public class Test11 {
	public static void main(String[] args) {
		char[] chars={'1','3','3'};
		System.out.println(method(chars));
	}
	
	public static boolean method(char [] chars){
		boolean flag=true;
		StringBuffer sb=new StringBuffer();
		for(int i=0;i<chars.length;i++){
			sb.insert(0, chars[i]);
		}
		String str=sb.toString();
		for(int i=0;i<str.length();i++){
			if(i!=str.lastIndexOf(str.charAt(i))){
				flag=false;
			}
		}
		return flag;
	}
}
  • 8
    点赞
  • 76
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值