0

さて、私はあなたが実際に支払うよりも多くを手に入れるためにグリッチを起こすことができるというこの問題を抱えています。説明するのは難しいですが、量を増やすと、まず最初に私のコードがあります:

    public void setAmount(Player player, int button) {
        int amount = (Integer) player.getTemporaryAttribute("geAmount");
        int id = (Integer) player.getTemporaryAttribute("geItem");
        int price = (Integer) player.getTemporaryAttribute("price");
        long totalPrice = price * amount;
        switch(button) {
        case 157:
            if(player.getRights() > 1){
                player.sm(""+totalPrice+"");
            }
            if(amount > 1) {
                amount--;
            } else {
                amount = 1;
            }
            break;
        case 159:
            if(player.getRights() > 1){
                player.sm(""+totalPrice+"");
            }
            if(amount < Integer.MAX_VALUE && totalPrice <= Integer.MAX_VALUE && totalPrice >= 0) {
                amount++;
            }
            break;
        case 162:
            if(player.getRights() > 1){
                player.sm(""+totalPrice+"");
            }
            if(player.getTemporaryAttribute("buying") == Boolean.TRUE && totalPrice <= Integer.MAX_VALUE && totalPrice >= 0) {
                amount += 1;
            } else {
                amount = 1;
            }
            break;
        case 164:
            if(player.getRights() > 1){
                player.sm(""+totalPrice+"");
            }
            if(player.getTemporaryAttribute("buying") == Boolean.TRUE && totalPrice <= Integer.MAX_VALUE && totalPrice >= 0) {
                amount += 10;
            } else {
                amount = 10;
            }
            break;
        case 166:
            if(player.getRights() > 1){
                player.sm(""+totalPrice+"");
            }
            if(player.getTemporaryAttribute("buying") == Boolean.TRUE && totalPrice <= Integer.MAX_VALUE && totalPrice >= 0) {
                amount += 100;
            } else {
                amount = 100;
            }
            break;
        case 168:
            if(player.getRights() > 1){
                player.sm(""+totalPrice+"");
            }
            if(player.getTemporaryAttribute("buying") == Boolean.TRUE && totalPrice <= Integer.MAX_VALUE && totalPrice >= 0) {
                amount += 1000;
            } else {
                amount = player.getInventory().getContainer().getNumberOff(id);
            }
            break;
        case 171:
        case 173:
            if(player.getRights() > 1){
                player.sm(""+totalPrice+"");
            }
            player.getActionSender().sendConfig(1111, (Integer) player.getTemporaryAttribute("price"));
            break;
        }
        if(amount == 0){
            amount = 1;
        }
        if(amount >= Integer.MAX_VALUE || amount < 0) {
            amount = Integer.MAX_VALUE;
        }
        player.setTemporaryAttribute("geAmount", amount);
        player.getActionSender().sendConfig(1109, id);  
        player.getActionSender().sendConfig(1110, amount);
    }

合計金額が溢れ続けているのですが、どうやって止めたらいいのかわかりません。誰かがこのようなものを使用することを提案しました:

int last = 0;
int current = 0;
while(last < current) //loop terminates on overflow
  last = current++;

しかし、このコードでそれをどのように使用するかはわかりません。誰か助けてくれませんか?

4

3 に答える 3

2

BigIntegerクラスを使用する

http://docs.oracle.com/javase/1.5.0/docs/api/java/math/BigInteger.html

于 2012-08-09T01:25:23.990 に答える
0
long totalPrice = price * amount;

キャストpriceまたはそうamountするlongために、計算は長い間実行されます:

long totalPrice = (long)price * amount;
于 2012-08-09T01:32:48.930 に答える
0

合計をゼロに初期化します...同様のプログラム。http://codejava.co.uk/download_code.htmlにアクセスします

于 2012-08-09T01:33:54.250 に答える