Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使数组指向已初始化的数据类型?Java/Android_Java_Arrays_Pointers_Store - Fatal编程技术网

如何使数组指向已初始化的数据类型?Java/Android

如何使数组指向已初始化的数据类型?Java/Android,java,arrays,pointers,store,Java,Arrays,Pointers,Store,对不起,我不知道如何表达这个问题。 我知道一个解决问题的方法,现在我想知道我是否能把它做得更好 是否可以将数组指向已初始化的数据类型 String matt =""; String tom =""; String id =""; String[] ar = {"id", "matt", "tom"}; ar[0]="hi"; ////////////////////// 我怎样才能做到这一点: ar[0]=“你好” 等于: id="hi"; ///////////////////// 或者

对不起,我不知道如何表达这个问题。 我知道一个解决问题的方法,现在我想知道我是否能把它做得更好

是否可以将数组指向已初始化的数据类型

String matt ="";
String tom ="";
String id ="";

String[] ar = {"id", "matt", "tom"};
ar[0]="hi";
////////////////////// 我怎样才能做到这一点:
ar[0]=“你好”
等于:

id="hi";
///////////////////// 或者我可以这样做吗

String[] ar = {String id ="", String matt ="", String tom =""};
///////原始代码/////////

        String matt ="";
    String tom ="";
    String id ="";
    String[] ar = {"id", "matt", "tom"};


    for (int i = 0; i < ar.length; i++) {  // i indexes each element successively.
        Pattern p = Pattern.compile(ar[i]+":(\\d+)");
        Matcher m = p.matcher(data);
        if (m.find()) {
            data=data+"\nfound: "+ar[i]+" "+m.group(1).toString();
            ar[i]= m.group(1).toString();   
        }
    }
    data=data+"\nvaribale: "+ id;

    tv.setText(data);
String matt=”“;
字符串tom=“”;
字符串id=“”;
字符串[]ar={“id”,“matt”,“tom”};
对于(inti=0;i
要想做你想做的事,你只能尝试以下方法:

public class StringWrapper {
    public String value;

    public StringWrapper(String value)
    {
        this.value = value;
    }   
}
并像这样使用它:

StringWrapper id = new StringWrapper("id");
StringWrapper tom = new StringWrapper("tom");
StringWrapper matt = new StringWrapper("matt");

StringWrapper[] objs = new StringWrapper[] {id, tom, matt};

for(StringWrapper i : objs) {
    System.out.println(i.value);
}

objs[1].value = "Doge";

System.out.println(tom.value); // Doge
为了使它更好,您还应该添加
toString()
hashcode()
equals()
。而且可能比我用的名字要短。

你不能做你想做的事,原因有很多。
  • 不能按名称引用变量,除非有大量可怕的反射代码
  • 字符串在Java中是不可变的,因此,如果可以按名称获取变量,则不能使用所需的间接方式更改字符串的值

  • 或者您可以创建一个类似这样的方法来更新数组和元素。它的代码太基本了——它只是想让你知道实现这一点的可能方法

    public class RandomStuff {
        private static String matt = "";
        private static String tom = "";
        private static String id = "";
    
        public static void main(final String[] args) {
            final String[] ar = { "id", "matt", "tom" };
            updateAr(0, "hi", ar);
            System.out.println("matt:" + matt);
        }
    
        public static void updateAr(final int index, final String val, final String[] ar) {
            ar[index] = val;
            if (index == 0) {
                matt = val;
            }
            if (index == 1) {
                tom = val;
            }
            if (index == 2) {
                id = val;
            }
        }
    }
    

    不可以。当我以ar[1]为目标时,我想更改存储在“matt”中的值。您不能更改,因为字符串是不可变的。你必须制作一些字符串包装器,并将值保存在其中。你能详细介绍一下字符串包装器吗?你不能;你到底想做什么?看起来您想要解析一些看起来(部分)像“tom:23”的文本,并将tom的值设置为23?在这种情况下,您需要的是一个(例如),而不是一个数组。如果我没有弄错您的问题,您希望将字段名存储在数组中,并让循环将结果分配给相应的字段吗?您可以使用Java反射(或者像BeanUtils这样的帮助程序库)来实现这一点,但我不会这么做。另一种选择是使用映射而不是字段<代码>map.put(ar[i],m.group(1.toString())谢谢。我的朋友总是告诉我,我在寻找那些不存在的东西。