有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

数组在Java(j2me)中更改向量中的整数的正确方法是什么

作为我关于j2me dynamic arrays的问题的后续行动

我现在想找出一种方法来改变向量中整数的值

假设我有一个向量v,数组arr,整数x,y和I

在C++中我可以做到:

v[arr[x][y]] += i;

在j2me中,到目前为止,我发现最好的方法是:

v.setElementAt(new Integer(((Integer)(v.elementAt(arr[x][y]))).intValue()+i), arr[x][y]);

这真的是用j2me实现的最好方法吗

如果是,这里出了什么问题?Java应该让我“少做点工作”和“为我做事”,但我发现自己一次又一次地为它做额外的工作。是我有什么问题,还是Java有什么问题

编辑:我使用的是J2me SDK 3.0,看起来像是Java1.3,所以没有花哨的泛型和自动装箱之类的东西


共 (6) 个答案

  1. # 1 楼答案

    编辑:在回答这个问题时,我不知道J2ME不支持泛型。感谢苏老师教我:——)

    编辑2:我的解决方案是错误的,因为J2ME不支持泛型

    如果您使用了泛型(JDK1.5以后的版本),您可以做得更简单

    如果我假设声明是这样的

    Vector<Integer> v = new Vector<Integer>();
    

    然后

    v.setElementAt(new Integer(((Integer)(v.elementAt(arr[x][y]))).intValue()+i), arr[x][y]);
    

    变成

    v.setElementAt(new Integer(v.elementAt(arr[x][y]).intValue()+i), arr[x][y]);
    
  2. # 2 楼答案

    我不明白为什么你不这样做,就像你在C++中那样。好的,您必须自己实现动态伸缩数组容器,但是如果实现了,您就可以摆脱整数问题,即Java实际上创建了new Object of type Integer而不是int原语类型

    您最初的问题有一个很好的动态int基元类型数组示例作为答案,请再次查看

  3. # 3 楼答案

    这里有两件事共同导致代码膨胀:缺少类型安全集合和不可变的int包装器

    一种解决方案是使用类型安全集合。GNU Trove为此提供了^{}

    v.set(arr[x][y], v.get(arr[x][y]) + i);
    

    或者,您可以使用像^{}这样的可变类:

    ((MuInteger)v.elementAt(arr[x][y])).add(i);
    

    或者,作为一个肮脏的黑客,长度为1的数组:

    ((int[])v.elementAt(arr[x][y]))[0] += i;
    

    如果可以将两者结合使用(在没有泛型的情况下,肯定需要编写自定义集合类):

    v.get(arr[x][y]).add(i);
    
  4. # 4 楼答案

    Vector<Integer> v = new Vector<Integer>(); 
    v.setElementAt( arr[x][y], arr[x][y] );
    
  5. # 5 楼答案

    JavaSE对语言(泛型)做了一些更改,这会使代码更简单一些,对我来说,我猜你运气不好

    我会选择建议的解决方案,即创建自己的类,该类封装一个普通数组(并在需要时分配一个更大的数组),这是对前面问题的回答

  6. # 6 楼答案

    恐怕我就是这么想的,尽管为了避免那种毛茸茸的单句话,我还是把它分开了:

    Integer val = (Integer)v.elementAt(arr[x][y]);
    int newVal = val.intValue() + i;
    v.setElementAt(new Integer(newVal), arr[x][y]);
    

    自动装箱和泛型让东西变得更好了,但它们出现在Java5中,J2ME基本上是Java1.3的精简版本,除非我被误导了。以下是它在Java 5+中的外观:

    v.setElementAt(arr[x][y], v.get(arr[x][y]) + i);
    

    比C++更冗长,但至少没有铸造。我知道人们不愿意在Java中添加泛型之类的东西,因为普通程序员可能“太难”理解[需要引用]。因此,我们最终得到了不可读的代码,直到。Net得到了仿制药,Sun也加入了这股潮流

    总之,我同意在泛型/装箱之前使用集合框架是一件痛苦的事情,但我希望至少您不会喜欢调试损坏的指针和损坏的内存