我是java的新手,我被分配了一个项目。我需要做一个相当复杂的(换新手)战舰游戏。
在这里,我尝试从类Tile调用类Player中的switch case。由于我已经读过一个人无法直接访问switch case,我已经使用了caseSea(),caseShip()e.t.c。
当试图在课堂上给他们打电话时,我会得到一个“无效”的声音。类型不允许这里错误,我明白但不知道如何解决! 任何帮助将不胜感激!
这是创建的类Tile,用于表示将成为战场板的2D阵列的一个块:
public class Tile
{
private int x,y;
static boolean hidden;
public Action tile_action;
public enum Action
{
Sea,
Ship,
Hit,
Miss
}
Action action;
public Tile(Action action)
{
this.action=action;
this.x = x;
this.y = y;
this.tile_action = action;
}
public static void caseSea()
{
System.out.println("~");
}
public static void caseShip()
{
if(hidden == true)
System.out.println("~");
else
System.out.println("s");
}
public static void caseHit()
{
System.out.println("X");
}
public static void caseMiss()
{
System.out.println("O");
}
public static void draw(Action action)
{
switch(action)
{
case Sea:
caseSea();
break;
case Ship:
caseShip();
break;
case Hit:
caseHit();
break;
case Miss:
caseMiss();
break;
}
}
}
此处还有类Player,它包含对switch case的调用:
import java.util.Scanner;
public class Player
{
String username; //Variable declaration
static int shotcount;
static int misscount;
static int hitcount;
static int repeatshot;
private int HitPosition[][] = new int[10][10];
public Player(String username)
{
this.username = username;
}
private void placeAllShips()
{
//super.placeAllShips();
}
public void fire(int pos[],int board,boolean hit)
{
if(hit == true)
{
HitPosition[pos[0]][pos[1]] = Tile.draw(Tile.caseHit());
shotcount++;
hitcount++;
}
else
{
HitPosition[pos[0]][pos[1]] = Tile.draw(Tile.caseMiss());
shotcount++;
misscount++;
}
}
}
我在Tile.draw(Tile.caseHit())
和Tile.draw(Tile.caseMiss())
答案 0 :(得分:0)
caseHit()
将caseHit()
的值传递给draw()
使用draw()
枚举值在Hit
方法内输入一个开关,最终再次调用caseHit()
。
这不是你想要做的。你想做的只是用正确的参数调用draw()
方法,在这种情况下,这是Action
枚举值之一。
因此,最终有一种非常简单的方法可以在没有太多变化的情况下修复代码,这种情况正在发生变化
Tile.draw(Tile.caseHit());
至
Tile.draw(Tile.Action.Hit);
(并且类推这种方法的其他调用)
答案 1 :(得分:-1)
使用Tile.draw(Tile.caseHit())
,您尝试调用caseHit()
方法并将该方法的返回值作为参数发送到draw()
方法。问题是caseHit()
方法没有返回任何内容,因为它有void
返回类型。
您可以通过使caseHit()方法返回Action:
来解决此问题public static Action caseHit() {
return Action.Hit;
}