代码的逻辑没有被执行

时间:2014-10-11 08:51:12

标签: java weblogic

Question :This a program for snake and ladder.the user enters the number of players and players name.

- 程序没有从调用throwdice()方法的位置执行。

package practical1;

import java.util.ArrayList;
import java.util.Scanner;

public class snakeandladder1 {

int totalpos=100;
int v;
int[] scores = new int[100];
int score=0;
int l=0;

public int throwdice() //to calculate the dice value
{
    int i=0;
    {
        while(i==0)
        {
            i=(int)Math.random()*100;
            i=i%13;
        }
        return i;
    }
}

public int ladder(int score) //to check if the user has reached a ladder
{
    if(score==15)
        score=30;
    else if(score == 45)
        score=71;
    else if(score == 25)
        score=62;
    else if(score == 81)
        score=91;
    else if(score == 9)
        score=39;
    scores[l]=score;
    return score;
}

public int snake(int score) //to check if the user has reached a snake
{
    if(score == 29)
        score=11;
    else if(score == 81)
        score=48;
    else if(score == 92)
        score=71;
    else if(score == 30)
        score=6;
    else if(score == 58)
        score=19;
    scores[l]=score;
    return score;
}

void start() 
{
    System.out.println("Enter the number of players:");
    Scanner in=new Scanner(System.in);
    int n=in.nextInt();
    System.out.println("Enter Players names in order:");
    ArrayList<String> name1=new ArrayList<String>(); //an array to store players names
    for (int i=0;i<n;i++)
    {
        Scanner in1=new Scanner(System.in);
        String name2=in1.nextLine();
        name1.add(name2);
    }
    while(true)
    {
        while(l<n) //for each player
        {
            System.out.println("Click y to roll dice");
            Scanner in2=new Scanner(System.in);
            String yes=in2.nextLine();
            if (yes == "y")             //------!!!This part is not getting executed
            {                           // It is taking y but not going further.It does not print               
                v=throwdice();          //anything also
                System.out.println("dice value:"+v);
            }
            score = scores[l]+v;        //the value of dice is added to individual score 
            if(score==totalpos)         //checking if reached 100
            {
                System.out.println("User:"+name1.get(l)+" got "+v+".Winner!!!");
                break;
            }
            else if(score > totalpos) //checking if dice value is more than required to 100
            {
                scores[l]=scores[l];
            }
            int s1;
            s1=ladder(score); //ladder is called, if true valuue is added to score[i] in the function itself
            if(s1==score)
            {
                snake(score); //if not ladder then snake is called
            }
            System.out.println("Current score of "+name1.get(l)+" is:"+scores[l]);  //to display result
            l++;
        }
        if(l==n)
        {
            l=0;
        }
    }
}
public static void main(String[] args) throws Exception{
    // TODO Auto-generated method stub
    snakeandladder1 sal=new snakeandladder1();
    sal.start();
}

}

我得到的输出:

输入玩家数量: 2 按顺序输入玩家姓名: 抹布 KIS 单击y滚动骰子 ÿ 目前的抹布得分为:0 单击y滚动骰子 ÿ 目前kis得分为:0 单击y滚动骰子 ÿ 目前的抹布得分为:0 单击y滚动骰子

请帮助..

5 个答案:

答案 0 :(得分:1)

而不是输入:

if(yes == "y"){
}

尝试输入:

if(yes.equalsIgnoreCase("y"){
}

它会起作用 原因是yes是String类的一个对象,它是一个实习类。它可以在调用String类的方法时用作对象,但与StringBuilder类相比它有一些限制。

答案 1 :(得分:1)

您的代码中存在一些问题...首先,我建议您遵守正确的Java使用,最佳做法,命名约定,异常处理..从您的班级名称开始...这就是了给你..

关于你的问题, 1:

if (yes == "y") {}

应更改为:

if (yes.equalsIgnoreCase("y")) {}

在这种情况下我指的是“ rert588 ”的上述答案。

2: throwdice()方法中存在几个问题。我看到你当前的方法进入一个永无止境的while循环,因为 i 总是'0'。我不清楚你要实现的目标,但我相信它应该如下所示。

应更改为:

public int throwdice() //to calculate the dice value
  {
    int i = (int)(Math.random() * 100); // make note on your Casting.
    i = i % 13;
    return i;
  }

试一试,希望这会对你有帮助。

答案 2 :(得分:0)

通常,在字符串比较中使用==时不会比较相等,但检查它是否是同一个对象。因此在比较字符串时使用.equals。在这里谈到:

Java String.equals versus ==

答案 3 :(得分:0)

您应该使用String类的equals或equalsIgonreCase方法,而不是使用“==”比较String。

但如果有人在“y”或“n”之前或之后意外地给出了一些其他值,那么它仍然可能会引起问题。

因此,您应该比较字符,而不是比较字符串,这可以使用“==”轻松完成。

答案 4 :(得分:0)

if (yes == "y")  // Please note that this will never be true

改为使用"y".equals(yes)

对于String==测试引用相等性,这意味着两个变量应该指向相同的内存位置。在你的情况下,变量yes和常数&#34; y&#34;并不在同一个记忆中。

.equals()测试值相等,已被String覆盖。请注意,对于课程的大部分内容,.equals()==相同,除非是覆盖