我爱侬
本帖最后由 Angel残魂Sky 于 2019-8-31 11:31 编辑

如果直接写一个int i = 0;i++;那么这个变量将会是公用的,每一个玩家调用这个方法都会直接改变i的值。
请各位大佬帮忙写一个关于变量的实例学习一下,谢谢
昨天请教别人给我说用Map方法,不知道这样写d会不会也是公共的,或者有没有更好的方法



纱夜
public class Main {
    private static int i = 0;

    private static void method() {
        ++i;
    }
}

我爱侬
阴阳师元素祭祀 发表于 2019-8-31 11:24
public class Main {
    private static int i = 0;

如果两个号一起执行这个方法还是用的同一个i

纱夜
Angel残魂Sky 发表于 2019-8-31 11:28
如果两个号一起执行这个方法还是用的同一个i

对。

我爱侬

这个就是问题了,我是想所有人都有不同的变量

纱夜
Angel残魂Sky 发表于 2019-8-31 11:32
这个就是问题了,我是想所有人都有不同的变量

你截图给的方法(我才看到)
不是公用的
是每个玩家独立的之前以为你要写每个变量公用

我爱侬
阴阳师元素祭祀 发表于 2019-8-31 11:34
你截图给的方法(我才看到)
不是公用的
是每个玩家独立的之前以为你要写每个变量公用

是,我是想找更好的方法,不过你给我的那个方法是每个玩家公共的,我截图的是我自己写的,但是我怕出问题就来帖子问问有没有更好的方法或者我写的这个有没有问题

弱鸡绿毛怪
对啊就是用map的

纱夜
Angel残魂Sky 发表于 2019-8-31 11:36
是,我是想找更好的方法,不过你给我的那个方法是每个玩家公共的,我截图的是我自己写的,但是我怕出问题 ...

这已经是很好的方法了
HashMap<UUID, Integer> map
就是来对应每个玩家的int数值
已经可以了

但是我不建议int d = xxx
因为会解包后重新在包一下
虽然Integer也会返回新对象(
你可以试试
HashMap<UUID, int[]>
然后直接int[] d;
++d[0];

我爱侬
阴阳师元素祭祀 发表于 2019-8-31 11:40
这已经是很好的方法了
HashMap map
就是来对应每个玩家的int数值

不过put的时候应该怎么写呢
还有应该在玩家上线的时候写入吗

纱夜
Angel残魂Sky 发表于 2019-8-31 12:01
不过put的时候应该怎么写呢
还有应该在玩家上线的时候写入吗

put的时候就直接put回去啊
不必要在玩家进服时put
你可以getOrDefault来获得0值

我爱侬
阴阳师元素祭祀 发表于 2019-8-31 12:02
put的时候就直接put回去啊
不必要在玩家进服时put
你可以getOrDefault来获得0值 ...

不过你在用int[]的时候是怎么put进去的呢?

纱夜
Angel残魂Sky 发表于 2019-8-31 12:38
不过你在用int[]的时候是怎么put进去的呢?

还不是直接put
int[] d = ....;
map.put(uuid, d);
前提是
HashMap<UUID, int[]> map = ...;

我爱侬
阴阳师元素祭祀 发表于 2019-8-31 12:38
还不是直接put
int[] d = ....;
map.put(uuid, d);

这样int[] d不还是公共的数组吗

纱夜
Angel残魂Sky 发表于 2019-8-31 12:42
这样int[] d不还是公共的数组吗

你放在map里面
每个玩家一个int[]

我爱侬
阴阳师元素祭祀 发表于 2019-8-31 12:38
还不是直接put
int[] d = ....;
map.put(uuid, d);

玩家在get出来的时候还是那个公共的int[] d

纱夜
Angel残魂Sky 发表于 2019-8-31 12:44
玩家在get出来的时候还是那个公共的int[] d

不是啊
你都放map里面了
你具体代码?

我爱侬
阴阳师元素祭祀 发表于 2019-8-31 12:44
不是啊
你都放map里面了
你具体代码?

等一会我试试吧 歇歇了