3.81.请写出线程的实现方式
参考答案:
线程有两种实现方式,分别是继承与Thread类和实现Runnable接口.
方式一:继承于Thread类,代码如下所示:
class Person1 extends Thread{
public void run(){//覆盖Thread的run()方式,提供具体的过程
System.out.println(this.getName() + "," + this.getId());
for(int i = 0; i < 100; i++){
System.out.println("做弹弓子打你家玻璃!");
}
System.out.println("弹弓子over!");
}
}
方式二:创建一个类实现Runnable接口,重写run方法以实现了Runnable接口的方法,代码如下所示:
class Person1 implements Runnable{
public void run(){//实现Runnable的run()方法,提供具体的过程
System.out.println(this.getName + "," + this.getId());
for(int i = 0; i < 100; i++){
System.out.println("做弹弓子打你家玻璃!");
}
System.out.println("弹弓子over!");
}
}
上述类的对象可以作为创建Thread类对象的构造函数的参数.
3.82.字符串”sh24sdgf909sdf8”,不改变字符串对象,写一个方法,返回”shsdgfsdf”
参考答案:
public String deleteDigital(String str){
return str.replaceAll("\\d+" , "");
}
3.83.”driver|name|id|”写一个函数,分别获取driver,name,id并且输出
参考答案:
public void split(String str){
String[] strs = str.split("\\|");
for(String s : strs){
System.out.println(s);
}
}
3.84.剔除下面字符串中的”,”,例如:字符串”A,B,C,D,E,F”,剔除的返回结果为”ABCDEF”
参考答案:
public class Q084{
public static String delete(String str){
String result = "";
for(int i = 0; i < str.length(); i++){
String single = String.valueOf(str.charAt(i));
result += single.replaceAll("," , "");
}
return result;
}
public static void main(String[] args){
String s = "A,B,C,D,E,F";
String str = delete(s);
System.out.println(str);
}
}
3.85.编写一个命令行程序,提示输入2个字符串,找出2串字符串中是否存在相同的长度为3的字符串.比如字符串”abc12uwks”和字符串”q72bnabc00”,则把”abc”找出
参考答案:
public class Q085{
public static void main(String[] args){
Scanner s = new Scanner(System.in);
System.out.println("请输入第一个字符串:");
String first = s.next();
System.out.println("请输入第二个字符串:");
String second = s.next();
for(int i = 0; i < first.length(); i++){
String sub1 = "";
if(I + 3 < first.length()){
sub1 = first.substring(i, i + 3);
}
String sub2 = "";
for(int j = 0; j < second.length(); j++){
if(j + 3 < second.length()){
sub2 = second.substring(j , j+3);
}
if(sub1.equals(sub2)){
System.out.println(sub1);
break;
}
}
}
}
}
3.86.现有一个数组int data_arr[]={12,31,56,23,27,1,43,65,4,99},已完成如下代码,请在注释处增加一段代码,实现这样的功能:将data_arr数组的内容先写入一个名为”temp.dat”文件中,在重新将该文件的内容读出,能逆序将文件的内容输出至控制台(形如99,4,65,43,1,27,23,56,31,12}
package a;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class arrayTest{
public static void main(String[] args) throws IOException{
try{
int data arr[] = {12,31,56,23,27,1,43,65,4,99};
//定义输出流
//定义BufferedWriter,如果是中文数组,可以加上字符编码
//定义输入流
//定义BufferedReader,如果是中文数组,可以加上字符编码
//写入操作
//读取操作
System.out.println("逆序结果\n" + outContent.substring(0,outContent.length()-1));//截取
bw.close();
br.close();
} catch (Exception e){
e.printStackTrace();
}
}
}
参考答案:
package a;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class arrayTest{
public static void main(String[] args) throws IOException{
try{
int data arr[] = {12,31,56,23,27,1,43,65,4,99};
//定义输出流
DataOutputStream douts = new DataOutputStream(
new BufferedOutputStream(
new FileOutputStream("D:/temp.dat")));
//定义BufferedWriter,如果是中文数组,可以加上字符编码
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(douts));
//定义输入流
DateInputStream dinputs = new DataInputStream(
new BufferedInputStream(
new FileInputStream("D:/temp.dat")));
//定义BufferedReader,如果是中文数组,可以加上字符编码
BufferedReader br = new BufferedReader(new InputStreamReader(dinputs));
//写入操作
String inContent = "";
for(int i = 0; i < data_arr.length; i++){
inContent += data arr[i] + "\n";
}
bw.write(inContent);
bw.flush();
//读取操作
String outContent = "";
char tag = 0;
while(tag != (char) - 1){
outContent = tag + br.readLine() + "," + outContent.trim();
tag = (char)br.read();
}
System.out.println("逆序结果\n" + outContent.substring(0,outContent.length()-1));//截取
bw.close();
br.close();
} catch (Exception e){
e.printStackTrace();
}
}
}
3.87.现有一个程序需要记录运行中的关键信息,要求在内存中保留最近的n条信息供查询.保存的信息不需要做持久化处理.要求提供一个独立的日志类,负责对日志的写出和读取.请列出该类所应具有的方法并写出大致的实现代码
注:持久化指将数据存入数据库或村存为文件.读取日志时只要求能一次性读出现有的所有记录.
参考答案:
import java.util.ArrayList;
import java.util.List;
public class LogOpr{
private List<String> list = new ArrayList<String>();
public boolean writerLog(String str){
return list.add(str);
}
public List<String> readLog(){
return list;
}
}
3.88.数学中,一个复数包容着一个实部(Real)和一个虚部(Imaginary).请设计一个Complex类,它的实例代表一个复数,并且用户可以这样使用它:
//创建一个实部为3,虚部为4的复数
Complex obj = new Complex(3,4);
//Complex对象具备按照数学中复数的习惯表示形式输出的能力.
System.out.println(obj);//输出:3+4i
参考答案:
public class Complex{
private int real;
private int imaginary;
public Complex(){
this.real = 0;
this.imaginary = 0;
}
public Complex(int real, int imaginary){
this.real = real;
this.imaginary = imaginary;
}
public String toString(){
return "" + real + "+" + imaginary + "i";
}
public static void main(String[] args){
//创建一个实部为3,虚部为4的复数
Complex obj = new Complex(3,4);
//Complex对象具备按照数学中复数的习惯表示形式输出的能力
System.out.println(obj);//输出:3+4i
}
}
3.89.我们可以调用Integer.parseInt()方法将一个字符串转换为int类型,但当要转换的字符串不是一个有效的数字时(比如”a123”),此方法会抛出一个NumberFormatException
要求编写一个程序,当程序运行时让用户从键盘上输入一个字符串,代表考试成绩,然后调用Integer.parseInt()方法将其转换为int类型,并给出是否通过的提示,控制台交互的过程如下所示:
请输入您的考试成绩:76
恭喜您通过了考试!
由于无法控制用户的输入,因此可能出现以下两种出错情况:
1)用户输入了一个无法转换为int类型的字符串;
2)用户输入的数字不在[0,100]区间内;
请设计一个自定义的异常类InvalidScoreException,当出现上述异常情况时抛出此异常对象.要求程序运行时,对用户的错误输入能给以明确的提示.
参考答案:
首先,自定义异常处理类InvalidScoreException,代码如下所示:
public class InvalidScoreException extends Exception{
public InvalidScoreException(){
super();
}
public InvalidScoreException(String msg){
super(msg);
}
}
然后,当用户输入了一个无法转换为int类型的字符串或用户输入的数字不在[0,100]区间内时抛出自定义异常InvalidScoreException,代码如下所示:
public class Q089{
public void readScore() throws InvalidScoreException{
System.out.println("请输入成绩:");
Scanner s = new Scanner(System.in);
try{
int score = Integer.parseInt(s.next());
if(score < 0 || score > 100){
throw new InvalidScoreException("分数要在1到100之间");
}
} catch(NumberFormatException e){
throw new InvalidScoreException("分数要求是数字");
}
}
}
3.90.设计一个类,实现如下图所示的状态机
提示:上图说明,当使用new关键字创建此类对象时,对象居于Created状态(这是初始状态),这时,调用对象的open()方法,对象转换到Opened状态,在调用对象的close()方法,对象转入”Closed”状态,这是终止状态.
public class Q090{
private String status;
public Q090(){
this.status = "Created";
}
public void open(){
this.status = "Opened";
}
public void close(){
this.status = "Closed";
}
public String getStatus(){
return status;
}
public void setStatus(String status){
this.status = status;
}
}