java每日一题

目录

1、选择题

2、编程题

1.n个数里最小的k个

2.删数


1、选择题

1.java中关于内存回收的正确说法是:

    程序员必须创建一个线程来释放内存

    内存回收程序负责释放无用内存

    内存回收程序允许程序员直接释放内存

    内存回收程序可以在指定的时间释放内存对象

注:(内存回收都是由JVM完成,程序员不用管)

    java的GC回收是完全自动的,没有提供相关api手动回收,所有的内存分配和回收权限都在jvm,在开发人员手里没有绝对的强制垃圾回收的方法,不过可以这样去做:
1. 对于不再引用的对象,及时把它的引用赋为null。 obj = null;
2. 如果内存确实很紧张,调用System.gc() 方法来建议垃圾回收器开始回收垃圾,通知GC运行,但是Java语言规范并不保证GC一定会执行。

2.以下说法错误的是()

A.数组是一个对象
  B.数组不是一种原生类
  C.数组的大小可以任意改变
  D.在Java中,数组存储在堆中连续内存空间里

注:
数组长度在创建时就确定了,要改变数组长度只能重新创建新的数组,将原有数组复制到新的数组之中。这也是ArrayList扩容时候的效率低于LinkedList的原因。

3.一个以". java"为后缀的源文件,哪些说法是正确的?

  只能包含一个类,类名必须与文件名相同

  只能包含与文件名相同的类,以及其中的内部类

  只能有一个与文件名相同的public类,可以包含其他类

  可以包含任意类

注:
  当编写一个java源代码文件时,此文件通常被称为编译单元(有时也被称为转译单元)。
  每个编译单元都必须有一个后缀名.java,而在编译单元内则可以有一个public类,
该类的名称必须与文件的名称相同(包括大小写,但不包括文件的后缀名.java)。每个编译单元只能有一个public类,否则编译器就不会接受。
  如果在该编译单元之中还有额外的类的话,那么在包之外的世界是无法看见这些类的,
这是因为它们不是public类,而且它们主要用来为主public类提供支持。      

4.(java)如何跳出Array的forEach循环?( )

  break

  return true

  return false

  以上都不是

5.A 派生出子类 B , B 派生出子类 C ,并且在 Java 源代码中有如下声明:

1. A  a0=new  A();

2. A  a1 =new  B();

3. A  a2=new  C();

问以下哪个说法是正确的? ( )

  • 只有第1行能通过编译
  • 第1、2行能通过编译,但第3行编译出错
  • 第1、2、3行能通过编译,但第2、3行运行时出错
  • 第1行、第2行和第3行的声明都是正确的
注:这个题考的是多态:父类引用指向子类实体。

6.JUnit主要用来完成什么?

  • 发送HTTP请求
  • 建立TCP连接
  • 集成测试
  • 单元测试

2、编程题

1.n个数里最小的k个

输入描述:每个测试输入包含空格分割的n+1个整数,最后一个整数为k值,n 不超过100。
输出描述:出n个整数里最小的k个数。升序输出

示例1:

输入:3 9 6 8 -10 7 -11 19 30 12 23 5

输出:-11 -10 3 6 7

import java.util.Arrays;
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            String temp = sc.nextLine();
            String[] arr = temp.split(" ");
            int[] result = new int[arr.length - 1];
            //获取数组
            for (int i = 0; i < arr.length-1; i++) {
                    result[i] = Integer.parseInt(arr[i]);
            }
            //获取k
            int k = Integer.parseInt(arr[arr.length-1]);
            //排序(升序)
            Arrays.sort(result);
            //按要求输出
            for (int i = 0; i < k; i++) {
                if (i < k - 1)
                    System.out.print(result[i] + " ");
                else
                    System.out.println(result[i]);
            }
        }
    }
}

2.删数

            有一个数组a[N]顺序存放0~N-1,要求每隔两个数删掉一个数,到末尾时循环至开头继续进行,求最后一个被删掉的数的原始下标位置。

  以8个数(N=7)为例:{0,1,2,3,4,5,6,7},0->1->2(删除)->3->4->5(删除)->6->7->0(删除),如此循环直到最后一个数被删除。

  输入描述:每组数据为一行一个整数n(小于等于1000),为数组成员数,如果大于1000,则对a[999]进行计算。

  输出描述:一行输出最后一个被删掉的数的原始下标位置。

  示例:

  输入:8

  输出:6

import java.util.*;
public class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            int n = sc.nextInt();
            if (n > 1000) {
                n = 999;
            }
            List<Integer> list = new ArrayList<>();
            for (int i = 0; i < n; i++) {
                list.add(i);
            }
            int i = 0;
            while (list.size() > 1) {
                i = (i + 2) % list.size();
                list.remove(i);
            }
            System.out.println(list.get(0));
        }
    }
}

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值