是否有更有效的方法来快速编辑具有 Java 表中相应值的多个变量?

问题描述 投票:0回答:1

这是我当前的代码片段,没有发布所有其他信息,假设一切正常。代码没有任何问题。例如,我正在阅读一个带有 Grabber(一个 Scanner 对象)的文本文档,其中一行文本如下所示:

5,4,6,1,10,10,10,10,0,0,0,0,
第一行的数字永远不会多于或少于 12 个,因此永远不会出现越界问题。此外,所有获得整数值的变量都是 int 类型。

String[] Grabbed_Line = Grabber.nextLine().split(","); 
Wins = Integer.parseInt(Grabbed_Line[0]);
Losses = Integer.parseInt(Grabbed_Line[1]);
Ties = Integer.parseInt(Grabbed_Line[2]);
TrueTies = Integer.parseInt(Grabbed_Line[3]);
P1Wins = Integer.parseInt(Grabbed_Line[4]);
P1Losses = Integer.parseInt(Grabbed_Line[5]);
P1Ties = Integer.parseInt(Grabbed_Line[6]);
P1TrueTies = Integer.parseInt(Grabbed_Line[7]);
P2Wins = Integer.parseInt(Grabbed_Line[8]);
P2Losses = Integer.parseInt(Grabbed_Line[9]);
P2Ties = Integer.parseInt(Grabbed_Line[10]);
P2TrueTies = Integer.parseInt(Grabbed_Line[11]);

理想情况下,我宁愿将所有这些变量放入表/数组/数组列表中,并使用 for 语句来分配它们,比如

String[] Grabbed_Line = Grabber.nextLine().split(","); 
int[] Vars = {Wins,Losses,Ties,TrueTies,P1Wins,P1Losses,P1Ties,P1TrueTies,P2Wins,P2Losses,P2Ties,P2TrueTies};
for(int Counter = 0; Counter < 12; Counter++)
      Vars[Counter] = Integer.parseInt(Grabbed_Line[Counter]);

显然,我知道这行不通(我的意思是它会但不是我想要的方式);我只是将 int 值传递到表中,它实际上不会影响变量。在 C++ 中,我会使用指针和地址来做这样的事情,但据我所知,Java 不会这样做。我想如果它们是引用而不是原语,情况会有所不同,但我不知道该怎么做,因为我很笨。

我想尝试的一件事是通过字符串引用变量,这听起来很愚蠢。我知道一些语言,表/数组可以有字符串作为索引,所以我能够做到这一点。现在想想,ArrayList支持吗?不,它看起来不像。我可以通过在开始时制作一个包含 12 个整数的数组来作弊,并且任何时候我通常会更改其中一个变量,我可以只更改数组中的适当位置,但这样会变得难以记住哪个索引对应到我想保存的,比如

int[12] Multiple_Vars; // Initialized at the beginning
for(int Counter=0;Counter<12;Counter++)
     Multiple_Vars[Counter] = 0;
...
... // later on in the code somewhere
if(Your_Attack>Their_Defense)
     Multiple_Vars[7]+=1; // Was it the 8th or 3rd index that keeps track of points?
...
...

我是否遗漏了一些明显的东西,或者我是否只需要咬紧牙关并像我在开始时描述的那样编辑所有变量?我想我可以通过制作一个函数来节省打字空间,以节省一遍又一遍地输入 Integer.parseInt() 的时间,但除此之外,我想不出任何办法。

java arrays arraylist variable-assignment
1个回答
1
投票

充实@Sweeper 的评论:

final int WINS = 0;
final int LOSSES = 1;
final int TIES = 2;
final int TRUE_TIES = 3;
final int P1_WINS = 4;
final int P1_LOSSES = 5;
final int P1_TIES = 6;
final int P1_TRUE_TIES = 7;
final int P2_WINS = 8;
final int P2_LOSSES = 9;
final int P2_TIES = 10;
final int P2_TRUE_TIES = 11;

String[] Grabbed_Line = Grabber.nextLine().split(",");
for (int = WINS; i <= P2_TRUE_TIES; i++) {
    scores[i] = Integer.parseInt(Grabbed_Line[i]);
}

或者您可以使用带有

Map
值(
int
WINS
等)的
LOSSES
作为键。
最后,如果 CSV 的第一行给出列名,你可以用反射做一些聪明的事情......假设变量实际上是对象字段。
但是没有好的方法可以按照您设想的方式将每个分数放入一个不同的(本地)Java 变量中。而且你不能做 C / C++ 技巧,比如增加变量的地址。
如果你的效率标准是 cpu 时间或内存使用,那么你原来的方法就不能改进了。

© www.soinside.com 2019 - 2024. All rights reserved.