【java】pta17周练习题

这篇博客涵盖了Java PTA练习的多个题目,包括判断题、选择题、程序填空题和编程题。涉及线程、GUI、数组、对象、接口等多个知识点,通过解答这些题目帮助读者加深对Java的理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

判断题

1、在Java中,高优先级的可运行线程会抢占低优先级线程。 F

2、Object是Java中所有类的共同父类。 T

3、一个数组可以存放不同类型的数值。F

4、A final class can have instances. T

5、static关键字可以修饰成员变量,也可以修饰局部变量。 F

6、数组也是对象。T

7、程序开发者必须创建一个线程去管理内存的分配。 F

8、在Java程序中,可以使用protected来修饰一个类。T

9、当GUI应用程序使用边界布局管理器BorderLayout时,GUI组件可以按任何顺序添加到面板上。T

10、You can always successfully cast an instance of a superclass to a subclass. F


选择题

1、抽象窗口工具包( )是Java提供的建立图形用户界面GUI的开发包。

AWT
java.lang
java.io
Swing

2、下列哪个一个操作不能使线程从等待阻塞状态进入对象阻塞状态( )。

等待阻塞状态下的纯种被interrput()中断
等待阻塞状态下的线程被notify()唤醒
等待阻塞状态下的线程调用wait()方法
等待时间到

3、下列属于容器的组件有:( )

JPanel
JTextArea
JButton
Canvas

4、下列哪个方法可以使线程从运行状态进入其他阻塞状态( )。

yield()
wait()
sleep()
start()

5、如果容器组件p的布局是BorderLayout,则在p的下部添加一个按钮b,应该使用的语句是( ) (2分)

p.add(b,”North”);
p.add(b);
b.add(p,”North”);
p.add(b,”South”);

6、下列哪一项不属于布局管理器? ( ) (2分)

GridLayout
CardLayout
BorderLayout
BagLayout

7、What kind of reader do you use to handle Character code? ( ) (2分)

Reader
PrintWriter
InputStreamReader
Writer

8、在类中若要处理ActionEvent事件,则该类需要实现的接口是( ) (2分)

ActionListener
Serializable
Event
Runnable

9、paint( )方法使用哪种类型的参数? ( ) (2分)

Graphics2D
Color
String
Graphics

10、如果需要从文件中读取数据,则可以在程序中创建哪一个类的对象()。

DataOutputStream
FileWriter
FileOutputStream
FileInputStream


程序填空题

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 (isValidPassword(s)(2分)) {
          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 (!Character.isLetter(s.charAt(i))(2分)) && !Character.isDigit(s.charAt(i)))
          return false;
        }

        // Check length
        if (s.length()(2分) < 8)
          return false;

        // Count the number of digits
        int count = 0;
        for (int i = 0; i < s.length(); i++) {
          if (Character.isDigit(s.charAt(i))(2分))
            count++;
        }

        if (count >= 2)
          return true;
        else 
          return false;
      }
}

2、相同的数组。如果两个数组list1和list2的内容相同,那么就说它们是相同的。使用下面的程序可以判断两个数组是否相同,请填空补全程序。

import java.util.*;

public class Main {
   public static void main(String[] args) {
      Scanner input = new Scanner(System.in);

      int size1 = input.nextInt();
      int[] list1 = new int[size1];
      // Enter values for list1
      for (int i = 0; i < list1.length; i++)
         list1[i] = input.nextInt();

      int size2 = input.nextInt();
      int[] list2 = new int[size2];
      // Enter values for list2
      for (int i = 0; i < list2.length; i++)
         list2[i] = input.nextInt();
      input.close();

      if (equals(list1, list2)(4分)) {
         System.out.println("Two lists are identical");
      } else {
         System.out.println("Two lists are not identical");
      }
   }

   public static boolean equals(int[] list1, int[] list2) {
          if (list1.length != list2.length(3分))
             return false;

          Arrays.sort(list1);
          Arrays.sort(list2)(3分);
          for (int i = 0; i < list1.length; i++)
             if (list1[i] != list2[i])
                return false;

          return true;
     }
 }

函数题

1、定义一个股票类Stock (10分)
定义一个名为Stock的股票类,这个类包括:一个名为symbol的字符串数据域表示股票代码。一个名为name的字符串数据域表示股票名称。一个名为previousClosingPrice的double数据域,它存储前一日的股票交易价格。一个名为currentPrice数据域,它存储当前的股票交易价格。创建一个有特定代码和名称的股票的构造方法。一个名为getChangePercent()方法返回从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{
    private String s;
    public String name;
    public double previousClosingPrice;
    public double currentPrice;
    public Stock(String s,String n) {
        this.s = s;
        this.name = n;
    }
    public double changePercent(){
        return (currentPrice-previousClosingPrice)/previousClosingPrice;
    }
}

编程题

1、求阶乘factorial (20分)
编程从键盘输入一个整数,计算出阶乘并输出。

输入格式:
输入 39

输出格式:
输出:20397882081197443358640281739902897356800000000

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

public class Main {
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        int yuan = in.nextInt();
        BigInteger jiecheng = new BigInteger("1");
        while ( yuan>0) {
            jiecheng=jiecheng.multiply(new BigInteger(yuan+""));
            yuan--;
        }
        System.out.println(jiecheng);
        in.close();
    }
}

2、 给定两个点的坐标,求解两个点的距离。 (20分)

输入格式:
给定四个浮点数,作为线段的两个点。

输出格式:
输出该线段的距离。

输入样例:
0 0 1.0 1.0

输出样例:
The distance is 1.41

import java.text.DecimalFormat;
import java.util.Scanner;
public class Main {
    public static void main(String[] args){
        DecimalFormat mFormat = new DecimalFormat("#.##");
        Scanner in = new Scanner(System.in);
        double a = in.nextDouble();
        double b = in.nextDouble();
        //System.out.println("The distance is "+mFormat.format(Math.hypot((in.nextDouble()-a), (in.nextDouble()-b))));
System.out.printf("The distance is %.2f",Math.hypot((in.nextDouble()-a), (in.nextDouble()-b)));
        in.close();
    }
}

3、 找出最大的对象 (10分)
编写一个方法,返回对象数组中最大的对象。方法签名如下:
public static Object max(Comparable[] a)
所有对象都是Comparable接口的实例。对象在数组中的顺序是由compareTo方法决定的。

编写测试程序,从键盘输入5个字符串和5个整数,创建一个由5个字符串构成的数组、一个由5个整数构成的数组。找出数组中最大的字符串、整数并输出。

输入格式:
输入
Xi’an (输入5个字符串,每行一个)
Beijing
ShangHai
GuangZhou
ShenZhen
8 9 12 7 6 (输入5个整数,以空格分隔)

输出格式:
输出 Max string is Xi’an (输出最大的字符串)
Max integer is 12 (输出最大的整数)

import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static void main(String[] args){
        Scanner in =new Scanner(System.in);
        String[] strings = new String[5];
        Integer[] ints = new Integer[5];
        int count = 0;
        while (count < 5) {
            strings[count] = in.next();
            count++;
        }
        count = 0;
        while (count < 5) {
            ints[count] = in.nextInt();
            count++;
        }
        System.out.println("Max string is "+max(strings));
        System.out.println("Max integer is "+max(ints));
        in.close();
    }
    public static Object max(@SuppressWarnings("rawtypes") Comparable[] a){
        Arrays.sort(a);
        return a[a.length-1];
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值