java复习题

编程题

1.找出两个字符串中所有共同的字符.

 方法一:(初级)

package diyi;

import java.util.Scanner;

public class hello {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		String s1 = sc.next();
		String s2=sc.next();
		for(int i=0;i<s1.length();i++) {
			for(int j=0;j<s2.length();j++) {
				if(s1.charAt(i)==s2.charAt(j)) {
					System.out.println(s1.charAt(i));
				}
			}
		}
	}

}

 方法二(哈希表): 

集合类中sites.retainAll(sites2)意义上为:sites 删除了不存在于 sites2 的元素

package diyi;

import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;

public class hello {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc=new Scanner(System.in);
		String s1=sc.nextLine();
		String s2=sc.nextLine();
		Set<String> set1=new HashSet<>();
		Set<String> set2=new HashSet<>();
		for(int i=0;i<s1.length();i++) {
			set1.add(s1.substring(i,i+1));
		}
		for(int j=0;j<s2.length();j++) {
			set2.add(s2.substring(j,j+1));
		}
		set1.retainAll(set2);//取交集
		System.out.println(set1);
	}

}

2.用正则表达式识别邮箱地址.

package chapter6;
//用正则表达式识别邮箱地址
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class email {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Pattern p=Pattern.compile("[a-zA-Z0-9_]{1,20}@[a-zA-Z0-9]{2,10}[.](com|cn|org)");
		Scanner sc =new Scanner (System.in);
		String s=sc.next();
		Matcher m=p.matcher(s);
		boolean b=m.matches();
		System.out.println("邮箱地址:"+b);
	}

}

 

3.输入一个字符串,将其中的大写字母变为小写字母,小写字母变为大写字母。

package diyi;

import java.util.Scanner;

public class hello {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		String s = sc.next();
		String s2 = "";
		for (int i = 0; i < s.length(); i++) {
			char ch = s.charAt(i);
			if (ch >= 'A' && ch <= 'Z') {
				ch = (char) (ch + 32);
				s2 += ch;
			}
			else{
				ch = (char) (ch - 32);
				s2 += ch;
			} 
		}
		System.out.println(s2);
	}

}

4.编写一个程序,用Map实现学生成绩单的储存和查询 将成绩进行排序并储存到TreeSet中,求平均成绩最小值和最大值!

package chapter6;

import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;

public class score {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		HashMap<String,Integer> hm=new HashMap<String,Integer>();
		hm.put("xixi", 99);
		hm.put("ww", 22);
		hm.put("xx",33);
		hm.put("aa",100);
		TreeSet ts=new TreeSet();
		Set set=hm.keySet();//保存哈希表键值对中的所有键
		Iterator<Integer> it=set.iterator();//创建构造器对象
		int sum=0;
		while(it.hasNext()) {//遍历set
			int i=hm.get(it.next());//得到每个键对应的值
			ts.add(i);
			sum +=i;
		}
		Iterator<Integer> i=ts.iterator();
		while(i.hasNext()) {
			System.out.println(i.next());
		}
		System.out.println("最大值为:"+Collections.max(ts));
		System.out.println("最小值为:"+Collections.min(ts));
		System.out.println("平均值为:"+sum/ts.size());
	}

}

 5.某一维浮点型数组,有 8 个元素,元素的值要小于 100,每个元素的值通过随机函数赋值,试编程输出其最小值及位置。

方法1: 

package chapter6;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Random;

//某一维浮点型数组,有 8 个元素,元素的值要小于 100,每个元素的值通过随机函数赋
//值,试编程输出其最小值及位置。

public class floatArray {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ArrayList<Float> a=new ArrayList();
		Random r=new Random();
		for(int i=0;i<8;i++) {
			a.add(r.nextFloat()*100);
		}
		System.out.println(a);
		System.out.println("最大值为:"+Collections.max(a));
		for(int i=0;i<8;i++) {
			if(a.get(i)==Collections.max(a)) {
				System.out.println("位置为:"+i);
			}
		}
	}

}

 方法二:采用键值对的方法更为简便

设计题

1. 设计一个 Payable(支付)接口,有一个 pay()方法。 

2. 设计一个 PayAccount(支付账号)抽象类,有成员变量 name(支付平台),有一个带参数的构造方法。

3. 设计一个 WithFacePay(刷脸支付)类继承 PayAccount 类,实现 Payable 接口,有一个带一个参数的构造方法,并重写 pay()方法。

4. 设计一个 ScanQRCodePay(扫码支付)类继承 PayAccount 类,实现 Payable 接口,有一个带一个参数的构造方法,并重写 pay()方法。 

5. 设计一个 PayTest 类,在 main 方法中,先从键盘输入三种不同的支付方式存入到ArrayList 中,然后从 ArrayList 中通过调用各种支付方式的 pay 方法输出支付平台以及支付方式。 

package 支付;

public interface Payable {//支付接口
	void pay();//抽象的支付方法
}
package 支付;

abstract public class PayAccount {//抽象的支付账号类
	protected String name;//支付平台

	public PayAccount(String name) {//构造方法
		this.name = name;
	}
}
package 支付;
//刷脸支付类
public class WithFacePay extends PayAccount implements Payable{

	public WithFacePay(String name) {//构造函数
		super(name);
		// TODO Auto-generated constructor stub
	}

	@Override
	public void pay() {//重写接口抽象pay()方法
		// TODO Auto-generated method stub
		System.out.println("使用"+name+"刷脸支付");
	}
	
}
package 支付;
//扫码支付类
public class ScanQRCodePay extends PayAccount implements  Payable {

	public ScanQRCodePay(String name) {//构造函数
		super(name);
		// TODO Auto-generated constructor stub
	}

	@Override
	public void pay() {//重写接口抽象pay()方法
		// TODO Auto-generated method stub
		System.out.println("使用"+name+"扫码支付");
	}

}
package 支付;

import java.util.ArrayList;
import java.util.Scanner;

public class PayTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ArrayList<Payable> a=new ArrayList<Payable>();
		Scanner sc=new Scanner(System.in);
		String name=null;
		String type=null;
		for(int i =0;i<3;i++) {
			name=sc.next();
			type=sc.next();
			if(type.endsWith("刷脸")) {
				a.add(new WithFacePay(name));
			}
			else {
				a.add(new ScanQRCodePay(name));
			}
		}
		for(int i=0;i<3;i++) {
			a.get(i).pay();
		}
		
	}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值