簡體   English   中英

java中while循環的無限執行

[英]infinite execution of while loop in java

我的問題陳述:在玩 RPG 游戲時,您被指派完成該游戲中最難的任務之一。 在這個任務中你需要打敗 n 個怪物。 每個怪物 i 用兩個整數描述 - power(i) 和 bonus(i)。 要擊敗這個怪物,您至少需要 power(i) 經驗值。 如果你在沒有足夠經驗值的情況下嘗試與這個怪物戰斗,你會立即失敗。 如果你打敗了這個怪物,你還將獲得獎勵 (i) 經驗值。 您可以按任何順序擊敗怪物。

輸入:第一行包含一個整數 n,表示怪物的數量。 下一行包含一個整數 e,表示您的初始體驗。 后續 n 行(其中 0 ≤ i < n)中的每一行 i 包含一個整數 power(i),代表對應怪物的力量。 后續 n 行(其中 0 ≤ i < n)中的每一行 i 包含一個整數,bonus(i),表示擊敗相應怪物的獎勵。

示例案例1:

輸入

2

123

78

130

10

0

輸出:

2

說明:初始經驗等級為 123 點。 擊敗第一個力量為 78 且獎勵為 10 的怪物。經驗等級現在為 123+10=133。 擊敗第二個怪物。

第二種情況

輸入

3

100

101

100

304

100

1

524

輸出:

2

說明:初始經驗等級為 100 點。 擊敗第二個力量為 100 且獎勵為 1 的怪物。經驗等級現在為 100+1=101。 擊敗第一個擁有 101 和 100 獎勵的怪物。經驗等級現在是 101+100=201。 第三個怪物不能被打敗

這是我的代碼

import java.util.*;
public class Main {

    public static int cal(int a[],int e,int n){
        
        HashMap<Integer,Integer> map=new HashMap<Integer,Integer>();

        for(int i=0;i<n;i++){
            if(a[i]<= e && !(map.containsValue(a[i]))){
                map.put(1,a[i]);
                return i;
            }

        }

        return -1;
    }
    public static void main(String[] args) {
        int n,e,flag=0,count=0;

        Scanner sc=new Scanner(System.in);
        System.out.println("Enter the number of monster");
        n=sc.nextInt();
        System.out.println("Enter the experience");
        e=sc.nextInt();
        int a[]=new int[n];
        int b[]=new int[n];
        System.out.println("Enter the monster power");
        for(int i=0;i<n;i++){
            a[i]=sc.nextInt();
        }
        System.out.println("enter the bonus");
        for(int j=0;j<n;j++) {
            b[j] = sc.nextInt();
        }
        while(flag!=-1){
            flag=cal(a,e,n);
            System.out.println(flag);
            if(flag!=-1)
            {

                e=e+b[flag];
                count++;
            }
        }
        System.out.println(count);
    }
}

cal 函數無限調用你能幫幫我嗎!!!

(flag!=-1)條件有問題。
您的 cal 函數有一個始終為真的條件: !(map.containsValue(a[i]) ,因為將鍵 1 分配給每個小於或等於 e 的值會導致您替換與鍵 1. 這是因為在Map一個鍵最多只能與一個值相關聯,而方法V put(K key, V value)只是用新的值替換已經存在的值(並且,事實上,返回被替換的值。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM