战舰项目问题

时间:2013-11-29 00:21:21

标签: java arrays foreach

    public class Basic
{
    public static int numGuess;
    public int guess;
    public int numHits = 0;
    private static int[] ships;
    private boolean hitShip;
    public static boolean shipSunk;
    private int[]board = new int[5];
    public Basic()
    {
        numGuess = 0;
        hitShip = false;
        shipSunk = false;
    }

        public static void setShips (int[] loc)
    {
        ships = loc;
    }

    public int Check(int z)
    {
        for(int cell : ships)
        {
            if(z == cell)
            {
                hitShip = true;
                System.out.println("\nYou hit an enemy ship!");
                numHits++;
                numGuess++;
                if(numHits == ships.length)
                {
                    shipSunk = true;
                    System.out.println("\nYou sunk the enemy ship!");
                    System.out.println("the number of guesses it took you to sink the ship is " + numGuess/3);
                    break;
                }
            }
            else
            {
                System.out.println("You've missed the enemy ship!");
            }
        }
        return z;
    }
}

所以我一直在为学校的战舰项目工作,我为我的游戏制作了这个1-D板。到目前为止,我认为我的代码是正确的,但现在我被卡住了。在我的每一个循环中,因为它用我的船的三个值中的每一个来检查我的猜测,它打印我是否每次在每次击中船时三次。我试图让我的程序只是为了打印我是否每次都打过一次船。

import java.util.Scanner;
import java.util.Random;
public class BasicTester
{
    public static void main(String[] args)
    {
        Basic shipp = new Basic(); //initalizes basic class
        int ship = (int)(Math.random() * 5); // gives ship a random # between 1 - 5
        int ship1;
        int ship2;
        int guess;
        if(ship <= 2)
        {
            ship1 = ship + 1;
            ship2 = ship + 2;
        }
        else
        {
            ship1 = ship - 1;
            ship2 = ship - 2;
        }
        int[] locations = {ship, ship1, ship2};// sets array of locations
        shipp.setShips(locations); // sets locations to ships in other class
        Scanner guesss = new Scanner(System.in);  // Scanner
        do
        {
            System.out.println("\nTell me where the enemy ship is.");
            guess = guesss.nextInt(); // gives guess the int from Scanner
            int resultb = shipp.Check(guess); // puts the int guess through the check method
        }
        while(Basic.shipSunk == false);
    }
}

1 个答案:

答案 0 :(得分:0)

而不是拥有你的

else
        {
            System.out.println("You've missed the enemy ship!");
        }

在循环内部,你应该在循环之前设置一个标志

hitIt = false;

然后,当您检查三个“船只”时,您可以在找到命中时将此标记设置为“true”。最后,检查循环后的标志。如果仍然是假,请打印您的消息。