`

j2me小练习,教学用

    博客分类:
  • j2me
 
阅读更多






有用的J2ME功能函数
swap(int a, int b) {
    a = a ^ b;
    b = a ^ b;
    a = a ^ b;
} 
/**
* 求平方根
* @param value 定义域
* @return 值域
*/
final public static int sqrt(int value) {
    int sqrt = 0;
    for (int k = 0x100000; k != 0; k >>= 2) {
        int tmp = sqrt + k;
        sqrt >>= 1;
        if (tmp <= value) {
            value -= tmp;
            sqrt += k;
        }
    }
    return sqrt;
} 
//原理:先按行缩放,再按列缩放
//测试结果,在50MS以下

package com.gts.Util;


import javax.microedition.lcdui.*;


public class GImageUtil {

    /**
     * 本次缩放操作的所用时间
     * 以毫秒的形式
     */
    public static long timecost = 0;



    /**
     * 快速缩放一个图片
     * 得到一个不带透明色的缩放後的图片
     * 一般耗时在 50ms 以下
     * @param imgSrc - 原始图片
     * @param scale100 - 缩放比率,以百分比的形式,比如输入200,表示放大到原始的200%;输入75,表示缩小到原始的
     75%
     * @return
     */
    public static final Image fastScale(Image imgSrc, int scale100) {
        int width = imgSrc.getWidth();
        int height = imgSrc.getHeight();

        width *= scale100;
        width /= 100;
        height *= scale100;
        height /= 100;

//              return scale(imgSrc, width, height);
        return fastScale(imgSrc, width, height);
    }



    /**
     * 快速缩放
     * @param imgSrc - 原始图片
     * @param w_new  - 新宽度
     * @param h_new - 新高度
     * @return - 缩放后的图片
     */
    public static final Image fastScale(Image src, int dstW, int dstH) {
        long time = System.currentTimeMillis();

        int srcW = src.getWidth();
        int srcH = src.getHeight();

        Image tmp = Image.createImage(dstW, srcH);
        Graphics g = tmp.getGraphics();

        int delta = (srcW << 16) / dstW;
        int pos = delta >> 1;

        for (int x = 0; x < dstW; x++) {
            g.setClip(x, 0, 1, srcH);
            g.drawImage(src, x - (pos >> 16), 0, Graphics.LEFT |
                        Graphics.TOP);
            pos += delta;
        }

        Image dst = Image.createImage(dstW, dstH);
        g = dst.getGraphics();

        delta = (srcH << 16) / dstH;
        pos = delta >> 1;

        for (int y = 0; y < dstH; y++) {
            g.setClip(0, y, dstW, 1);
            g.drawImage(tmp, 0, y - (pos >> 16), Graphics.LEFT |
                        Graphics.TOP);
            pos += delta;
        }

//        return dst;


        tmp = null;
        timecost = System.currentTimeMillis() - time;

        return dst;
    }
} 
    /**轮询次数计数器*/
    static int sort_counter = 0;

    /**交换次数计数器*/
    static int swap_counter = 0;


    /**
     * 冒泡排序法
     * 从小到大
     * @param data - 原始数据
     * @param smallToBig - true if 从小到大; false if 从大到小
     */
    public static final void bubbleSort(int[] data, boolean smallToBig) {
        int high = data.length;

        int sort_start = sort_counter;
        int swap_start = swap_counter;

        for (int i = 0; i < high; i++) {
            for (int j = i; j < high; j++) {
                ++sort_counter;
                if (smallToBig) {
                    if (data[i] > data[j]) {
                        swapData(data, i, j);
                    }
                } else {
                    if (data[i] < data[j]) {
                        swapData(data, i, j);
                    }
                }

            }
        }

        Util.debug("bubbleSort::Sort_Counter::" + (sort_counter -
                sort_start) + "::swap_counter::" + (swap_counter - swap_start));
    }


    /**
     * Quick sort 来排序一个数组
     * 从小到大
     * @param data - 要排序的数组
     * @param smallToBig - true if 从小到大; false if 从大到小
     */
    public static final void quickSort(int[] data, boolean smallToBig) {
        int low = 0;
        int high = data.length - 1;

        int sort_start = sort_counter;
        int swap_start = swap_counter;

        quickSort(data, low, high, smallToBig);

        Util.debug("quickSort::Sort_Counter::" + (sort_counter -
                                                  sort_start) +
                   "::swap_counter::" + (swap_counter - swap_start));
    }


    /**
     * 快速排序
     * @param data - 原始数组
     * @param low -
     * @param high
     */
    private static final void quickSort(int[] data, int low, int high,
                                        boolean smallToBig) {
        if (low < high) {
            int pivot = partition(data, low, high, smallToBig);
            quickSort(data, low, pivot - 1, smallToBig);
            quickSort(data, pivot + 1, high, smallToBig);
        }
    }


    /**
     * 分割点
     * @param data
     * @param low
     * @param high
     * @return
     */
    private static final int partition(int[] data, int low, int high,
                                       boolean smallToBig) {
        //当前位置为第一个元素所在位置
        int pos = low;
        //采用第一个元素位轴
        int pivot = data[pos];

        for (int i = low + 1; i <= high; i++) {
            ++sort_counter;
            if (smallToBig) {
                //从小到大
                if (data[i] < pivot) {
                    ++pos;
                    swapData(data, pos, i);
                }
            } else {
                //从大到小
                if (data[i] > pivot) {
                    ++pos;
                    swapData(data, pos, i);
                }
            }
        }

        swapData(data, low, pos);

        return pos;
    }



    /**
     * 交换数据
     * @param data - 原始数组
     * @param i
     * @param j
     */
    private static final void swapData(int[] data, int i, int j) {
        int tmp = data[i];
        data[i] = data[j];
        data[j] = tmp;

        ++swap_counter;
    }


    /**
     * Build a 8-byte array from a long.  No check is performed on the
     * array length.
     *
     * @param n The number to convert.
     * @param b The array to fill.
     * @return A byte[].
     */
    public static byte[] toBytes(long n, byte[] b) {
        b[7] = (byte) (n);
        n >>>= 8;
        b[6] = (byte) (n);
        n >>>= 8;
        b[5] = (byte) (n);
        n >>>= 8;
        b[4] = (byte) (n);
        n >>>= 8;
        b[3] = (byte) (n);
        n >>>= 8;
        b[2] = (byte) (n);
        n >>>= 8;
        b[1] = (byte) (n);
        n >>>= 8;
        b[0] = (byte) (n);

        return b;
    }


    /**
     * Build a long from first 8 bytes of the array.
     *
     * @param b The byte[] to convert.
     * @return A long.
     */
    public static long toLong(byte[] b) {
        return ((((long) b[7]) & 0xFF)
                + ((((long) b[6]) & 0xFF) << 8)
                + ((((long) b[5]) & 0xFF) << 16)
                + ((((long) b[4]) & 0xFF) << 24)
                + ((((long) b[3]) & 0xFF) << 32)
                + ((((long) b[2]) & 0xFF) << 40)
                + ((((long) b[1]) & 0xFF) << 48)
                + ((((long) b[0]) & 0xFF) << 56));
    }
  • 大小: 11 KB
  • 大小: 8.5 KB
  • 大小: 10.5 KB
分享到:
评论

相关推荐

    郭克华j2me 教学视频里的 代码 和两个游戏

    贪吃蛇游戏是一个经典的J2ME编程练习。它包括蛇的移动逻辑、食物生成、边界处理、碰撞检测等部分。蛇的身体由多个单元格组成,每个单元格的位置需要通过数组或链表来维护。游戏循环会检查蛇头与食物的位置关系,...

    J2ME教学代码整理

    - **KVM(K Virtual Machine)**:J2ME的虚拟机,针对小内存设备进行了优化。 2. **J2ME开发环境** - **NetBeans或Eclipse**:常用的J2ME开发IDE,提供了图形化的项目管理、代码编辑和模拟器功能。 - **WTK...

    郭克华J2me视频教学源代码.rar

    【标题】"郭克华J2me视频教学源代码.rar" 涉及的主要知识点是Java ME(J2ME)的编程技术,这是一套针对移动设备和嵌入式系统的Java开发平台。J2ME由Java Micro Edition Profile(配置)和Java Micro Edition ...

    j2me课件 j2me课件

    这个压缩包文件包含了与J2ME相关的课件,可能是教学材料、示例代码或项目案例,旨在帮助学习者理解和掌握J2ME技术。 J2ME的核心组成部分是Java ME规范,包括几个配置和框架。其中最常见的是Connected Limited ...

    【J2ME经典珍藏】48个推荐资料+40个经典源码——下载目录

    #### J2ME移动开发实战教学系列视频教程 - **专题地址**:[http://down.51cto.com/zt/54](http://down.51cto.com/zt/54) - **下载量**:600次 - **好评率**:97.00% **知识点概述**: - 该系列视频教程主要面向初学...

    J2ME做的个人电话薄

    标题中的“J2ME做的个人电话薄”表明这是一个使用Java Micro Edition (J2ME) 开发的简单通讯录应用。J2ME是Java平台的一个版本,主要用于嵌入式设备和移动设备,如早期的智能手机和平板电脑。这个项目可能是为了教学...

    NIIT机考J2ME截图1

    其中的"J2ME演示文稿1.ppt"可能是一个PowerPoint演示文件,详细阐述了J2ME的相关主题,可能是教学课件或者考试复习材料。PPT可能涵盖以下内容: 1. **J2ME架构**:包括KVM(Java虚拟机)和配置/ profiles(比如MIDP...

    j2me相关资料,试题与答案

    压缩包中的“习题答案”很可能包含了针对J2ME基础概念、MIDP API使用、应用开发流程等方面的练习题及其解答,是学习者自我检测和提升的重要参考资料。 **八、教学与实验** 作为"实验"和"课件"的标签,这份资料可能...

    j2me 查英语单词

    结合标签“查单词”,我们可以推测这个应用专注于词汇查询,而不是完整的语言学习解决方案,例如对话练习或语法教学。 至于压缩包中的“Translate”文件,可能是源代码、资源文件或者应用的可执行文件。如果是源...

    (J2ME)五子棋 含源代码

    五子棋简单易学,但策略深奥,因此非常适合用作教学或编程练习。 在这个【含源代码】的项目中,开发者使用J2ME技术编写了一个五子棋应用。通过分析源代码,我们可以学习到以下知识点: 1. **图形用户界面(GUI)**:...

    Pro J2ME Polish Open Source Wireless Java Tools Suite(普通下载).rar

    - 实践应用:通过实际项目练习,熟悉工具的使用,掌握优化技巧。 5. 应用场景: - 功能手机应用开发:对于仍然使用J2ME平台的设备,Pro J2ME Polish是增强用户体验和功能的理想选择。 - 教育与研究:作为教学...

    J2ME手机游戏开发技术PPT---2

    在本PPT系列中,它聚焦于J2ME环境下的手机游戏开发,为游戏学院的学生提供内部教学材料。这些PPT文件涵盖了一系列关键主题,旨在帮助学习者掌握创建引人入胜的手机游戏所需的技能。 **主要知识点** 1. **低级用户...

    14. 案例2-2.rar

    这两个SWF(ShockWave Flash)文件可能是教学视频片段,用于演示J2ME开发过程中的具体步骤。SWF格式通常用于在线播放交互式多媒体内容,比如教程中的动画或演示。14-4和14-3的编号可能与教程章节相对应,先学习14-3...

    SM4_MT2截图题

    Word文档可能包含问题的详细说明、步骤指南或者理论知识,而PowerPoint演示文稿可能是教学材料,用于讲解J2ME的基础知识、概念或示例。 在压缩包子文件的文件名称列表中,我们看到两个文件:"J2ME演示文稿.ppt"和...

    java手机游戏开发视频教程附带源码.rar

    本教程主要围绕“Java手机游戏开发”展开,适合初学者进行深入学习。Java作为一种跨平台的语言,被广泛应用于移动设备,...记得在学习过程中,不断练习和调试代码,理论结合实践,才能真正成为Java手机游戏开发的大师。

    8. 异常处理2.rar

    08-4.swf和08-5.swf这两个文件可能是本教程的演示或教学视频,它们可能涵盖了以下主题: - 如何在J2ME中定义和抛出自定义异常。 - 使用try-catch-finally结构处理异常的基本步骤。 - 如何利用Exception类和其子类,...

Global site tag (gtag.js) - Google Analytics