JAVA企业面试题精选 Java SE 81-90

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;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值