Java级别计算器if语句返回错误的值(新手)

时间:2014-06-19 09:53:12

标签: java if-statement

我正在学习一些Java,并决定做一些简单的事情,但它仍然会返回错误的值...我不知道为什么我确定有一些未经训练的眼睛没有接受的东西

如果您有我的代码替代我的问题首先回答我的问题,然后推荐替代方案,我真的很讨厌那些忘记了我们所有人开始的无知傲慢的人......

import java.util.Scanner;
import java.lang.*;

public class HelloWorld{
public static void main(String args[]){
    int userlevel = 0;
    int userxp=12;
    int level1xp=0, level2xp=1, level3xp=10, level4xp=15, level5xp=25;
    int level1=1, level2=2, level3=3, level4=4, level5=5;

    if (userxp <=level1xp){
        userlevel=1;
    }else if (userxp >=level1xp || userxp <level3xp){
        userlevel=level2;
        System.out.println(userlevel);
    }else if (userxp >= level3xp || userxp <level4xp){
        userlevel=level3;
        System.out.println(userlevel);
    }else if (userxp >=level3xp || userxp <level5xp){
        userlevel=level4;
    }else if (userxp == level5xp){
        userlevel=level5;
    }else{
        System.out.println("You are a cheat");
    }

}

控制台返回

2

6 个答案:

答案 0 :(得分:4)

 if (userxp >=level1xp || userxp <level3xp){

应该是&&而不是||

我的最小建议是彻底放弃第一个条件。

由于您在else分支中,因此您已经检查过XP不低于之前的级别要求。

 if (userxp <level2xp){
        userlevel=1;
    }else if ( userxp <level3xp){
        userlevel=level2;
        System.out.println(userlevel);
    }else if ( userxp <level4xp){
        userlevel=level3;
        System.out.println(userlevel);
    }else if (userxp <level5xp){
        userlevel=level4;
    }else if (userxp == level5xp){
        userlevel=level5;
    }else{
        System.out.println("You are a cheat");
    }

答案 1 :(得分:2)

我认为你只需要改变你的|| (或)和&amp;&amp; (和)。否则,如果你的xp是12大于level1xp(0),你的程序会立即将你的级别设置为2级,因为这个if语句:

else if (userxp >= level1xp || userxp < level3xp)

xp等级12将通过这些要求,因为12大于0.更改||或者&amp;&amp;我想会解决这个问题。如果您之后有任何其他问题,请告诉我。

答案 2 :(得分:2)

您应该在条件中使用&&(AND)代替||(OR)。

在所有其他if语句中使用else if (userxp >=level1xp && userxp <level3xp)

在你的代码中,执行在第一个else语句之后停止,这是真的。

        if (userxp <=level1xp){
            userlevel=1;
        }else if (userxp <level3xp){
            userlevel=level2;
            System.out.println(userlevel);
        }else if (userxp <level4xp){
            userlevel=level3;
            System.out.println(userlevel);
        }else if (userxp <level5xp){
            userlevel=level4;
        }else if (userxp == level5xp){
            userlevel=level5;
        }else{
            System.out.println("You are a cheat");
        }

编辑:正如owther答案所指出的那样,你不需要第一个条件用于水平的下限,因为它已经被前一个其他语句所满足。

答案 3 :(得分:0)

输出为2是因为它检查了第一个if语句,结果证明是假的。然后它移动到if else,因为userxp实际上是>=level1xp所以userlevel设置为2并打印。因此,只要我能理解代码目标,请将||(OR)替换为&&(AND)

答案 4 :(得分:0)

您使用&&代替||的情况是错误的。因为在条件的第一部分为真的条件下,条件变为真。

import java.util.Scanner;
import java.lang.*;

public class HelloWorld{

    public static void main(String args[]){
        int userlevel = 0;
        int userxp=12;
        int level1xp=0, level2xp=1, level3xp=10, level4xp=15, level5xp=25;
        int level1=1, level2=2, level3=3, level4=4, level5=5;

        if (userxp <=level1xp){
            userlevel=1;
        }else if (userxp >=level1xp && userxp <level3xp){
            userlevel=level2;
            System.out.println(userlevel);
        }else if (userxp >= level3xp &&  userxp <level4xp){
            userlevel=level3;
            System.out.println(userlevel);
        }else if (userxp >=level3xp &&  userxp <level5xp){
            userlevel=level4;
        }else if (userxp == level5xp){
            userlevel=level5;
        }else{
            System.out.println("You are a cheat");
        }
    }
}

答案 5 :(得分:0)

如果我是你,如果你的数量有限,我会选择枚举 我会做那样的事情

public class HelloWorld {
    private static enum Level {
        LEVEL_1(0), LEVEL_2(1), LEVEL_3(10), LEVEL_4(15), LEVEL_5(25);
        int expRequired;

        Level(int expRequired) {
            this.expRequired = expRequired;
        }

        static Level getLevel(int exp) {
            Level level = LEVEL_1;
            for (Level l : Level.values()) {
                if (l.expRequired > exp) {
                    break;
                }
                level = l;
            }
            return level;
        }
    }

    static class User{
        Level level = Level.LEVEL_1;
        int exp = 12;
    }

    public static void main(String args[]) {
        User user = new User();
        int level1xp = 0, level2xp = 1, level3xp = 10, level4xp = 15, level5xp = 25;
        int level1 = 1, level2 = 2, level3 = 3, level4 = 4, level5 = 5;
        user.level = Level.getLevel(user.exp);
        System.out.println(user.level );

    }
}