精华内容
下载资源
问答
  • java编程笔试面试题引导语:应聘技术类的岗位都是需要经过笔试考察这一个环节的,以下是小编整理的java编程笔试面试题,欢迎参考阅读!简答题:01、switch语句能否作用在byte上,能否作用在long上,能否作用在String...

    java编程笔试面试题

    引导语:应聘技术类的岗位都是需要经过笔试考察这一个环节的,以下是小编整理的java编程笔试面试题,欢迎参考阅读!

    简答题:

    01、switch语句能否作用在byte上,能否作用在long上,能否作用在String上?

    答:

    在switch(expr1)中,expr1只能是一个整数表达式或者枚举常量(更大字体),

    整数表达式可以是int基本类型或Integer包装类型,

    由于,byte,short,char都可以隐含转换为int,

    所以,这些类型以及这些类型的包装类型也是可以的。

    显然,long和String类型都不符合switch的语法规定,

    并且不能被隐式转换成int类型,

    所以,它们不能作用于swtich语句中。

    5a2da0151e5c061149.png

    02、short s1 = 1; s1 = s1 + 1;有什么错?short s1 = 1; s1 += 1;有什么错?

    答:

    对于short s1 = 1; s1 = s1 + 1; 由于s1+1运算时会自动提升表达式的类型,

    所以结果是int型,再赋值给short类型s1时,编译器将报告需要强制转换类型的错误。

    对于short s1 = 1; s1 += 1;由于+= 是java语言规定的运算符,java编译器会对它进行特殊处理,因此可以正确编译。

    03、简述Java中构造方法的概念及特点。

    答:

    构造方法:构造方法是一种特殊的方法,用于初始化对象。

    特点:

    ① 构造方法与类同名,可以有参数,也可无参数。

    ② 构造方法没有返回值,在方法前也不需要写void。

    ③ 创建对象时,系统自动调用构造方法。

    ④ 用户在程序中不能直接调用构造方法,只能通过new操作符调用。

    ⑤ 一个类可以有多个同名构造方法,但参数必须不同。

    ⑥ 类中可以不定义构造方法,此时Java提供一个默认的无参数构造方法

    04、简述Java中接口的概念及接口的性质?

    答:

    Java语言规定,类只能实现单继承,但接口可以实现多重继承。

    接口中定义的方法都是抽象方法,定义的所有域都是常量。

    因此接口可以看作是没有实现的方法和常量的集合。

    使用接口主要是解决Java语言不支持多重继承的问题。

    性质:

    ① 接口不提供代码重用性。因为接口中的方法都是没有实现的方法,因此所有的方法体都要自己编写。

    ② 接口可以通过多继承进行扩展。

    ③ 接口不能升级,即提供给用户的接口不能再改变。

    05、数组有没有length()这个方法? String有没有length()这个方法?

    答:

    数组没有length()这个方法,有length的属性。String有length()这个方法。

    06、构造器Constructor是否可被override?

    答:

    构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。

    07、启动一个线程是用run()还是start()?

    答:

    启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。

    这并不意味着线程就会立即运行。

    run()方法可以产生必须退出的标志来停止一个线程。

    08、接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?

    答:

    接口可以继承接口。

    抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数。

    09、sleep() 和 wait() 有什么区别?

    答:

    sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。

    调用sleep不会释放对象锁。

    wait是Object类的`方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,

    只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。

    10、abstract class和interface有什么区别?

    答:

    声明方法的存在而不去实现它的类被叫做抽象类(abstract

    class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。

    不能创建abstract 类的实例。

    然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。

    不能有抽象构造函数或抽象静态方法。

    Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。

    取而代之,在子类中实现该方法。

    知道其行为的其它类可以在类中实现这些方法。

    接口(interface)是抽象类的变体。

    在接口中,所有方法都是抽象的。

    多继承性可通过实现这样的接口而获得。

    接口中的所有方法都是抽象的,没有一个有程序体。

    接口只可以定义static final成员变量。

    接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。

    当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。

    然后,它可以在实现了该接口的类的任何对象上调用接口的方法。

    由于有抽象类,它允许使用接口名作为引用变量的类型。

    通常的动态联编将生效。

    引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。

    展开全文
  • Java笔试编程题01

    2020-08-15 20:10:45
    Java笔试编程题01 题意: 众所周知,牛妹非常喜欢吃蛋糕。 第一天牛妹吃掉蛋糕总数三分之一(向下取整)多一个,第二天又将剩下的蛋糕吃掉三分之一(向下取整)多一个,以后每天吃掉前一天剩下的三分之一(向下取整...
    
    
    

    Java笔试编程题01


    题意:

    众所周知,牛妹非常喜欢吃蛋糕。
    第一天牛妹吃掉蛋糕总数三分之一(向下取整)多一个,第二天又将剩下的蛋糕吃掉三分之一(向下取整)多一个,以后每天吃掉前一天剩下的三分之一(向下取整)多一个,到第n天准备吃的时候只剩下一个蛋糕。
    牛妹想知道第一天开始吃的时候蛋糕一共有多少呢?

    示例:

    输入:
    n=2
    输出:
    蛋糕=3
    输入:
    n=4
    输出:
    蛋糕=10

    二、思路

    一、思路
    用一个数组dp表示当前这天没吃蛋糕之前的蛋糕数目,那么dp的最后一个值,dp[n-1]一定是初始化为1,dp[i]由dp[i+1]推导而来:
    因为:
    dp[i+1] = dp[i] * (2/3) - 1
    所以:
    dp[i] = 3*(dp[i+1] + 1)/2

    二、图示
    在这里插入图片描述

    三、详细流程
    1、特殊情况:n < 1时直接返回0;
    2、初始化dp[n-1] = 1;
    3、确认循环范围,根据上述公式循环更新dp[n-2] ~ dp[0];
    4、返回dp[0]

    代码如下(示例):

    public class Solution {
        /**
         * 
         * @param n int整型 只剩下一只蛋糕的时候是在第n天发生的.
         * @return int整型
         */
        public int cakeNumber (int n) {
            // write code here
            if(n==1){  //如果n=1,直接返回
                return 1;
            }
            int sum=1;
            for(int i=n;n>1;n--){
                sum= 3*(sum+1)/2;
            }
            return sum;
        }
    }
    

    总结

    提示:
    1.特殊情况 n < 1时直接。
    2.设今天有蛋糕y个,前一天有x个。
    3.由题意得 y = x*2/3-1;也就是说x=3(y+1)/2。
    4.根据天数n迭代找到第0天有多少蛋糕

    展开全文
  • 几套java笔试编程题目,有需要的朋友随便下载
  • } } }2 /*********************************************************************************** 2、编写一个程序,将d:\java 目录下的所有.java 文件复制到d:\temp 目录下,并 将原来文件的扩展名从.java 改为....

    1

    /***********************************************************************************

    1、编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中,

    a.txt文件中的单词用回车符分隔,b.txt文件中用回车或空格进行分隔。

    *************************************************************************************/答:packagecom.example;importjava.io.File;importjava.io.FileReader;importjava.io.FileWriter;importjava.net.URLDecoder;public classexample1 {public static void main(String[] args) throwsException {

    FileManager m1= new FileManager("a.txt", new char[]{'\n'});

    FileManager m2= new FileManager("b.txt", new char[]{'\n', ' '});

    FileWriter c= new FileWriter("c.txt");

    String aWord= null;

    String bWord= null;while((aWord = m1.nextWord()) != null){

    c.write(aWord+ "\n");

    bWord=m2.nextWord();if(bWord != null){

    c.write(bWord+ "\n");

    }

    }while((bWord = m2.nextWord()) != null){

    c.write(bWord+ "\n");

    }

    c.close();

    }

    }classFileManager{

    String[] words= null;int pos = 0;public FileManager(String filename, char[] seperators) throwsException{//ClassLoader.getSystemResource("")//file:\D:\Coding_Project\eclipse2\Java面试问题集\Chapter2\bin\a.txt//this.getClass().getResource("").getPath()///D:/Coding_Project/eclipse2/Java面试问题集/Chapter2/bin/com/example///System.out.println(URLDecoder.decode(this.getClass().getResource("/").getPath(),"UTF-8"));

    filename=this.getClass().getResource("/").getPath() +filename;

    filename=URLDecoder.decode(filename,"UTF-8"); //中文路径问题

    File f = newFile(filename);

    FileReader reader= newFileReader(f);char[] buf = new char[(int)f.length()];int len =reader.read(buf);

    String results= new String(buf, 0, len);

    String regex= null;if(seperators.length > 1){

    regex= "" + seperators[0] + "|" + seperators[1];

    }else{

    regex= "" + seperators[0];

    }

    words=results.split(regex);

    reader.close();//System.out.println();

    }publicString nextWord(){if(pos ==words.length){return null;

    }return words[pos++];

    }

    }

    FilenameFilter

    一、FilenameFilter介绍

    Java.io.FilenameFilter是文件名过滤器,用来过滤不符合规格的文件名,并返回合格的文件;

    一般地:

    (1)String[] fs =f.list();

    (2)File[] fs =f.listFiles();

    这两个方法返回f下的所有文件或目录;

    FilenameFilter用来把符合要求的文件或目录返回;

    因此可以调用:

    (1)String []fs =f.list(FilenameFilter filter);;

    (2)File[]fs =f.listFiles(FilenameFilter filter);

    二、文件名过滤器一般用法1.实现FilenameFilter接口;2.实现boolean accept(File dir,String name); //dir表示文件的当前目录,name表示文件名;

    class MyFilter implementsFilenameFilter{private String type; //type为需要过滤的条件,比如如果type=".jpg",则只能返回后缀为jpg的文件

    publicMyFilter(String type){this.type =type;

    }public boolean accept(File dir,String name){ //返回true的文件则合格

    }

    }

    三、实例

    要求:返回当前目录下所有以.java结尾的文件;packageorg.exam5a;importjava.io.File;importjava.io.FilenameFilter;public classT4 {public static void main(String[] args)throwsException {

    File f= new File(".");

    MyFilter filter= new MyFilter(".java");

    String[] files=f.list(filter);for(String a:files){

    System.out.println(a);

    }

    }static class MyFilter implementsFilenameFilter{privateString type;publicMyFilter(String type){this.type =type;

    }public booleanaccept(File dir,String name){returnname.endsWith(type);

    }

    }

    }2

    /***********************************************************************************

    2、编写一个程序,将d:\java 目录下的所有.java 文件复制到d:\temp 目录下,并

    将原来文件的扩展名从.java 改为.temp

    *************************************************************************************/

    packagecom.example;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.FilenameFilter;importjava.io.IOException;importjava.io.InputStream;importjava.io.OutputStream;public classexample2 {public static void main(String[] args) throwsException {

    java2temp jt= newjava2temp();

    jt.transfer();

    }

    }classjava2temp {//String srcPath = URLDecoder.decode(this.getClass().getResource("/").getPath(),"UTF-8");

    public void transfer() throwsException{//System.getProperty("user.dir") + "\\src";//D:\Coding_Project\eclipse2\Java面试问题集\Chapter2\src//String srcPath = URLDecoder.decode(this.getClass().getResource("/").getPath(),"UTF-8");///D:/Coding_Project/eclipse2/Java面试问题集/Chapter2/bin/

    String srcPath = System.getProperty("user.dir") + "\\src\\com\\example";

    String desPath= srcPath + "\\temp";

    System.out.println(srcPath+"\n"+desPath);

    File srcDir= newFile(srcPath);if(!(srcDir.exists() &&srcDir.isDirectory())){throw new Exception("directory doesn't exist");

    }

    File[] files=srcDir.listFiles(newFilenameFilter() {

    @Overridepublic booleanaccept(File dir, String name) {//TODO Auto-generated method stub

    return name.endsWith(".java");

    }

    }

    );

    System.out.println(files.length);

    File desDir= newFile(desPath);if(!desDir.exists()){

    desDir.mkdirs();

    }for(File f : files){

    FileInputStream fis= newFileInputStream(f);

    String destFilename= f.getName().replaceAll("\\.java$", ".temp");

    FileOutputStream fos= new FileOutputStream(newFile(desDir, destFilename));

    copy(fis, fos);

    fis.close();

    fos.close();

    }

    }private void copy(InputStream ips, OutputStream ops) throwsIOException{int len = 0;byte[] buf = new byte[1024];while((len = ips.read(buf)) != -1){

    ops.write(buf,0, len);

    }

    }

    }

    不同编码英文字母和中文汉字所占字节。

    GBK的编码是一个汉字两个字节,范围是第一个字节大于128开始,第二个字节从大于64开始。

    第一个字节大于127就表示这是个汉字的开始。

    byte这种类型只有java有,范围是-127到127.所以打印出来转换了就变成负数了。importjava.io.UnsupportedEncodingException;public classEncodeTest {/*** 打印字符串在指定编码下的字节数和编码名称到控制台

    *

    *@params

    * 字符串

    *@paramencodingName

    * 编码格式*/

    public static voidprintByteLength(String s, String encodingName) {

    System.out.print("字节数:");try{

    System.out.print(s.getBytes(encodingName).length);

    }catch(UnsupportedEncodingException e) {

    e.printStackTrace();

    }

    System.out.println(";编码:" +encodingName);

    }public static voidmain(String[] args) {

    String en= "A";

    String ch= "人";//计算一个英文字母在各种编码下的字节数

    System.out.println("英文字母:" +en);

    EncodeTest.printByteLength(en,"GB2312");

    EncodeTest.printByteLength(en,"GBK");

    EncodeTest.printByteLength(en,"GB18030");

    EncodeTest.printByteLength(en,"ISO-8859-1");

    EncodeTest.printByteLength(en,"UTF-8");

    EncodeTest.printByteLength(en,"UTF-16");

    EncodeTest.printByteLength(en,"UTF-16BE");

    EncodeTest.printByteLength(en,"UTF-16LE");

    System.out.println();//计算一个中文汉字在各种编码下的字节数

    System.out.println("中文汉字:" +ch);

    EncodeTest.printByteLength(ch,"GB2312");

    EncodeTest.printByteLength(ch,"GBK");

    EncodeTest.printByteLength(ch,"GB18030");

    EncodeTest.printByteLength(ch,"ISO-8859-1");

    EncodeTest.printByteLength(ch,"UTF-8");

    EncodeTest.printByteLength(ch,"UTF-16");

    EncodeTest.printByteLength(ch,"UTF-16BE");

    EncodeTest.printByteLength(ch,"UTF-16LE");

    }

    }

    运行结果如下:

    英文字母:A

    字节数:1;编码:GB2312

    字节数:1;编码:GBK

    字节数:1;编码:GB18030

    字节数:1;编码:ISO-8859-1字节数:1;编码:UTF-8字节数:4;编码:UTF-16字节数:2;编码:UTF-16BE

    字节数:2;编码:UTF-16LE

    中文汉字:人

    字节数:2;编码:GB2312

    字节数:2;编码:GBK

    字节数:2;编码:GB18030

    字节数:1;编码:ISO-8859-1字节数:3;编码:UTF-8字节数:4;编码:UTF-16字节数:2;编码:UTF-16BE

    字节数:2;编码:UTF-16LE

    编码范围//1. GBK (GB2312/GB18030)//x00-xff GBK双字节编码范围//x20-x7f ASCII//xa1-xff 中文//x80-xff 中文//

    //2. UTF-8 (Unicode)//u4e00-u9fa5 (中文)//x3130-x318F (韩文)//xAC00-xD7A3 (韩文)//u0800-u4e00 (日文)

    3

    /***********************************************************************************

    3、编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,

    但要保证汉字不被截取半个,如“我ABC”,4,应该截取“我AB”,

    输入“我ABC汉DEF”,6,应该输出“我ABC”,而不是“我ABC+汉的半个”。

    *************************************************************************************/

    packagecom.example;importjava.io.UnsupportedEncodingException;public classexample3 {public static void main(String[] args) throwsException {

    String str= "你abc好";

    trimGBK(str,6);

    }public static void trimGBK(String str, int n) throwsUnsupportedEncodingException{byte[] buf = str.getBytes("GBK");boolean bChineseFirstHalf = false;int num = 0;//GBK的编码是一个汉字两个字节,范围是第一个字节大于128开始,第二个字节从大于64开始。//第一个字节大于127就表示这是个汉字的开始。//byte这种类型只有java有,范围是-127到127.所以打印出来转换了就变成负数了。//编码范围//1. GBK (GB2312/GB18030)//x00-xff GBK双字节编码范围//x20-x7f ASCII -- 英文为正数//xa1-xff 中文 -- 中文为负数//x80-xff 中文//

    //2. UTF-8 (Unicode)//u4e00-u9fa5 (中文)//x3130-x318F (韩文)//xAC00-xD7A3 (韩文)//u0800-u4e00 (日文)

    for(int i = 0; i < n; i++){if(buf[i] < 0 && !bChineseFirstHalf){

    bChineseFirstHalf= true;

    }else{

    num++;

    bChineseFirstHalf= false;

    }

    }

    System.out.println(str.substring(0, num));

    }

    }4

    /***********************************************************************************

    4、有一个字符串,其中包含中文字符、英文字符和数字字符,请统计和打印出各个字符的个数。

    *************************************************************************************/

    packagecom.example;importjava.util.HashMap;importjava.util.Map;public classexample4 {public static void main(String[] args) throwsException {

    String str= "中国aadf的111萨bbb菲的zz萨菲";char[] strArr =str.toCharArray();

    HashMap map = new HashMap();

    Integer num= 0;for(charc : strArr){

    num=map.get(c);if(num == null){

    num= 1;

    }else{

    num= num + 1;

    }

    map.put(c, num);

    }for(Map.Entryentry : map.entrySet()){

    System.out.println(entry.getKey()+ "\t: " +entry.getValue());

    }

    }

    }//结果

    f : 1菲 :2

    1 : 3d :1b :3的 :2a :2中 :1萨 :2国 :1z :2

    5二叉树/***********************************************************************************

    5、说明生活中遇到的二叉树,用java 实现二叉树

    答: 二叉查找树

    *************************************************************************************/

    packagecom.example;importjava.util.Arrays;importjava.util.HashMap;public classexample5 {public static void main(String[] args) throwsException {int[] data = new int[10];

    HashMap map = new HashMap<>();for(int i=0; i

    tmp= (int)(Math.random() * 100 + 1);

    }

    data[i]=tmp;

    map.put(tmp,true);

    }

    System.out.println(Arrays.toString(data));

    BinaryTree root= new BinaryTree(data[0]);for(inti : data){if(i != data[0]){//System.out.print(i + " ");

    root.add(i);

    }

    }

    System.out.println("先序:");

    root.preOrderTraverse();

    System.out.println();

    System.out.println("中序:");

    root.midOrderTraverse();

    System.out.println();

    System.out.println("非递归中序:");

    root.midOrderTraverse2();

    System.out.println();

    System.out.println("后序:");

    root.postOrderTraverse();

    System.out.println();

    }

    }classBinaryTree{private intvalue;privateBinaryTree lChild;privateBinaryTree rChild;publicBinaryTree(){

    }public BinaryTree(intvalue){this.value =value;

    }

    @OverridepublicString toString() {//TODO Auto-generated method stub

    StringBuilder sb = newStringBuilder();

    sb.append(value);returnsb.toString();

    }public void add(intvalue){if(value < this.value){if(this.lChild == null){

    lChild= newBinaryTree();

    lChild.value=value;

    }else{

    lChild.add(value);

    }

    }else if(value > this.value){if(this.rChild == null){this.rChild = newBinaryTree();

    rChild.value=value;

    }else{

    rChild.add(value);

    }

    }

    }public boolean isExist(intvalue){if(this.value ==value){return true;

    }else if(value < this.value){if(this.lChild == null){return false;

    }else{returnlChild.isExist(value);

    }

    }else{if(null == this.rChild){return false;

    }else{returnrChild.isExist(value);

    }

    }

    }public voidpreOrderTraverse(){

    System.out.print(this.value + ",");if(null !=lChild)

    lChild.preOrderTraverse();if(null !=rChild)

    rChild.preOrderTraverse();

    }public voidmidOrderTraverse(){if(null !=lChild)

    lChild.midOrderTraverse();

    System.out.print(this.value + ",");if(null !=rChild)

    rChild.midOrderTraverse();

    }//非递归中序

    public voidmidOrderTraverse2(){

    MyArrayStack s = new MyArrayStack();

    BinaryTree tmp= this;while((null != tmp) || !s.isEmpty()){if(null !=tmp){

    s.push(tmp);

    tmp=tmp.lChild;

    }else{

    BinaryTree tmp2=s.pop();

    System.out.print(tmp2.value+ ",");

    tmp=tmp2.rChild;

    }

    System.out.println(s.toString());

    }

    }public voidpostOrderTraverse(){if(null !=lChild)

    lChild.postOrderTraverse();if(null !=rChild)

    rChild.postOrderTraverse();

    System.out.print(this.value + ",");

    }

    }interface MyStack{booleanisEmpty();voidclear();intlength();booleanpush(T data);

    T pop();

    }class MyArrayStack implements MyStack{private Object[] objs = new Object[16];private int size = 0;

    @Overridepublic booleanisEmpty() {return size == 0;

    }

    @Overridepublic voidclear() {//TODO Auto-generated method stub

    for (int i = 0; i < objs.length; i++) {

    objs[i]= null;

    }

    size= 0;

    }

    @Overridepublic intlength() {returnsize;

    }

    @Overridepublic booleanpush(T data) {if(size >=objs.length){

    resize();

    }

    objs[size++] =data;return true;

    }

    @SuppressWarnings("unchecked")

    @OverridepublicT pop() {if(size <= 0){return null;

    }return (T)objs[--size];

    }public voidresize(){

    Object[] tmp= new Object[objs.length * 3 / 2 + 1];for (int i = 0; i < objs.length; i++) {

    tmp[i]=objs[i];

    objs[i]= null;

    }

    objs=tmp;

    }

    @OverridepublicString toString() {//TODO Auto-generated method stub

    StringBuilder sb= newStringBuilder();

    sb.append("MyArrayStack: [");for(int i=0; i

    sb.append(objs[i].toString());if(i != size - 1){

    sb.append(", ");

    }

    }

    sb.append("]");returnsb.toString();

    }

    }6

    /***********************************************************************************

    6.从类似如下的文本文件中读取出所有的姓名,并打印出重复的姓名和重复的次数,并按重复次数排序:

    1,张三,28

    2,李四,35

    3,张三,28

    4,王五,35

    5,张三,28

    6,李四,35

    7,赵六,28

    8,田七,35

    *************************************************************************************/

    packagecom.example;importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStream;importjava.io.InputStreamReader;importjava.util.Comparator;importjava.util.HashMap;importjava.util.Map;importjava.util.TreeSet;importjava.util.Iterator;public classexample6 {public static void main(String[] args) throwsException {

    HashMap results = new HashMap();//文件在src路径下

    InputStream ips = example6.class.getResourceAsStream("/UserInfo.txt");//文件与类在相同的包下面,可以用相对路径//InputStream ips = example6.class.getResourceAsStream("UserInfo.txt");

    BufferedReader br = new BufferedReader(newInputStreamReader(ips));

    String line= null;try{while((line = br.readLine()) != null){//System.out.println(line + "aa");

    dealLine(line, results);

    }

    sortResults(results);

    }catch(IOException e) {//TODO: handle exception

    e.printStackTrace();

    }

    }static classUser{publicString name;publicInteger value;publicUser(String name, Integer value) {super();this.name =name;this.value =value;

    }

    @Overridepublic booleanequals(Object obj) {//TODO Auto-generated method stub//下面的代码没有执行,说明往treeset 中增加数据时,不会使用到equals 方法。

    System.out.println(super.equals(obj));return super.equals(obj);

    }

    }public static void sortResults(Mapresults){

    TreeSet sortedResults = new TreeSet(new Comparator() {public intcompare(Object o1, Object o2) {

    User u1=(User)o1;

    User u2=(User)o2;/*如果compareTo 返回结果0,则认为两个对象相等,新的对象不会增加到集合中去

    所以,不能直接用下面的代码,否则,那些个数相同的其他姓名就打印不出来。

    **/

    //return u1.value-u2.value;//return u1.value

    if(u1.value >u2.value){return 1;

    }if(u1.value

    }returnu1.name.compareTo(u2.name);

    };

    });

    @SuppressWarnings("rawtypes")

    Iterator iter=results.keySet().iterator();while(iter.hasNext()){

    String name=(String)iter.next();

    Integer value=(Integer) results.get(name);if(value > 1){

    sortedResults.add(newUser(name, value));

    }

    }

    printResults(sortedResults);

    }public static void dealLine(String line, Mapmap){if(!"".equals(line.trim())){

    String[] results= line.split(",");if(results.length == 3){

    String name= results[1];

    Integer value=(Integer)map.get(name);if(null ==value){

    value= 0;

    }

    map.put(name, value+ 1);

    }

    }

    }

    @SuppressWarnings({"rawtypes"})private static voidprintResults(TreeSet sortedResults){

    Iterator iter=sortedResults.iterator();while(iter.hasNext()){

    User u=(User)iter.next();

    System.out.println(u.name+ ":" +u.value);

    }

    }

    }7

    /***********************************************************************************

    递归算法题

    一个整数,大于0,不用循环和本地变量,按照n,2n,4n,8n 的顺序递增,当值大于5000

    时,把值按照指定顺序输出来。

    例:n=1237

    则输出为:

    1237,

    2474,

    4948,

    9896,

    9896,

    4948,

    2474,

    1237,

    提示:写程序时,先致谢按递增方式的代码,写好递增的以后,再增加考虑递减部分。

    *************************************************************************************/

    packagecom.example;public classexample7 {public static void main(String[] args) throwsException {

    doubleNum(1237);

    }public static void doubleNum(intn){

    System.out.println(n);if(n <= 5000){

    doubleNum(n* 2);

    }

    System.out.println(n);

    }

    }8

    /***********************************************************************************

    递归算法题

    第1个人10,第2个比第1个人大2岁,依次递推,请用递归方式计算出第8个人多大?

    *************************************************************************************/

    packagecn.itcast;importjava.util.Date;

    publicclass A1 {public staticvoidmain(String [] args) {

    System.out.println(computeAge(8));

    }public static int computeAge(intn) {if(n==1)return 10;return computeAge(n-1) + 2;

    }

    }9将数组元素顺序颠倒/***********************************************************************************

    有数组a[n],用java 代码将数组元素顺序颠倒

    *************************************************************************************/

    packagecom.example;importjava.util.Arrays;public classexample11 {public static void main(String[] args) throwsException {int[] arr = new int[10];for(int i=1; i

    arr[i]= (int)(Math.random() * 100 + 1);

    }

    System.out.println(Arrays.toString(arr));

    swap(arr);

    System.out.println(Arrays.toString(arr));

    }//用下面的也可以//for(inti=0,int j=a.length-1;i

    public static void swap(int[] arr){int len =arr.length;for(int i=0; i

    arr[i]= arr[len - 1 -i];

    arr[len- 1 - i] =tmp;

    }

    }

    }

    10金额转换/***********************************************************************************

    金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)->(一千零一拾一元整)输出。

    *************************************************************************************/

    packagecom.example;public classexample12 {private static final char[] data = new char[] {'零','壹','贰','叁','肆','伍','陆','柒','捌','玖'};private static final char[] units = new char[] {'元','拾','佰','仟','万','拾','佰','仟','亿'};public static void main(String[] args) throwsException {

    System.out.println(convert(135009003));

    }public static String convert(intmoney) {

    StringBuffer sbf= newStringBuffer();int unit = 0;while(money!=0) {

    sbf.insert(0,units[unit++]);int number = money%10;

    sbf.insert(0,data[number]);

    money/= 10;

    }//return sbf.toString();//去零,正则表达式

    return sbf.toString().toString().replaceAll("零[拾佰仟]","零").

    replaceAll("零+万","万").replaceAll("零+元","元").replaceAll("零+","零");

    }

    }//135009003//不去零 : 壹亿叁仟伍佰零拾零万玖仟零佰零拾叁元//结果 : 壹亿叁仟伍佰万玖仟零叁元

    11请设计一个一百亿的计算器

    二分查找法

    二分查找又称折半查找,它是一种效率较高的查找方法。

    二分查找要求:1.必须采用顺序存储结构 2.必须按关键字大小有序排列。

    二分查找算法是在有序数组中用到的较为频繁的一种算法,在未接触二分查找算法时,最通用的一种做法是,对数组进行遍历,跟每个元素进行比较,其时间为O(n).但二分查找算法则更优,因为其查找时间为O(lgn),譬如数组{1, 2, 3, 4, 5, 6, 7, 8, 9},查找元素6,用二分查找的算法执行的话,其顺序为:1.第一步查找中间元素,即5,由于5<6,则6必然在5之后的数组元素中,那么就在{6, 7, 8, 9}中查找,2.寻找{6, 7, 8, 9}的中位数,为7,7>6,则6应该在7左边的数组元素中,那么只剩下6,即找到了。/*** 二分查找又称折半查找,它是一种效率较高的查找方法。

    【二分查找要求】:1.必须采用顺序存储结构 2.必须按关键字大小有序排列。

    *@authorAdministrator

    **/

    public classBinarySearch {public static voidmain(String[] args) {int[] src = new int[] {1, 3, 5, 7, 8, 9};

    System.out.println(binarySearch(src,3));

    System.out.println(binarySearch(src,3,0,src.length-1));

    }/*** * 二分查找算法 * *

    *

    *@paramsrcArray

    * 有序数组 *

    *@paramdes

    * 查找元素 *

    *@returndes的数组下标,没找到返回-1*/

    public static int binarySearch(int[] srcArray, intdes){int low = 0;int high = srcArray.length-1;while(low <=high) {int middle = (low + high)/2;if(des ==srcArray[middle]) {returnmiddle;

    }else if(des

    high= middle - 1;

    }else{

    low= middle + 1;

    }

    }return -1;

    }/***二分查找特定整数在整型数组中的位置(递归)

    *@paramdataset

    *@paramdata

    *@parambeginIndex

    *@paramendIndex

    *@returnindex*/

    public static int binarySearch(int[] dataset,int data,int beginIndex,intendIndex){int midIndex = (beginIndex+endIndex)/2;if(data dataset[endIndex]||beginIndex>endIndex){return -1;

    }if(data

    }else if(data>dataset[midIndex]){return binarySearch(dataset,data,midIndex+1,endIndex);

    }else{returnmidIndex;

    }

    }

    }

    快速排序/***********************************************************************************

    快速排序

    3、实现思路。

    1.以第一个关键字 K 1 为控制字,将 [K 1 ,K 2 ,…,K n ] 分成两个子区,

    使左区所有关键字小于等于 K 1 ,右区所有关键字大于等于 K 1 ,

    最后控制字居两个子区中间的适当位置。在子区内数据尚处于无序状态。

    2.递归处理左右子区

    *************************************************************************************/

    packagecom.example;importjava.util.Arrays;public classexample8 {public static void main(String[] args) throwsException {int[] arr = new int[10];for(int i = 0; i

    arr[i]= (int)(Math.random() * 100 + 1);

    }

    System.out.println(Arrays.toString(arr));

    quickSort(arr,0, arr.length - 1);

    System.out.println(Arrays.toString(arr));//数组被改变

    }public static void quickSort(int[] arr, int left, intright){if(left

    quickSort(arr, left, pivotloc - 1);

    quickSort(arr, pivotloc+ 1, right);

    }

    }public static int partition(int[] arr, int left, intright){int pivotkey =arr[left];while(left = arr[left]) left++;if(left < right) arr[right--] =arr[left];

    }

    arr[left]=pivotkey;returnleft;

    }

    }

    展开全文
  • 360java笔试编程第二题

    题目内容如下:




    按照个人理解,写出了ac率为20%的程序如下:


    import java.util.Scanner;
    
    public class replaceASCII {
        public static void main(String[] args){
            int index=0;
            String replaceChar;
            StringBuilder strbu;
            Scanner s = new Scanner(System.in);
            System.out.println("请输入数据:");
            int n = s.nextInt();
            int m = s.nextInt();
            s.nextLine();
            String str=s.nextLine();
            if(str.length()!=n){
                System.out.println("输入不合法");
                return;
            }
            for(int line=0;line<m;line++){
                index = s.nextInt();
                replaceChar = s.next();
                if(replaceChar.length()!=1){
                    System.out.println("输入不合法");
                    return;
                }
                strbu = new StringBuilder(str);
                strbu.replace(index-1,index,replaceChar);
                str = strbu.toString();
                System.out.println(replaceFun(str));
            }
    
        }
    
        public static int replaceFun(String string){
            int replaceTime = 0;
            while(string.contains("..")){
                string = string.replaceFirst("\\.\\.",".");
                replaceTime++;
            }
            return replaceTime;
        }
    }
    


    也不知道是哪里没有考虑到,求各位指教~~

    展开全文
  • 上海交通银行 JAVA 笔试题总结, 例如:人民币金额数字转换成大写的函数, 字符串截取,中文不会被截取半个等。
  • 转载自经典笔试编程题--Java实现1.输入一个正数n,输出所有和为n的连续正数序列。分析:设定两个指针,min指向和为n的连续正数序列的最小值,max指向和为n的连续正数序列最大值。sum表示真正的和。初始情况下,min、...
  • Java笔试编程

    2021-03-12 21:03:47
    递归 斐波那契数列问题(第n个数=第n-1个数+第n-2个数) 有一列数有如下规律,1,1,2,3,5,8,13,21,34…,求第20位数是多少,要求使用递归实 现。 public class demo1{ public static void main(String[] ...
  • import java.util.Scanner;... * 2018-09-09 京东java笔试编程第2题 * @author DULU * */ public class Main{ public static void main(String[] args) { // TODO Auto-generated method stub Scan...
  • java笔试编程题1

    2020-05-08 17:56:35
    1.利用条件运算符的嵌套来完成此题:学习成绩> =90分的同学用A表示,60-89...import java.util.Scanner; public class demo { public static void main(String[] args) { Scanner sr = new Scanner(System.in)...
  • 最经典,最常见的java面试编程题。多学习,多编写,包你搞定笔试编程题。
  • Java笔试编程题(15)

    万次阅读 2018-09-21 15:26:46
    编程 找出1000以内的所有完数。    public class lianxi09 { public static void main(String[] args) {  System.out.println("1到1000的完数有: ");  for(int i=1; i; i++) {  int t = 0;   for(int...
  • 今天偶然看到一个JAVA算法题,整个网上居然找不到JAVA版的答案,于是自己花了几个小时把它搞定了,代码应该正确,但一定还有更优秀的解决办法,奈何天色已晚,今天就先到这里吧,下面上题目和代码。欢迎各位小伙伴...
  • 男女挨着坐成环,求...import java.io.*; import java.util.*; import java.text.*; import java.math.*; import java.util.regex.*; public class Main { /** 请完成下面这个函数,实现题目要求的功能 **/ /*...
  • 一道JAVA笔试编程

    千次阅读 2012-07-15 21:32:33
    前两天做的一个公司的笔试题,最后的一道编程题:  要求不用循环和本地变量。给正整数n,以2n, 4n, 8n的方式递增,当大于5000时,以特定方式输出。 比如 n = 1234, 输出结果为: 1234 2468 4936...
  • importjava.util.*;publicclassMain{privatestaticintn;//人数privatestaticintm;//语言数privatestaticintk;//已知的信息数privatestaticint[]parent;//并查集privatestaticint[]peopleToLanguag...
  • 有老哥a了第二题吗,瞪了半个小时愣是不知道怎么做。第三题是给一棵树(实际就是无向图,但是无环),每个节点有值,要求找出最长严格递增路径的长度。public class Main {public static class Node {public int val;...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,264
精华内容 905
关键字:

java笔试编程

java 订阅