繁体   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