我对Java的扫描仪有疑问。我正在编写井字游戏程序,每次玩家移动时都会调用此函数。
public void mossa(){
int riga, colonna;
int errore;
Scanner input = new Scanner(System.in);
if(player=='O')
System.out.println("GIOCATORE O\n");
else
System.out.println("GIOCATORE X\n");
do{
errore = 0;
System.out.println("Riga: ");
riga = input.nextInt();
System.out.println("Colonna: ");
colonna = input.nextInt();
if(board[riga][colonna]!=' '){
errore=1;
System.out.println("Hai scelto una casella gia occupata!\n");
}
if(riga>3 || colonna>3 || riga<0 ||colonna<0){
errore=1;
System.out.println("Hai scelto una casella che non esiste!\n");
}
}while(errore==1);
//----->input.close();<------
if(player == 'X')
board[riga][colonna] = 'X';
else
board[riga][colonna] = 'O';
togglePlayer();
}
Run Code Online (Sandbox Code Playgroud)
起初,我认为最好是在捕获到玩家的动作后关闭扫描仪,然后在再次调用该函数时再次打开它(请参见input.close()注释)。问题是,如果我关闭扫描仪,则会遇到运行时错误,指出扫描仪为空,而将nextInt()放入由hasNextInt()驱动的if中则无济于事。那么,不关闭输入扫描器是否是错误的(我只有资源泄漏的警告)?
先感谢您。
我需要取结果的绝对值,我只对最重要的位感兴趣.这就是我所做的:
data_ram_h <= std_logic_vector(abs(signed(resize(r4(calc_cnt - 2), data_ram_h'length) + r4(calc_cnt - 1) +
r4(calc_cnt) + r4(calc_cnt + 1) + r4(calc_cnt + 2) -
r2(calc_cnt - 2) - r2(calc_cnt - 1) - r2(calc_cnt) -
r2(calc_cnt + 1) - r2(calc_cnt + 2))))(11 downto 4);
Run Code Online (Sandbox Code Playgroud)
我尝试检查语法,我收到此错误:
type conversion std_logic_vector is not allowed as a prefix for an slice name.
Run Code Online (Sandbox Code Playgroud)
data_ram_h是正确维度的std_logic_vector,而abs函数返回一个signed,在转换为std_logic_vector时应该没有问题.我使用的库是使用ieee.numeric_std.all.
我哪里错了?在此先感谢c: