[英]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.