我正在学习一些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
答案 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 );
}
}