编程题
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();
}
}
}