3.71.什么是标示接口(Mark Interface),它与接口的区别在什么地方,并简单列举你知道的标示接口
参考答案:
标示接口:标示接口是没有任何方法和属性的接口.标示接口不对实现它的类有任何语义上的要求,它仅仅表明实现它的类属于一个特定的类型.当一个类实现了一个标示接口之后就像是给自己打了个标签.
区别:标识接口没有任何方法和属性;而接口有方法或属性,或者既有方法又有属性.
举例:java.io.Serializable,java.rmi.Remote
3.72.请使用Java语言定义一个具备栈功能的类,实现以下接口:
public interface StackInterface{
void push(Object value);
Object pop();
boolean isEmpty();
}
参考答案:
public class Stack implements StackInterface{
private int capacity = 100;
private Object[] items;
private int top = 0;
//不带参数构造器
public stack(){
this(100);
}
//带参数构造器,参数为堆栈大小
public stack(int cap){
this.capacity = cap;
items = new Object[cap];
}
@Override
public boolean isEmpty(){
if*(top == 0){
return true;
}
return false;
}
@Override
public Object pop(){
Object temp = items[top];
items[top] = null;
top--;
return temp;
}
@Override
public void push(Object value){
top++;
items[top] = value;
}
}
3.73.编写一个程序,用户输入任何一个字符串之后,翻转输出其结构.其运行结果如下所示:
请输入一个字符串:我在学习Java程序设计
您输入了:计设序程avaJ习学在我
参考答案:
import java.util.Scanner;
public class Q073{
public static void main(String[] args){
System.out.println("请输入一句话");
Scanner in = new Scanner(Sytem.in);
String input = in.nextLine();
System.out.println("您输入了:")
System.out.println(reverseString(input));
}
public static reverseString(String str){
char[] chars = str.toCharArray();
StringBuilder sb = new StringBuilder();
for(int i = chars.length - 1; i >= 0; i--){
sb.append(char[i]);
}
return sb.toString();
}
}
3.74.请用面向对象的思想设计一个计算器程序,请写出程序框架(主要使用的类和方法)
参考答案:
Operation类:
public class Operation{
private double numberA = 0;
private double numberB = 0;
public double GetResult(){
double result = 0;
return result;
}
public double getNumberA(){
return numberA;
}
public void setNumberA(double numberA){
this.numberA = numberA;
}
public double getNumberB(){
return numberB;
}
public void setNumberB(double numberB){
this.numberB = numberB;
}
}
OperationAdd类:
public class OperationAdd extends Operation{
public double GetResult(){
double result = 0;
result = getNumberA() + getNumberB();
return result;
}
}
OperationDiv类:
public class OperationDiv extends Operation{
public double GetResult(){
double result = 0;
result = getNumberA() / getNumberB();
return result;
}
}
OperationMul类:
public class OperationMul extends Operation{
public double GetResult(){
double result = 0;
result = getNumberA() * getNumberB();
return result;
}
}
OperationSub类:
public class OperationSub extends Operation{
public double GetResult(){
double result = 0;
result = getNumberA() - getNumberB();
return result;
}
}
OperationFactory类:
public class OperationFactory{
public static Operation createOperate(char operate){
Operation oper = null;
switch (operate){
case '+':
Oper = new OperationAdd();
break;
case '-':
oper = new OperationSub();
break;
case '*':
oper = new OperationMul();
break;
case '/':
oper = new OperationDiv();
break;
default;
break;
}
return oper;
}
}
Calculator类:
import java.util.Scanner;
public class Calculator{
public static void main(String[] args){
Operation oper;
oper = OperationFactory.createOperate('+');
System.out.println("请输入_numberA:");
Scanner s = new Scanner(System.in);
oper.setNumberA(s.nextDouble());
System.out.println("请输入_numberB:");
oper.setNumberB(s.nextDouble());
double result = oper.GetResult();
System.out.println("结果是:" + result);
}
}
3.75.写一个函数,2个参数,1个字符串,1个字节数,返回截取的字符串,要求字符串中的中文不能出现乱码:如(“我ABC”,4)应该截为”我AB”,输入(“我ABC 汉DEF”,6)应该输出为”我ABC”而不是”我ABC+汉的半个”.
参考答案:
public static String subString(String str, int subBytes){
int bytes = 0;//用来储存字符串的总字节数
for(int i = 0; i < str.length(); i++){
if(bytes == subBytes){
return str.substring(0,i);
}
char c = str.charAt(i);
if(c < 256){
bytes += 1;//英文字符的字节数看作1
} else {
bytes += 2;//中文字符的字节数看作2
if(bytes - subBytes == 1){
return str.substring(0,i);
}
}
}
return str;
}
3.76.日期和时间:
1)如何取得年月日,小时分秒?
2)如何取得从1970年到现在的毫秒数?
3)如何取得某个日期的当月的最后一天?
4)如何格式化日期?
参考答案:
1)创建java.util.Calendar实例(Calendar.getInstance()),调用其get()方法传入不同的参数即可获得参数所对应的值,如:calendar.get(Calendar.YEAR);//获得年
2)以下方法均可获得该毫秒数:
Calender.getInstance().getTimeInMillis();
System.currentTimeMillis();
3)取得某个日期的当月的最后一天的示例代码如下:
Calendar time = Calendar.getInstance();
time.getActualMaximum(Calendar.DAY_OF_MONTH));
4)利用java.text.DateFormat类中的format()方法可将日期格式化.
3.77.写一个方法,输入一个文件名和一个字符串,统计这个字符串在这个文件中出现的次数
参考答案:
public int countWords(String file,String find) throws Exception{
int count = 0;
Reader in = new FileReader(file);
int c;
while((c = in.read()) != -1){
while(c == find.charAt(0)){
for(int i = 1; i < find.length(); i++){
c = in.read();
if(c != find.charAt(i)){
break;
}
if(i == find.length() - 1){
count++;
}
}
}
}
return count;
}
3.78.写一个函数,要求输入一个字符串和一个字符的长度,对该字符串进行分割隔
参考答案:
public String[] split(String str, int chars){
int n = (str.length() + chars - 1) / chars;
String ret[] = new String[n];
for(int i = 0; i < n; i++){
if(i < n - 1){
ret[i] = str.substring(i * chars, (i + 1) * chars);
} else {
ret[i] = str.substring(i * chars);
}
}
return ret;
}
3.79.Java类实现序列化的方法.在COLLECTION框架中,实现比较要实现什么样的接口?
参考答案:
Java类实现序列化的方式为使用序列化的类实现java.io.Serializable接口;
Collection框架中实现比较要实现Comparable接口或Comparator接口.
3.80.设计4个线程,其中两个线程每次对j增加1,另两个线程对j每次减少1;写出程序
参考答案:
public class TestThread{
private int j;
private Object obj = new Object();
public TestThread(int j){
this.j = j;
}
class Dec extends Thread{
public void run(){
synchronized(obj){
j--;
}
}
}
class Inc implements Runnable{
public void run(){
synchronized(obj){
j++;
}
}
}
public static void main(String[] args){
new TestThread(0).new Dec().start();
new TestThread(0).new Dec().start();
new Thread(new TestThread(0).new Inc()).start();
new Thread(new TestThread(0).new Inc()).start();
}
}