嗨,我是新手Java,我想知道在控制台中读取用户输入的最佳选择是什么,据我所知,有3种方法可以做到:
Console console = System.console();BufferedReader input = new BufferedReader(new InputStreamReader(System.in));Scanner reader = new Scanner(System.in);我应该选择哪一个?为什么那个而不是其他的?
我需要使用java.awt.Graphics绘制一条线,但只应渲染位于矩形外部的线条部分.
是否可以使用图形剪辑支持或者我是否需要自己计算交叉点并剪切线?
我正在创建一个程序,它同时使用 JMenuBar 和 JPopupMenu 和 Windows LaF(外观)。
这是简化的 LaF 代码:
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
UIManager.put("MenuItem.selectionBackground", Color.BLUE);
UIManager.put("MenuItem.selectionForeground", Color.WHITE);
UIManager.put("MenuItem.background", Color.BLACK);
UIManager.put("MenuItem.foreground", Color.WHITE);
Run Code Online (Sandbox Code Playgroud)
鼠标监听器代码:
@Override
public void mouseExited(MouseEvent e) {
if (e.getSource() instanceof JMenuItem) {
JMenuItem i = (JMenuItem) e.getSource();
i.setBackground(UIManager.getColor("MenuItem.background"));
}
}
@Override
public void mouseEntered(MouseEvent e) {
if (e.getSource() instanceof JMenuItem) {
JMenuItem i = (JMenuItem) e.getSource();
i.setBackground(UIManager.getColor("MenuItem.selectionBackground"));
}
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试删除似乎是将所选 JMenuItem 染成白色的 Windows LaF 工件。当我禁用组件时,它们不再收到所说的色调。
我似乎无法在网上找到任何提及此效果的内容,并且当 JMenus 的弹出窗口处于活动状态时,它似乎也仅在 JMenus 上略微显示(尽管可能是较深的颜色)。
编辑:我相信它在 java.beans.PropertyChangeEvent 中称为“HOT”:
例如: [oldValue=NORMAL; / newValue=HOT;]
例子:
第一张和第二张图片:显示 …
我正在尝试为我的井字游戏展示一个阵列板.
董事会应该是这样的:
123
456
789
但是,当我运行该程序时,它显示如下:
150
159
168
我的代码:
class TicTacToe
{
public static void main(String[] args)
{
char [][] board = {{'1','2','3'}, {'4','5','6'}, {'7', '8', '9'}};
System.out.println(board[0][0] + board[0][1] + board[0][2]);
System.out.println(board[1][0] + board[1][1] + board[1][2]);
System.out.println(board[2][0] + board[2][1] + board[2][2]);
}
}
Run Code Online (Sandbox Code Playgroud) 所以我试图创建一个方法,你发送一个简单的字符串,然后在for循环中由char分解char,数组"alpha"中的每个char转换为"beta"中的等效值,它们是然后所有连接使用StringBuilder并作为"输出"发回,如下所示:
代码: 我简化了整个类和所有变量名称以提高可读性.
import java.util.Arrays;
public class Test {
private final char[] alpha = { 'A', 'B', 'C', 'D', 'E',
'F', 'G', 'H', 'I', 'J',
'K', 'L', 'M', 'N', 'O',
'P', 'Q', 'R', 'S', 'T',
'U', 'V', 'W', 'X', 'Y', 'Z'};
public String getAlpha(String input) {
StringBuilder output = new StringBuilder();
for (int i = 0; i < input.length(); i++) {
char c = input.charAt(i);
int index;
if (Character.isLetter(c)) {
try {
index = Arrays.asList(alpha).indexOf(Character.toUpperCase(c));
System.out.println(c); //debug
System.out.println(index); //debug
//output.append(beta[index]); …Run Code Online (Sandbox Code Playgroud) 所以我决定创建一个简单的卡片组洗牌程序,没有什么可以只用一个单独的数组,52"卡"编号从0到52.我不一定确定它是否是最好的方法.
我创建了一个随机整数方法(randInt)来获取随机数和一个随机方法(shuffle),它获取两个随机卡并交换它们的值.
我的方法很简单但是当我运行代码(以及我添加的一些调试代码)时,我似乎得到每个值变成完全相同的值(d [2] = d [1] = randCard1),这导致相同的倍数卡和显然其他价值观完全消失.如果给予足够的洗牌,整个牌组可能会变成52张牌,所有牌都由相同的值组成.
我已经阅读了一些关于交换整数数组的问题,但我的问题是不同的,因为它是关于使用for循环的问题,(因为我的交换数组值的方法已经类似于那些问题,但是final/static关键字没有帮助当我修改几次时,我得出结论,循环是责备)这显然会阻止阵列正确更新.
如果是这样的话,我怎么过来这个,如果不是我错过了什么?我交换整数数组值的方式还有其他问题吗?
这是我的代码:
import java.util.Random;
public class Cards {
public static void main(String[] args) {
int[] deck = new int[] {
0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
40, 41, 42, 43, 44, 45, 46, 47, 48, 49, …Run Code Online (Sandbox Code Playgroud) 我目前正在尝试从整数(大于1位)中提取单个数字(int),但我无法在这个问题上找到任何帮助.
例如:
- 从123456得到3分
要么
- 从1257848得到4分
我怎么用Java做这个?