所以我有这个数组有10个元素,每个元素的值为10:
int health1 [] = {10,10,10,10,10,10,10,10,10,10};
如何同时减少( - - )数组中的所有元素?
health1--;
上面的调用给出:类型不匹配," int []"与" int"
不匹配答案 0 :(得分:7)
我不相信有一种方法可以减少单个操作中的每个值。
我会迭代数组:
for (int i = 0; i < health1.length; i++) {
health1[i]--;
}
关于你得到的错误:这是因为health1
是一个整数数组,但是--
是整数本身的运算符。因此,编译器从容器中减去1
没有意义,因为容器不是数字。因此,“类型”是“不匹配的”。
答案 1 :(得分:5)
这是不可能的。你必须使用一个循环:
for (int i = 0; i < health1.length(); ++i) --health1[i];
答案 2 :(得分:2)
由于for(;;)
标题允许在第三个位置(通常在i++
处)的任何类型的表达式,因此您可以编写一个空体的for
循环:
for (int i = 0; i != health1.length; health1[i++]--);
尽管这种单行的“酷”外观,但与常规for
循环相比,它的可读性相当差。
答案 3 :(得分:1)
当然你不能。
解释很简单:你在主单线程中运行代码,这意味着你的代码将在一堆指令中进行转换,这些指令将按照它们的运行方式运行,因此你只需要一个解决方案来迭代这个数组并减少每个元素都按元素。
for (int i = 0; i < health1.length; i++) health1[i]--;
答案 4 :(得分:0)
如果您提前知道数组的所有元素都相同,则可以使用Arrays.fill
创建一个长度相同的新数组,并从第一个元素中获取所需的值。
Arrays.fill(health1, health1[0] - 1);
否则,你必须循环。
答案 5 :(得分:0)
Java 8流引入了Class A{
string s = null;
public void method(){
s="Sample String";
}
}
。
@Test
public void start() throws Exception {
HazelcastInstance client = produceHazelcastClient();
Data data = new Data();
ArrayList<Data> datas = new ArrayList<>();
IntStream.range(0, 1000).forEach(i -> {
datas.add(data);
});
wirteFile(datas,"DataLeoBefore","1");
client.getMap("data").put("LEO", datas);
Object redeserialized = client.getMap("data").get("LEO");
wirteFile(redeserialized,"DataLeoAfter","1");
}
public void wirteFile(Object value, String key, String fileName) {
try {
Files.write(Paths.get("./" + fileName + "_" + key), SerializationUtils.serialize(((ArrayList) value)));
} catch (IOException e) {
e.printStackTrace();
}
}
要在同一时间获得更多的 ,您可以在.map()
和int numbers[] = {10, 11, 12, 13, 14, 15, 16, 17, 18, 19};
int[] result = Arrays.stream(numbers).map(x -> --x).toArray();
/* result contains [9, 10, 11, 12, 13, 14, 15, 16, 17, 18]. */
之间添加.parallel()
,但这会降低设置的性能除非列表很大,否则不推荐。
答案 6 :(得分:0)
对于循环原理:初始化,条件,插入
我知道健康的时长1 我> =0。(它将循环直到到达该点) 由于知道长度,因此它将从末尾开始递减。
for(int i = health1.length; i >= 0; i--){
System.out.println(health[i])
}