Java期末练习(三)

一、判断题

  • 1-1Every element in an array has the same type. (1分)        F

  • 1-2接口中的方法默认是public abstract方法。 (1分)T         F

  • 1-3java.lang包是Java的核心类库,它包含了运行Java程序必不可少的系统类。 (1分)        F

  • 1-4声明构造方法时,可以使用private访问修饰符。 (1分)T         F

  • 1-5对于abstract类,不能创建该类的对象。 (1分)        F

  • 1-6StringBuffer类是线程安全的,StringBuilder类是线程不安全的。 (1分)T         F

  • 1-7可以使用protected修饰符来防止方法和数据被不同包的非子类访问。 (1分)T         F

  • 1-8把数组中元素按某种顺序排列的过程叫做查找 。 (1分)T         F

  • 1-9修饰符protected主要是允许其他包中的子类来访问父类的特定属性。 (1分)        F

  • 1-10所有异常都必须捕获。 (1分)T         F

二、单选题

2-1下面说法不正确的是( ) (2分)

  1. 父类比它的子类的方法更多;
  2. 当子类对象和父类对象能接收同样的消息时,它们针对消息产生的行为可能不同;
  3. 子类在构造函数中可以使用super( )来调用父类的构造函数;
  4. 一个子类的对象可以接收父类对象能接收的消息;

2-2_ returns the selected item on a ComboBox cbo. (2分)

  1. cbo.getValue()
  2. cbo.getSelectedIndex()
  3. cbo.getSelectedIndices()
  4. cbo.getSelectedItems()
  5. cbo.getSelectedItem()

2-3执行完以下代码int [ ] x = new int[10];后,以下哪项说明是正确的( ) (2分)

  1. x[10]为0
  2. x[9]未定义
  3. x[0]为空
  4. x[9]为0

2-4To handle the key pressed event on a pane p, register the handler with p using __. (2分)

  1. p.setOnKeyClicked(handler);
  2. p.setOnKeyTyped(handler);
  3. p.setOnKeyPressed(handler);
  4. p.setOnKeyReleased(handler);

2-5下面哪个流类属于面向字符的输入流( ) 。 (2分)

  1. InputStreamReader

  2. FileInputStream
  3. ObjectInputStream
  4. BufferedWriter

2-6To add two nodes node1 and node2 into a pane, use __.(2分)

  1. pane.add(node1, node2);
  2. pane.getChildren().add(node1, node2);
  3. pane.addAll(node1, node2);
  4. pane.getChildren().addAll(node1, node2);

2-7Fill in the code in the underlined location to display the mouse point location when the mouse is pressed in the pane. (2分)

import javafx.application.Application;

import javafx.scene.Scene;

import javafx.scene.layout.Pane;

import javafx.stage.Stage;

public class Test extends Application {

@Override // Override the start method in the Application class

public void start(Stage primaryStage) {

Pane pane = new Pane();

( __ )

Scene scene = new Scene(pane, 200, 250);

primaryStage.setTitle("Test"); // Set the stage title

primaryStage.setScene(scene); // Place the scene in the stage

primaryStage.show(); // Display the stage

}

/**

* The main method is only needed for the IDE with limited JavaFX

* support. Not needed for running from the command line.

*/

public static void main(String[] args) {

launch(args);

}

}
  1. pane.setOnMouseDragged((e) -> System.out.println(e.getX() + ", " + e.getY()));
  2. pane.setOnMouseReleased(e -> {System.out.println(e.getX() + ", " + e.getY())});
  3. pane.setOnMousePressed(e -> System.out.println(e.getX() + ", " + e.getY()));
  4. pane.setOnMouseClicked((e) -> System.out.println(e.getX() + ", " + e.getY()));

2-8为AB类的一个无形式参数无返回值的方法method书写方法头,使得使用类名AB作为前缀就可以调用它,该方法头的形式为( )。(2分)

  1. final void method( )
  2. abstract void method( )
  3. public void method( )
  4. static void method( )

2-9Which correctly create an array of five empty Strings? ( ) (2分)

  1. String [] a = new String[5]; for (int i = 0; i < 5; a[i++] = null);
  2. String [5] a;
  3. String a [5];
  4. String a [] = {"", "", "", "", "", ""};

2-10To add a node to the the first row and second column in a GridPane pane, use __. (2分)

  1. pane.add(node, 0, 1);
  2. pane.getChildren().add(node, 0, 1);
  3. pane.add(node, 1, 2);
  4. pane.add(node, 1, 0);
  5. pane.getChildren().add(node, 1, 2);

2-11关于类中成员变量的作用范围,下述说法中正确的是( )。 (2分)

  1. 用static修饰的成员变量只能在用static修饰的方法中使用
  2. 类中所有成员变量在所有成员方法中有效
  3. 用private修饰的成员变量可以在main方法中直接使用
  4. 只有用public修饰的变量才能在所有方法中使用

2-12下面是People和Child类的定义和构造方法,每个构造方法都输出编号。在执行new Child("mike")的时候都有哪些构造方法被顺序调用?请选择输出结果 ( ) (2分)

class People { 
        String name; 
        public People() {
               System.out.print(1); 
        }
        public People(String name) {
               System.out.print(2); 
               this.name = name;
        } 
} 
class Child extends People {
       People father; 
       public Child(String name) {
              System.out.print(3); 
              this.name = name; 
              father = new People(name + ":F");
       } 
       public Child(){ 
             System.out.print(4);
       } 
}
  1. 132
  2. 432
  3. 32
  4. 312

2-13The setOnAction method is defined in _. (2分)

  1. Node
  2. Label
  3. ButtonBase
  4. Button
  5. Labelled

2-14在面向对象的软件系统中,不同类对象之间的通信的一种构造称为_。 (2分)

  1. 消息
  2. 封装
  3. 属性

2-15下面哪个Set是按照插入顺序排序的? (2分)

  1. HashSet
  2. TreeSet
  3. AbstractSet
  4. LinkedHashSet

三、程序填空题

5-1(检验密码)一些网站设定了一些制定密码的规则。编写一个方法,检验一个字符串是否合法的密码。假设密码规则如下: 密码必须至少有8个字符。 密码只能包含字母和数字。 密码必须至少有2个数字。 请编写一个程序,提示用户输入密码,如果改密码符合规则就显示“Valid password”,否则显示“Invalid password”。

public class Main {
	  public static void main(String[] args) {
	    // Prompt the user to enter a password
	    java.util.Scanner input = new java.util.Scanner(System.in);
	    //System.out.print("Enter a string for password: ");
	    String s = input.nextLine();
	    if ((3分)) {
	      System.out.println("Valid password");
	    }
	    else {
	      System.out.println("Invalid password");
	    }
	  }

	  /** Check if a string is a valid password */
	  public static boolean isValidPassword(String s) {
	    // Only letters and digits?
	    for (int i = 0; i < s.length(); i++) {
	      if ((3分)) && 
	          !Character.isDigit(s.charAt(i)))
	        return false;
	    }
	    
	    // Check length
	    if ((2分) < 8)
	      return false;
	    
	    // Count the number of digits
	    int count = 0;
	    for (int i = 0; i < s.length(); i++) {
	      if ((2分))
	        count++;
	    }
	    
	    if (count >= 2)
	      return true;
	    else 
	      return false;
	  }
	}
  • isValidPassword(s)

  • !Character.isLetter(s.charAt(i))

  • s.length()

  • Character.isDigit(s.charAt(i))


四、函数题

6-1 定义一个股票类Stock (10 分)

定义一个名为Stock的股票类,这个类包括:一个名为symbol的字符串数据域表示股票代码。一个名为name的字符串数据域表示股票名称。一个名为previousClosingPrice的double数据域,它存储前一日的股票交易价格。一个名为currentPrice数据域,它存储当前的股票交易价格。创建一个有特定代码和名称的股票的构造方法。一个名为changePercent()方法返回从previousClosingPrice变化到currentPrice的百分比。

类名为:

Stock

裁判测试程序样例:

import java.util.Scanner;
/* 你提交的代码将被嵌入到这里 */

public class Main {
  public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    String symbol1=input.next();
    String name1=input.next();    
    Stock stock = new Stock(symbol1, name1);

    stock.previousClosingPrice = input.nextDouble();

    // Input current price
    stock.currentPrice = input.nextDouble();

    // Display stock info
    System.out.println(stock.name+"price changed: " + stock.changePercent() * 100 + "%");
    input.close();
  }
}

输入样例:

002594
比亚迪
56.98
55.40

输出样例:

比亚迪股价涨跌: -2.77290277290277%
class Stock
{
	String symbol;
	String name;
	double previousClosingPrice;
	double currentPrice;
	Stock(String symbol,String name)
	{
		this.symbol = symbol;
		this.name = name;
	}
	double changePercent()
	{
		return (currentPrice - previousClosingPrice)/previousClosingPrice;
	}
}

6-2 创建一个正六边形类实现接口IShape (10 分)

创建一个正六边形(regular hexagon)RHexagon类,实现下列接口IShape。RHexagon类将正六边形的边长作为私有成员,类中包含初始化这个值的构造方法。

interface IShape {// 接口

double getArea(); // 求面积

double getPerimeter();// 求周长

}

请编程从键盘输入正六边形的边长值,创建一个正六边形对象,然后输出正六边形的面积和周长。保留4位小数。

正六边形类名:
RHexagon

裁判测试程序样例:

import java.util.Scanner;
import java.text.DecimalFormat;

interface IShape {
    double getArea();

    double getPerimeter();
}

//你提交的代码将被嵌入到这里


public class Main {
    public static void main(String[] args) {
        DecimalFormat d = new DecimalFormat("#.####");
        Scanner input = new Scanner(System.in);
        double a = input.nextDouble();
        IShape r = new RHexagon (a);
        System.out.println(d.format(r.getArea()));
        System.out.println(d.format(r.getPerimeter()));
        input.close();
    }
}

输入

16.8 (边长)

输出

733.281 (输出的面积)

100.8 (输出的周长)

输入样例:

5

输出样例:

64.9519
30
class RHexagon implements IShape
{
	double regular;
	RHexagon(double regular)
	{
		this.regular = regular;
	}
	public double getArea()
	{
		return 3*Math.sqrt(3)*regular*regular/2;
	}
    public double getPerimeter()
    {
    	return 6*regular;
    }
}

五、编程题

7-1 找素数 (10 分)

请编写程序,从键盘输入两个整数m,n,找出等于或大于m的前n个素数。

输入格式:

第一个整数为m,第二个整数为n;中间使用空格隔开。例如:

103 3

输出格式:

从小到大输出找到的等于或大于m的n个素数,每个一行。例如:

103

107

109

输入样例:

9223372036854775839 2

输出样例:

9223372036854775907
9223372036854775931
import java.math.BigInteger;
import java.util.Scanner;

public class Main 
{
    public static void main(String[] args) 
    {
        Scanner cin = new Scanner(System.in);
        BigInteger begin = cin.nextBigInteger();
        int sum = cin.nextInt();
        int count = 0;
        while(count<sum)
        {
        	if(begin.isProbablePrime(100))
        	{
        		System.out.println(begin);
        		count++;
        	}
        	begin = begin.nextProbablePrime();
        }
        cin.close();
    }
}

7-2 验证手机号码(C++ Java) (10 分)

某系统在新用户注册时必须输入手机号,为了提高系统效率,防止输错手机号,需要对手机号进行验证。 验证规则为: (1)长度为11位 (2)由数字0~9组成 (3)必须是1开头 以上3个条件同时满足,则验证通过,否则为不通过。

输入格式:

在一行中一个字符串,长度不超过50个字符。例如: 13802988920

输出格式:

如果验证通过则输出Yes,否则输出No。

输入样例:

13812345678

输出样例:

Yes
import java.util.Scanner;
public class Main 
{
    public static void main(String[] args) 
    {
        Scanner cin = new Scanner(System.in);
        String PhoneNumber = cin.nextLine();
        char[] ch_str = PhoneNumber.toCharArray();
        
    	boolean flag = true;
    	for(int i=0;i<PhoneNumber.length();i++)
    	{
    		if(!(ch_str[i]>='0'&&ch_str[i]<='9'))
    		{
    			flag = false;
    			break;
    		}
    	}
    	if( PhoneNumber.length()==11 && ch_str[0]=='1' && flag == true )
    		System.out.print("Yes");
    	else
    		System.out.print("No");
        cin.close();
    }
}

7-3 电话号码同步(Java) (10 分)

文件phonebook1.txt和phonebook2.txt中有若干联系人的姓名和电话号码。请你设计一个程序,将这两个文件中的电话号码同步。(所谓同步,就是将两个文件中的电话号码合并后剔除相同的人名和电话号码。请将同步后的电话号码按照姓名拼音顺序排序后保存到文件phonebook3.txt中。)

由于目前的OJ系统暂时不能支持用户读入文件和写文件,我们编写程序从键盘输入文件中的姓名和电话号码,当输入的单词为end时,表示文件结束。将同步后的电话号码按照姓名拼音顺序排序后输出。

输入格式:

张三 13012345678

李四 13112340000

王五 13212341111

马六 13312342222

陈七 13412343333

孙悟空 13512345555

end (表示文件phonebook1.txt结束)

张三 13012345678

孙悟空 13512345555

王五 13212341111

陈七 13412343333

唐三藏 13612346666

猪悟能 13712347777

沙悟净 13812348888

end (表示文件phonebook2.txt结束)

输出格式:

陈七 13412343333

李四 13112340000

马六 13312342222

沙悟净 13812348888

孙悟空 13512345555

唐三藏 13612346666

王五 13212341111

张三 13012345678

猪悟能 13712347777

输入样例:

Zhang3 13012345678
Li4 13112340000
Wang5 13212341111
Ma6 13312342222
Chen7 13412343333
SunWuKong 13512345555
end
Zhang3 13012345678
SunWuKong 13512345555
Wang5 13212341111
Chen7 13412343333
TangSanZang 13612346666
ZhuWuneng 13712347777
ShaWuJing 13812348888
end

输出样例:

Chen7 13412343333
Li4 13112340000
Ma6 13312342222
ShaWuJing 13812348888
SunWuKong 13512345555
TangSanZang 13612346666
Wang5 13212341111
Zhang3 13012345678
ZhuWuneng 13712347777
import java.util.*;

public class Main {
	public static void main(String[] args) {
    Set<String> A = new TreeSet<String>();
    String s1;
    
    Scanner cin = new Scanner(System.in);
    for(int i=0;i<2;i++)
    {
        s1 = cin.nextLine();
        while(!s1.equals("end"))
        {
            A.add(s1);
            s1 = cin.nextLine();
        }
    }

    Iterator<String> iterator = A.iterator();
    while (iterator.hasNext()){
        String str = iterator.next();
        System.out.println(str);
    }
    cin.close();
 } 
}

7-4 人名地名排序 (10 分)

从键盘输入若干人名、地名或者国家名,要求按照升序排序之后输出。

输入格式:

7(表示将输入7个人名或者地名)

Zhang3

Li4

Wang5

Ma6

Chen7

Shu8

Ren9

输出格式:

Chen7

Li4

Ma6

Ren9

Shu8

Wang5

Zhang3

输入样例:

5
Xi'an
HanZhong
BaoJi
Yan'an
WeiNan

输出样例:

BaoJi
HanZhong
WeiNan
Xi'an
Yan'an
import java.util.Scanner;

public class Main 
{
	public static void main(String[] args) 
    {
        Scanner cin = new Scanner(System.in);
        int n = cin.nextInt();
        String[] name = new String[n];
        char[][] str_ch = new char[n][];
        for(int i=0;i<n;i++)
        {
        	name[i] = cin.next();
        	str_ch[i] = name[i].toCharArray();
        }
        for(int i=0;i<n-1;i++)
        {
        	for(int j=i+1;j<n;j++)
        	{
        		int k=0;
        		while(str_ch[i][k]==str_ch[j][k])
        			k++;
        		if(str_ch[i][k]>str_ch[j][k])
	        	{
	        		char[] temp = str_ch[i];
	        		str_ch[i] = str_ch[j];
	        		str_ch[j] = temp;
	        	}
        	}
        }
        for(int i=0;i<n;i++)
        	System.out.println(str_ch[i]);
        cin.close();
    }
}
import java.util.*;

public class Main 
{
	public static void main(String[] args) 
	{
		Set<String> B = new TreeSet<String>();		
		Scanner cin = new Scanner(System.in);
		int n = cin.nextInt();
		
		for(int i=0;i<=n;i++) 
		{
			String s2 = cin.nextLine();
			B.add(s2);
		}
	    Iterator<String> iterator = B.iterator();
	    while(iterator.hasNext()) 
	    {
	    	String str = iterator.next();
	    	System.out.println(str);
	    }
	    cin.close();
	}
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值