zoukankan      html  css  js  c++  java
  • Java经典编程30题(中)

    11.冒泡排序:依次比较相邻的两个数,将大数放在前面,小数放在后面。第一趟结束,在最后的数必是所有数中的最小数。重复以上过程,直至最终完成排序。由于在排序过程中总是大数往前放,小数往后放,相当于气泡往上升,所以称作冒泡排序。请用JAVA语言编写一个完成冒泡排序算法的程序。

    解答:

    int[] bubbleSort(int before[]) {

    int t;

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

    for (int j = 0; j < before.length – i – 1; j++) {

    if (before[j] > before[j + 1]) {

    t = before[j];

    before[j] = before[j + 1];

    before[j + 1] = t;

    }

    }

    }

    return before;

    }

    12.写出一段socket通讯(客户端)的代码,功能描述如下:

    a)客户端发起socket通讯,报文结构为报文号(3位)+用户名(5位)+密码(8位)+ 结束符(固定为END)。此处报文号为100

    b)服务端收到后返回应答报文,报文结构为报文号(3位)+验证结果(2位)+结束符(固定为END)。此处报文号为101

    c)Socket服务器ip为192.168.0.2,端口号为9999

    解答:

    客户端代码:

    Socket sk = new Socket(“192.168.0.2″,9999);

    OutputStream os = sk.getOutputStream();

    PrintWriter pw = new PrintWriter(os,true);

    pw.write(“100stone888888END”);

    pw.close();

    sk.close();

    服务器端代码:

    ServerSocket vk = new ServerSocket(9999);

    Socket sk = vk.accept();

    OutputStream os = sk.getOutputStream();

    PrintWriter pw = new PrintWriter(os,true);

    pw.write(“101oldEND”);

    pw.close();

    sk.close();

    13.编写函数insert(String str),将字符串”a,123;b,456;c,789”置入HashMap中。

    解答:

    import java.util.HashMap;

    public class HashMapDemo {

    HashMap<String,String> map=new HashMap<String,String>();

    public void insert(String str){

    map.put(“a”, str);

    }

    public static void main(String[] args) {

    HashMapDemo demo=new HashMapDemo();

    demo.insert(“a,123;b,456;c,789″);

    }

    }

    14.有一数组 a[1000]存放了1000 个数,这 1000个数取自1-999, 且只有两个相同的数,剩下的 998个数不同, 写一个搜索算法找出相同的那个数的值(请用 C# or JAVA编程实现,注意空间效率和时间效率尽可能优化)。

    解答:

    import java.util.Arrays;

    public class SearchDemo {

    /** 被搜索数据的大小 */

    private static final int size = 1000;

    public static void main(String[] args) {

    int[] data = new int[size];

    // 添加测试数据

    for (int k = 0; k < data.length; k++) {

    data[k] = k + 1;

    }

    data[999] = 567;

    result(data);

    }

    /**

    * 调用分搜索算法的方法实现查找相同元素

    * @param data

    */

    public static void result(int data[]){

    Arrays.sort(data);

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

    int target = data[i];

    data[i] = 0;

    int result = binaryFind(data, target);

    if (result != -1) {

    System.out.println(“相同元素为:”+data[result]);

    break;

    }

    }

    }

    /**

    * 二分搜索算法实现

    *

    * @param data

    * 数据集合

    * @param target

    * 搜索的数据

    * @return 返回找到的数据的位置,返回-1表示没有找到。

    */

    public static int binaryFind(int[] data, int target) {

    int start = 0;

    int end = data.length – 1;

    while (start <= end) {

    int middleIndex = (start + end) / 2;

    if (target == data[middleIndex]) {

    return middleIndex;

    }

    if (target >= data[middleIndex]) {

    start = middleIndex + 1;

    } else {

    end = middleIndex – 1;

    }

    }

    return -1;

    }

    }

    15.下面是一个由*号组成的4行倒三角形图案。要求:1、输入倒三角形的行数,行数的取值3-21之间,对于非法的行数,要求抛出提示“非法行数!”;2、在屏幕上打印这个指定了行数的倒三角形。

    *******

    *****

    ***

    *

    解答:

    import java.util.Scanner;

    public class Lines {

    public static void main(String args[]) {

    Scanner scanner = new Scanner(System.in);

    int lines = scanner.nextInt();

    if (lines > 3 && lines < 21) {

    for (int i = lines-1; i >= 0; i–) {

    for (int z = 0; z <= i * 2; z++) {

    System.out.print(“*”);

    }

    System.out.print(“ ”);

    }

    }else{

    System.out.println(“非法行数!”);

    }

    }

    }

    16.现有一个32位的整型变量 value和一个有32个元素的数组a[32],要求:1、对value随机赋值;2、让数组a[n]的值等于value“位n”的值,0<=n<=31。举例:如果value的“位0”(Bit0)=0,那么a[0]=0;如果value的“位10”(Bit10)=1,那么a[10]=1。

    解答:

    public class Foo {

    public static void main(String[] args) {

    //产生随机数

    int random = (int) (Math.random() * Integer.MAX_VALUE + 1);

    //转成二进制字符串

    String str=Integer.toBinaryString(random);

    //转成二进制时最前面的零被省略,补上省略的0

    if(str.length()<32){

    for(int j=0;j<=32-str.length();j++){

    str=”0″+str;

    }

    }

    //给数组赋值

    int[] a=new int[32];

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

    a[i]=Integer.parseInt(String.valueOf(str.charAt(i)));

    System.out.println(“a[“+i+”]=”+a[i]);

    }

    }

    }

    17.现有1~100共一百个自然数,已随机放入一个有98个元素的数组a[98]。要求写出一个尽量简单的方案,找出没有被放入数组的那2个数,并在屏幕上打印这2个数。注意:程序不用实现自然数随机放入数组的过程。

    答:

    int[] b = new int[]{….存入98个随机的1~100的整数}; int[] a = new int[100]; for(int t : b) a[t-1]=t; for(int t=0; t < a.length; t++) if(a[t]==0) System.out.println(t+1);

    18. 实现函数public String[ ] array(List list),其中参数list中元素类型为字符串

    解答:

    public String[] array(List list) {

    String[] elementData = new String[list.size()];

    for(int i=0;i<list.size();i++){

    elementData[i]=(String)list.get(i);

    }

    return elementData ;

    }

    19.创建类Person,其中存储的成员数据为:age(int),sex(boolean),weight(int),至少有一个构造函数可以初始化这三个属性值,同时提供获取这三个属性值的public方法

    解答:

    public class Person {

    private int age;

    private boolean sex;

    private int weight;

    public Person() {

    }

    public Person(int age, boolean sex, int weight) {

    this.age = age;

    this.sex = sex;

    this.weight = weight;

    }

    public int getAge() {

    return age;

    }

    public boolean isSex() {

    return sex;

    }

    public int getWeight() {

    return weight;

    }

    }

    20.设计线程类WorkerThread,其构造函数接受一个message字符串作为参数,把该字符串打印到console上,同时,在WorkThread的main函数中启动该线程。

    解答:

    public class WorkerThread extends Thread {

    public WorkerThread(String message) {

    System.out.println(message);

    }

    public static void main(String[] args) {

    new WorkerThread(“hello world!”).start();

    }

    }

    1、转载来源于 https://blog.csdn.net/wickedvalley/article/details/51589792

    2、想要转载请注明转载来源

  • 相关阅读:
    eventlet设计模式
    backbone Model调用save方法的时候提交方式
    django form POST方法提交表达
    wordpress简单搭建个人博客
    docker-py环境配置
    EditPlus安装与注册
    xmind安装和升级
    统计学习的相关定义
    LaTeX初识
    flask_mail发送邮件
  • 原文地址:https://www.cnblogs.com/pressur/p/11191307.html
Copyright © 2011-2022 走看看