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