1、\b在java中为什么不起作用?本来应该是退格的,为什么没有起作用? 
2、如果有一个数组,知道这个数组大小,但是不知道哪些元素被赋值,怎么进行判断。比如一个整型数组,知道里面存放有整数,如何判断有几个整数,都是那些元素? 

解决方案 »

  1.   

    对于第一个问题\b确实是退格,表示往后退一个位置。如:String str = "java\b\b\bc";最后打印出来是jcva,在eclipse中测试出来的是乱码代替了\b,但是在命令行下运行正常,个人觉得这个是eclipse编码的问题。第二个问题。可以用一个循环遍历这个数据。查看每个位置的数据,如果不是null,说明这个位置被赋值。对于你说的整数,可以认为如果这个位置不是0,则被赋值。
      

  2.   

    1.Eclipse的输出控制台对'\b'(ASCII值为8)的解释不是“退格”。2.这个问题实际上没意义。Java数组中不存在“没被赋值”的元素。数组对象在被创建的同时JVM就对它的每一个元素进行初始化了。对于静态初始化来说,数组元素会按照静态初始化列表依次赋值,对于没有元素列表的初始化,JVM会为数组的每个元素赋默认值:整形为0,浮点形为0.0,布尔型为false,引用型为null。
      

  3.   

    1.对于退格,\t加一个制表符键等,这些应用不大。对于一个新手来说,不要理会这些小技巧。应该把重点掌握。如:if,else,switch,while循环,for循环等掌握,比这个退格键更有意义。
    2.对于数组。在java中,他是一经定义,就是不可变的。要看它的长度,有一个属性:数组名.length 
    这个属性的值,就是数组的长度。长度多长,就有多少个元素。(如果规定了元素的类型。就有默认值,int类型是0,string类型是null.等)
    打个不是很恰当的比喻:数组就好比一家五星级酒店。酒店一旦营业了(好比建了个数组),它一层楼的房间个数,是规定了(比方是15间房)。他默认是房间是0个人。当有1个人来了,他的房间人数就是1,如果有5个人,为了节省钱,同住一个房间,他的住人数是5)
    你要看里面的人数,
    可以指定数组下标(好比酒店房间号),或者通过循环遍历,都可以。
      

  4.   

    第一个问题:转义字符 \b  确实是退格键   unicode码值是\u0008  第二个问题:对于一个数组,如果已经知道数组的大小,则在遍历这个数组的过程中,会遍历出每一个值,而对于没有赋值的那些数组元素,会输出它的默认值 
      

  5.   

    关于退格键,我尝试了,但是确实没有反应。比如这个语句“System.out.println("java,"+'\b');”,输出的结果就是“java,”,逗号没有被删除掉。在命令行下面用javac和java命令得到的结果。
    第二个问题,其实不赋值java数组中也有默认值,就是各种类型的“0”,我想知道如果写一个方法接收一个数组,如何判断这个数组哪些元素没被手工赋值。比如创建一个数组int a[]=new int[5];我给前三个元素赋值3,5,7,那么这个数组排序后就是0,0,3,5,7,但是我期望是3,5,7,0,0.有没有办法获知哪些元素是手工赋值的?这样即使是前四个元素赋值,3,5,7,0,排序后也是0,3,5,7.我知道有个sort方法可以对一部分元素赋值,但还是要知道哪些元素是手工赋值的。
      

  6.   

    谢谢,但是我的这个程序没在Eclipse中做,简单的记事本+命令行。
    第二个,我知道java中数组元素是有默认值的,但就是这个默认值让我迷惑,如何区分默认值和手工赋值的元素?
      

  7.   

    现在的书本里好像几乎没提到这一点,我记得很早以前看过的一本教材(记得应该讲BASIC的)上对数组模型的讨论中提到一点:数组具有无状态性。
    数组模型无需记录当前状态:既无法知道元素的值是否改变过,也无法知道某元素修改前的值。
    因此LZ的要求用标准数组模型是实现不了的,除非扩展数组模型,如定义一个数组的扩展类。
      

  8.   

    我想也是,数组元素和变量一样,只能记录一个值,本身不会记录其它的值,除非用别的存储空间储存,看来只能依靠程序员了,其实java中排序的sort方法虽然能对指定元素排序,但也需要编程时指定了。