Java笔试面试题三(编程算法)

本文整理了Java编程中常见的笔试面试题目,涵盖字符串操作、日期处理、程序算法、数据结构等多个方面。通过实例代码展示了如何解决古典问题,如斐波那契数列、素数判断、水仙花数、分解质因数等,以及一些逻辑运算和条件判断。同时,文章还涉及字符串统计、循环和递归的应用,如统计字符类型、求完数、求和等。这些题目旨在考察和提高编程者的逻辑思维和算法实现能力。
摘要由CSDN通过智能技术生成

一、字符串相关操作


 
 
 
String s = " Hello java,hello android,hello OOP,HELLO String,hello JAVASE!";
System.out.println("原始字符串:" + s);
// 原始字符串: Hello java,hello android,hello OOP,HELLO String,hello JAVASE!
System.out.println("转换为大写:" + s.toUpperCase());
// 转换为大写: HELLO JAVA,HELLO ANDROID,HELLO OOP,HELLO STRING,HELLO JAVASE!
System.out.println("转换为小写:" + s.toLowerCase());
// 转换为小写: hello java,hello android,hello oop,hello string,hello javase!
System.out.println("字符串拼接:" + s.concat("Hello concat"));
// 字符串拼接: Hello java,hello android,hello OOP,HELLO String,hello JAVASE!Hello concat
System.out.println("查找java的位置:" + s.indexOf("java"));
// 查找java的位置:8
System.out.println("从字符串最后查找java的位置:" + s.toLowerCase().lastIndexOf("java"));
// 从字符串最后查找java的位置:56
System.out.println("字符串长度:" + s.length());
// 字符串长度:63
System.out.println("去空字符:" + s.trim().length());
// 去空字符:61
System.out.println("replace:" + s.replace("hello", "hi"));
// replace: Hello java,hi android,hi OOP,HELLO String,hi JAVASE!
System.out.println("replaceAll:" + s.replaceAll("hello", "hi"));
// replaceAll: Hello java,hi android,hi OOP,HELLO String,hi JAVASE!
s = "file.txt";
System.out.println("s.endsWith(\".java\"):" + s.endsWith(".java"));
// s.endsWith(".java"):false
s = "d:\\test\\test.java";
System.out.println("路径是否是D盘:" + s.startsWith("d:\\"));
// 路径是否是D盘:true
String[] sarr = "1,2,3,4,5,6,7".split(",");
sarr="2016-10-10".split("-");
System.out.println(Arrays.toString(sarr));
// [2016, 10, 10]
System.out.println(Integer.parseInt(sarr[1]);
// true
字符串与int之间的转换
int-->String:int i;
String s=String.valueOf(i) String-->int:String s;
<1>int i=Integer.parseInt(s); <2>int i=Integer.valueOf(s).intValue();
输出一个数组
String intArrayString = Arrays.toString(in); System.out.println(intArrayString);
检索一个字符串中子字符串出现的次数
int count = 0, start = 0; while (s.indexOf(ss[j], start) >= 0 && start < s.length()) { count++; start = s.indexOf(ss[j], start) + ss[j].length(); }
字符串的反转
public static Stringreverse(String s){         int length=s.length();         StringBuffer result=new StringBuffer(length);         for(int i=length-1;i>=0;i--)             result.append(s.charAt(i));         return result.toString(); }
二、日期和时间

1.如何取得年月日,小时分秒
Date dat=new Date();
dat.getYear();dat.getMonth();dat.getDay();dat.getHours();…

2.如何取得从1970年到现在的毫秒数
long now=dat.getTime();
如何获取某个日期是当月的最后一天
3.如何格式化日期
DateFormate df=DateFormate.getInstance();
df.Format(dat);

三、程序算法例题

【程序1】  

题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?   (1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765)

1.程序分析:  兔子的规律为数列1,1,2,3,5,8,13,21.... 

public class exp2{

    public static void main(String args[]){

        int i=0;

        for(i=1;i<=20;i++)

            System.out.println(f(i));

    }

    public static int f(int x) {

        if(x==1 || x==2)

            return 1;

        else

            return f(x-1)+f(x-2);

    }

}

public class exp2{

    public static void main(String args[]){

        int i=0;

        mathmymath = new math();

        for(i=1;i<=20;i++)

            System.out.println(mymath.f(i));

    }

}

class math{

    public int f(int x){

        if(x==1 || x==2)

            return 1;

        else

            return f(x-1)+f(x-2);

    }

}

【程序2】 

题目:判断101-200之间有多少个素数,并输出所有素数。  

1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。

public class Sushu{

   public static void main(String[] args){

        int i,j,count=0;

        for (i = 101; i <= 200; i++) // 101-200的数{

            for (j = 2; j <= (int)Math.sqrt(i); j++){

                  if (i % j == 0)

                  break;

              }

            if (j > (int)Math.sqrt(i)){

                  count++;

                  System.out.println(i);

              }

          }

           System.out.println("101200间有" + count + "个素数。");

    }

}(2,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35,37,39,41,43,45,47,49,51,53,55,57,59,61,63,65,67,69,71,73,75,77,79,81,83,85,87,89,91,93,95,97,99,101,103,105,107,109,111,113,115,117,119,121,123,125,127,129,131,133,135,137,139,141,143,145,147,149,151,153,155,157,159,161,163,165,167,169,171,173,175,177,179,181,183,185,187,189,191,193,195,197,199)

【程序3】  

题目:打印出所有的 "水仙花数",所谓 "水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数 ",因为153=1的三次方+5的三次方+3的三次方。 

1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。   (结果:153、370、371、407)

public class exp2{

    public static void main(String args[]){

        int i=0;

        mathmymath = new math();

        for(i=100;i<=999;i++)

            if(mymath.shuixianhua(i)==true)

            System.out.println(i);

    }

}

class math{

    public boolean shuixianhua(int x){

      int i=0,j=0,k=0;

      i=x / 100;

      j=(x % 100) /10;

      k=x % 10;

      if(x==i*i*i+j*j*j+k*k*k)

           return true;

      else

           return false; 

    }

}

【程序4】  

题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。 

程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:  

(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。  

(2)如果n<> k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你,重复执行第一步。  

(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。  

public class exp2{

    public exp2(){}

    public void fengjie(int n){

        for(int i=2;i<=n/2;i++){

            if(n%i==0){

                System.out.print(i+"*");

                fengjie(n/i);

             }

        }

        System.out.print(n);

        System.exit(0);///不能少这句,否则结果会出错

     }

     public static void main(String[] args){

             String str="";

             exp2 c=new exp2();

            str=javax.swing.JOptionPane.showInputDialog("请输入N的值(输入exit退出):");

             int N;

             N=0;

             try{

                  N=Integer.parseInt(str); 

             }catch(NumberFormatException e){

  e.printStackTrace();

    }

            System.out.print(N+"分解质因数:"+N+"=");

            c.fengjie(N);

      }   

}

【程序5】  

题目:利用条件运算符的嵌套来完成此题:学习成绩> =90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。 

1.程序分析:(a>b)?a:b这是条件运算符的基本例子。  

import javax.swing.*;

public class ex5 {

        public static void main(String[] args){

             String str="";

             str=JOptionPane.showInputDialog("请输入N的值(输入exit退出):");

             int N;

             N=0;

             try{

                N=Integer.parseInt(str);

              }catch(NumberFormatException e){

                e.printStackTrace();

               }

             str=(N>90?"A":(N>60?"B":"C"));

             System.out.println(str);

        }   

}

【程序6】  题目:输入两个正整数m和n,求其最大公约数和最小公倍数。  

1.   程序分析:利用辗除法。  

 /*
*在循环中,只要除数不等于0,用较大数除以较小的数,将小的一个数作为下一轮循环的大数,
*取得的余数作为下一轮循环的较小的数,如此循环直到较小的数的值为0,返回较大的数,
*此数即为最大公约数,最小公倍数为两数之积除以最大公约数。
* /

最大公约数:

public class CommonDivisor{

    public static void main(String args[]){

        commonDivisor(24,32);// 最小公倍数:96 最大公约数:8

    }

    static int commonDivisor(int M, int N){

        if(N<0||M<0){

            System.out.println("ERROR!");

            return -1;

        }

        if(N==0) {

            System.out.println("the biggest common divisor is :"+M);

            return M;

        }

        return commonDivisor(N,M%N);

  

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值