Java 如何动态命名变量?

Java 如何动态命名变量?,java,arrays,variables,variable-assignment,Java,Arrays,Variables,Variable Assignment,我不确定我是否使用了正确的命名法,所以我会尽量使我的问题尽可能具体。也就是说,我想这个问题总是会出现,可能有几种不同的方法来解决它 假设我有一个叫做main的数组(向量),在1980年到2000年之间有1000个随机年份,我想用它制作20个独立的数组(向量)。这些数组将命名为array1980,array1981等,其长度也将为1000,但将包含1,其中名称中的索引等于main中的相应元素,而其他地方的索引为0。换言之: for(int i=0; i<1000; i++){ if(

我不确定我是否使用了正确的命名法,所以我会尽量使我的问题尽可能具体。也就是说,我想这个问题总是会出现,可能有几种不同的方法来解决它

假设我有一个叫做
main
的数组(向量),在1980年到2000年之间有1000个随机年份,我想用它制作20个独立的数组(向量)。这些数组将命名为
array1980
array1981
等,其长度也将为1000,但将包含1,其中名称中的索引等于
main
中的相应元素,而其他地方的索引为0。换言之:

for(int i=0; i<1000; i++){
    if(main[i]==1980){
       array1980[i]=1;
    } else {
       array1980[i]=0;
    }
<>我目前使用的是MATLAB,但我也可以在爪哇、C++和Python中做一点,我想知道人们如何解决这个问题。理想情况下,我希望能够以某种方式操纵单个变量(或子数组),使年份保留在变量名(或数组索引)中,以减少出错的机会,并使事情总体上更容易处理


我非常感谢你的帮助

一般的解决方案是不创建具有动态名称的变量,而是创建一个映射。具体如何做到这一点将因语言而异


对于Java来说,一开始就值得一看。

一般的解决方案是不创建具有动态名称的变量,而是创建一个映射。具体如何做到这一点将因语言而异

boolean main[][] = new boolean[1000][20];
for (int i=0; i < 1000; i++) {
    array[i][main[i]-1980] = true;
}
对于Java来说,这是值得一看的开始。

boolean main[][]=new boolean[1000][20];
boolean main[][] = new boolean[1000][20];
for (int i=0; i < 1000; i++) {
    array[i][main[i]-1980] = true;
}
对于(int i=0;i<1000;i++){ 数组[i][main[i]-1980]=true; }
在许多情况下,贴图将是一个很好的解决方案,但在这里,您可以使用一个2-dim布尔数组,因为其大小在(0-20)之前已知,并且是连续的、可计算的

有些语言会为每个元素将布尔数组初始化为false,因此您只需要将值设置为
true
,而
main[i]
指向该值

由于
main[i]
返回1980到2000之间的数字,
1980 main[i]
将返回1980-1980=0到2000-1980=20。要查找您的值,您必须将
1980
添加到第二个索引中; 对于(int i=0;i<1000;i++){ 数组[i][main[i]-1980]=true; } 在许多情况下,贴图将是一个很好的解决方案,但在这里,您可以使用一个2-dim布尔数组,因为其大小在(0-20)之前已知,并且是连续的、可计算的

有些语言会为每个元素将布尔数组初始化为false,因此您只需要将值设置为
true
,而
main[i]
指向该值


由于
main[i]
返回1980到2000之间的数字,
1980 main[i]
将返回1980-1980=0到2000-1980=20。要找到你的值,你必须在第二个索引中加上
1980

唐·罗比的答案是正确的,但我想完成它

您可以将地图用于此目的,其外观如下所示:

Map<Integer,ArrayList<Integer>> yearMap = new HashMap<Integer,ArrayList<Integer>>();
yearMap.put(1980,new ArrayList<Integer>());
for (int i = 0; i < 1000; i++){
    yearMap.get(1980).add(0);
}
yearMap.get(1980).set(999,1);
System.out.println(yearMap.get(1980).get(999));
Map yearMap=newhashmap();
yearMap.put(1980年,新ArrayList());
对于(int i=0;i<1000;i++){
年地图。获取(1980年)。添加(0);
}
年地图.get(1980).set(999,1);
System.out.println(yearMap.get(1980).get(999));
但是可能有更好的方法来解决你的问题。你不应该问如何用X解Y,而应该问如何解Y


那么,你想解决的是什么呢?

唐·罗比的答案是正确的,但我想完成它

您可以将地图用于此目的,其外观如下所示:

Map<Integer,ArrayList<Integer>> yearMap = new HashMap<Integer,ArrayList<Integer>>();
yearMap.put(1980,new ArrayList<Integer>());
for (int i = 0; i < 1000; i++){
    yearMap.get(1980).add(0);
}
yearMap.get(1980).set(999,1);
System.out.println(yearMap.get(1980).get(999));
Map yearMap=newhashmap();
yearMap.put(1980年,新ArrayList());
对于(int i=0;i<1000;i++){
年地图。获取(1980年)。添加(0);
}
年地图.get(1980).set(999,1);
System.out.println(yearMap.get(1980).get(999));
但是可能有更好的方法来解决你的问题。你不应该问如何用X解Y,而应该问如何解Y


那么,您试图解决的是什么?

使用数组数组或数组字典/哈希表?使用数组数组或数组字典/哈希表?+1-数组数组数组而不是数组映射适合这种情况。谢谢。对于这个特殊的任务,我宁愿使用1和0,因为它们将直接通过矩阵运算进行操作。我想我可以使用二进制类型,但它们在运行时会被转换为int,对吗?+1-对于这种情况,数组数组的数组而不是数组的映射很好。谢谢。对于这个特殊的任务,我宁愿使用1和0,因为它们将直接通过矩阵运算进行操作。我想我可以使用二进制类型,但它们在运行时会被转换成整数,对吗?+1:Esp的“可能有更好的方法来解决这个问题”我目前正在进行数据分析,需要跟踪20个左右的向量以用作虚拟变量。我可以把它们放在一个年份虚拟数组的列中,然后将整个数组连接到我正在使用的各种数组中,但是所有的零向量都需要事先删除,并且我需要跟踪删除了哪些年份。也就是说,我是一个新手程序员,我的直觉通常是在遇到这样的问题时,用唯一的名称生成一组变量,我只是想看看人们通常是如何处理它的。我想我的全部问题是“当你需要使用相同的数据执行一组操作时,你如何保持一切有序?”(含糊不清,我知道). 我被Don Roby使用地图的想法所吸引,因为我只需要在单个分析的上下文中跟踪关键点(即,制作一个名为“GMM_分析”的地图,其中包含我的所有数据、参数估计、统计数据等,然后制作另一个名为“2SLS_分析”的地图,其中包含所有相同的原始数据,但不同