黑马程序员_日记63_fill替换

本文探讨了Java和Android培训的核心概念与实践,提供了实用的代码示例,帮助开发者深入理解并掌握这两项关键技术。从基础知识到进阶应用,通过实际案例展示如何在Android平台上使用Java进行高效开发。

——- android培训java培训、期待与您交流! ———-

/*
static void
fill(List

import java.util.*;
public class CollectionsFillDemo
{
    public static void sop(Object obj)
    {
        System.out.println(obj);
    }
    public static void main(String[] args)
    {
        //fillDemo();
        //copyDemo();

        //创建一个集合List
        List<String> list = new ArrayList<String>();

        //添加元素
        list.add("ab");
        list.add("ac");
        list.add("ad");
        list.add("ae");
        list.add("agv");
        list.add("aw");

        //打印原集合
        sop(list);

        //fillDemo2(list,"obj",1,4);//把list集合中1,2,3这三个角标的元素替换为"obj"
        //打印替换后的集合
        //sop(list);
        //Collections.replaceAll(list,"agv","key");//把集合中指定元素替换成关键字
        //打印替换后的集合
        //sop(list);
        Collections.reverse(list);//反转集合
        //打印反转后的集合
        sop(list);
    }

    //copy演示
    public static void copyDemo()
    {
        //创建一个集合List
        List<String> list = new ArrayList<String>();

        //添加元素
        list.add("ab");
        list.add("ac");
        list.add("ad");
        list.add("ae");

        //打印集合一
        sop("集合一"+list);

        //创建第二个集合
        List<String> list_2 = new ArrayList<String>();

        //集合2添加元素
        list_2.add("a1");
        list_2.add("a0");
        list_2.add("a2");
        list_2.add("a5");
        list_2.add("a4");
        list_2.add("a3");

        Collections.copy(list_2,list);
        sop("集合二"+list_2);
    }

    //fill演示
    public static void fillDemo()
    {
        //创建一个集合List
        List<String> list = new ArrayList<String>();

        //添加元素
        list.add("ab");
        list.add("ac");
        list.add("ad");
        list.add("ae");

        //打印原集合
        sop(list);
        //调用fill方法,替换所有元素为指定元素
        Collections.fill(list,"abc");
        sop(list);  
    }

    /*
    练习。fill方法可以将list集合中所有元素替换成指定元素。
    ,将list集合中部分元素替换成指定元素。
    */
    public static <T> void fillDemo2(List<? super T> list, T obj,int start, int end  )
    {
        /*
        思路分析:因为要操作角标,所以应该用到了for循环,
        将指定角标依次全部替换成指定元素
        */
        for(int i = start; i < end; i++ )
        {
            //移除
            list.remove(i);
            //插入
            list.add(i,obj);
        }
    }
}

Fill用之定义元素替换了集合中的所有元素.jpg
这里写图片描述
Fill替换指定角标范围.jpg
这里写图片描述

### 作用 `glDisable(GL_POLYGON_OFFSET_FILL)` 的作用是禁用多边形偏移填充功能。在 OpenGL 中,启用 `GL_POLYGON_OFFSET_FILL` 时,会在光栅化过程中对多边形的深度值进行偏移,从而避免深度冲突问题,而使用 `glDisable(GL_POLYGON_OFFSET_FILL)` 则是取消这种偏移操作,让多边形以正常的深度值进行渲染。 ### 使用场景 - **不需要多边形偏移时**:当场景中不存在深度冲突问题,或者开发者不希望对多边形的深度值进行偏移时,可以使用 `glDisable(GL_POLYGON_OFFSET_FILL)` 来关闭该功能,以节省一定的计算资源。例如,场景中物体之间的距离足够大,不会出现深度值相近导致的深度冲突现象。 - **临时禁用**:在某些特殊的渲染阶段,可能需要临时关闭多边形偏移功能。比如在渲染一些特殊效果时,需要让多边形按照原始的深度值进行渲染,此时就可以使用该函数来临时禁用偏移,待特殊效果渲染完成后,再根据需要重新启用。 ### 与深度纹理的关系 深度纹理是一种存储物体深度信息的纹理,用于实现诸如阴影、深度测试等效果。`glDisable(GL_POLYGON_OFFSET_FILL)` 与深度纹理的关联主要体现在对深度值的影响上。当启用多边形偏移填充时,物体的深度值会被修改,这会影响到深度纹理中存储的深度信息。而使用 `glDisable(GL_POLYGON_OFFSET_FILL)` 可以保证物体的深度值不被偏移,从而使深度纹理中存储的是物体原始的深度信息,确保基于深度纹理的效果(如阴影的准确性)不受多边形偏移的干扰。 ```c // 示例代码展示 glDisable(GL_POLYGON_OFFSET_FILL) 的使用 #include <GL/glut.h> void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // 启用深度测试 glEnable(GL_DEPTH_TEST); // 启用多边形偏移填充 glEnable(GL_POLYGON_OFFSET_FILL); glPolygonOffset(1.0, 1.0); // 绘制一些多边形 // 禁用多边形偏移填充 glDisable(GL_POLYGON_OFFSET_FILL); // 绘制其他不需要偏移的多边形 glutSwapBuffers(); } int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); glutInitWindowSize(800, 600); glutCreateWindow("GL_POLYGON_OFFSET_FILL Example"); glutDisplayFunc(display); glutMainLoop(); return 0; } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值