Java扩展
# 基础
# Java Docs
# Java 文档注释
Java 支持三种注释方式。前两种分别是 // 和 /* /,第三种被称作说明注释,它以 /* 开始,以 */结束。
说明注释允许你在程序中嵌入关于程序的信息。你可以使用 javadoc 工具软件来生成信息,并输出到HTML文件中。
说明注释,使你更加方便的记录你的程序信息。
javadoc 标签
标签 | 描述 | 示例 |
---|---|---|
@author | 标识一个类的作者 | @author description |
@deprecated | 指名一个过期的类或成员 | @deprecated description |
{@docRoot} | 指明当前文档根目录的路径 | Directory Path |
@exception | 标志一个类抛出的异常 | @exception exception-name explanation |
{@inheritDoc} | 从直接父类继承的注释 | Inherits a comment from the immediate surperclass. |
{@link} | 插入一个到另一个主题的链接 | {@link name text} |
{@linkplain} | 插入一个到另一个主题的链接,但是该链接显示纯文本字体 | Inserts an in-line link to another topic. |
@param | 说明一个方法的参数 | @param parameter-name explanation |
@return | 说明返回值类型 | @return explanation |
@see | 指定一个到另一个主题的链接 | @see anchor |
@serial | 说明一个序列化属性 | @serial description |
@serialData | 说明通过writeObject( ) 和 writeExternal( )方法写的数据 | @serialData description |
@serialField | 说明一个ObjectStreamField组件 | @serialField name type description |
@since | 标记当引入一个特定的变化时 | @since release |
@throws | 和 @exception标签一样. | The @throws tag has the same meaning as the @exception tag. |
{@value} | 显示常量的值,该常量必须是static属性。 | Displays the value of a constant, which must be a static field. |
@version | 指定类的版本 | @version info |
# idea生成项目帮助文档
可以帮助理解源码
- 打开项目 ->
- Tools ->
- Generate JavaDoc ->
- 在Output directory选择文档输出目录 ->
- 设置Locale:zh_CN ->
- 设置Other command line arguments:-encoding UTF-8 -charset UTF-8 ->
- OK
# idea Debugger使用
# 数据类型知识点
# Java中valueOf与parseInt方法比较
- 从返回类型可以看出parseInt返回的是基本类型int,而valueOf返回的是对象Integer(new Integer(Integer.parseInt(s)))。原文地址 (opens new window)
# HashMap
# 小游戏2048
点击查看
以下为代码
import javax.swing.*;
import java.awt.*;
public class Block extends JLabel
{
private int value;
public Block()
{
value = 0;//初始化值为0
setFont(new Font("font", Font.PLAIN, 40));//设定字体
setBackground(Color.gray);//设定初始颜色为灰色
}
public int getValue()//获取值
{
return value;
}
public void setValue(int value)
{
this.value = value;
String text = String.valueOf(value);
if (value != 0)
setText(text);
else
setText("");//如果值为0则不显示
setColor();
}
public void setColor() //根据值的不同设定不同的背景颜色、label字体
{
switch (value)
{
case 0:
setBackground(Color.gray);
break;
case 2:
setBackground(new Color(238, 228, 218));
break;
case 4:
setBackground(new Color(238, 224, 198));
break;
case 8:
setBackground(new Color(243, 177, 116));
break;
case 16:
setBackground(new Color(243, 177, 116));
break;
case 32:
setBackground(new Color(248, 149, 90));
break;
case 64:
setBackground(new Color(249, 94, 50));
break;
case 128:
setBackground(new Color(239, 207, 108));
break;
case 256:
setBackground(new Color(239, 207, 99));
break;
case 512:
setBackground(new Color(239, 203, 82));
break;
case 1024:
setBackground(new Color(239, 199, 57));
break;
case 2048:
setBackground(new Color(239, 195, 41));
break;
case 4096:
setBackground(new Color(255, 60, 57));
break;
}
}
}
import java.awt.*;
import javax.swing.*;
public class My2048 extends JFrame
{
public My2048()//构造函数
{
setTitle("2048");//设置标题
setSize(400, 400);//设定窗口大小
setLocation(500, 200);//设定窗口起始位置
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
getContentPane().setLayout(new GridLayout(4, 4, 5, 5));//设定布局方式为GridLayout型
new Operation(this);
this.setVisible(true);//设为可视
}
public static void main(String args]) //程序入口点
{
try
{
UIManager.setLookAndFeel("org.jvnet.substance.skin.SubstanceRavenGraphiteLookAndFeel");//设定UI
} //接受抛出的异常
catch (ClassNotFoundException | InstantiationException| IllegalAccessException | UnsupportedLookAndFeelException e)
{
e.printStackTrace();
}
JFrame.setDefaultLookAndFeelDecorated(true);//设定Frame的缺省外观
new My2048();
}
}
import java.awt.event.*;
import javax.swing.*;
public class Operation implements KeyListener
{
Block] block;//用于储存16个数据
JPanel panel;
public boolean up,down,left,right;
int moveFlag;//用于累计移动的次数
boolean numFlag;//用于判断是否还能加入新的数字
public Operation(JFrame frame)
{
this.panel = (JPanel)frame.getContentPane();//构造出panel
block = new Block16];//构造出长度为16的数组
numFlag = true;//初始化
moveFlag = 0;
up=true;down=true;left=true;right=true;
addBlock();
for (int i = 0; i < 2; i++)
appearBlock();
frame.addKeyListener(this);
}
private void addBlock()
{
for (int i = 0; i < 16; i++) //往panel里加入block
{
blocki] = new Block();
blocki].setHorizontalAlignment(JLabel.CENTER);// 不透明的标签
blocki].setOpaque(true);
panel.add(blocki]);
}
}
public void appearBlock()
{
while (numFlag) //当还能加入随机的一个新的值得时候
{
int index = (int) (Math.random() * 16);//取一个0到15的随机整数,这个数作为随机加入盘中的2或4的位置
if (blockindex].getValue() == 0)//如果这个数所在的block数组中值为0,即在为空的时候,加入一个2或4的数字
{
if (Math.random() < 0.5)
{
blockindex].setValue(2);
}
else
{
blockindex].setValue(4);
}
break;//跳出while
}
}
}
public void judgeAppear() //统计block数组中是否含有值为0的元素,若没有,则numFlag变为false
{
int sum = 0;
for (int i = 0; i < 16; i++)
{
if (blocki].getValue() != 0)
{
sum++;
}
}
if (sum == 16)
numFlag = false;
}
public int Find(int i,int j,int a,int b)
{
while(i<b&&i>=a)
{
if(blocki].getValue()!=0)
{
return i;
}
i=i+j;
}
return -1;
}
public void upBlock()
{
int i=0,j=0;int t=0;int valueJ=0;int valueI=0;int index=0;
for(i=0;i<4;i++)
{
index=i;
for(j=i+4;j<16;j+=4)
{
valueJ=0; valueI=0;
if(blockindex].getValue()==0)
{
t=Find(index,4,0,16);
if(t!=-1)
{
blockindex].setValue(blockt].getValue());
blockt].setValue(0);
}
else
{
break;
}
}
valueI=blockindex].getValue();
if(blockj].getValue()==0)
{
t=Find(j,4,0,16);
if(t!=-1)
{
blockj].setValue(blockt].getValue());
blockt].setValue(0);
}
else
{
break;
}
}
valueJ=blockj].getValue();
if(valueI==valueJ&&valueI!=0&&valueJ!=0)
{
blockindex].setValue(valueI+valueJ);
blockj].setValue(0);
numFlag = true;
}
index=j;
}
}
}
public void downBlock() {
int i=0,j=0;int t=0;int valueJ=0;int valueI=0;int index=0;
for(i=12;i<16;i++)
{
index=i;
for(j=i-4;j>=0;j-=4)
{
valueJ=0; valueI=0;
if(blockindex].getValue()==0)
{
t=Find(index,-4,0,16);
if(t!=-1)
{
blockindex].setValue(blockt].getValue());
blockt].setValue(0);
}
else
{
break;
}
}
valueI=blockindex].getValue();
if(blockj].getValue()==0)
{
t=Find(j,-4,0,16);
if(t!=-1)
{
blockj].setValue(blockt].getValue());
blockt].setValue(0);
}
else
{
break;
}
}
valueJ=blockj].getValue();
if(valueI==valueJ&&valueI!=0&&valueJ!=0)
{
blockindex].setValue(valueI+valueJ);
blockj].setValue(0);
numFlag = true;
}
index=j;
}
}
}
public void rightBlock()
{
int i=0,j=0;int t=0;int valueJ=0;int valueI=0;int index=0;
for(i=3;i<16;i+=4)
{
index=i;
for(j=i-1;j>i-4;j--)
{
valueJ=0; valueI=0;
if(blockindex].getValue()==0)
{
t=Find(index,-1,i-3,index+1);
if(t!=-1)
{
blockindex].setValue(blockt].getValue());
blockt].setValue(0);
}
else
{
break;
}
}
valueI=blockindex].getValue();
if(blockj].getValue()==0)
{
t=Find(j,-1,i-3,j+1);
if(t!=-1)
{
blockj].setValue(blockt].getValue());
blockt].setValue(0);
}
else
{
break;
}
}
valueJ=blockj].getValue();
if(valueI==valueJ&&valueI!=0&&valueJ!=0)
{
blockindex].setValue(valueI+valueJ);
blockj].setValue(0);
numFlag = true;
}
index=j;
}
}
}
public void leftBlock()
{
int i=0,j=0;int t=0;int valueJ=0;int valueI=0;int index=0;
for(i=0;i<16;i+=4)
{
index=i;
for(j=i+1;j<i+4;j++)
{
valueJ=0; valueI=0;
if(blockindex].getValue()==0)
{
t=Find(index,1,index,i+4);
if(t!=-1)
{
blockindex].setValue(blockt].getValue());
blockt].setValue(0);
}
else
{
break;
}
}
valueI=blockindex].getValue();
if(blockj].getValue()==0)
{
t=Find(j,1,j,i+4);
if(t!=-1)
{
blockj].setValue(blockt].getValue());
blockt].setValue(0);
}
else
{
break;
}
}
valueJ=blockj].getValue();
if(valueI==valueJ&&valueI!=0&&valueJ!=0)
{
blockindex].setValue(valueI+valueJ);
blockj].setValue(0);
numFlag = true;
}
index=j;
}
}
}
public void over()
{
if (numFlag ==false&& up==false&&down==false&&left==false&&right==false) //当不能添加元素,并且不可移动的步数超过36就输了,输了的时候在盘中央显示GAMEOVER
{
block4].setText("G");
block5].setText("A");
block6].setText("M");
block7].setText("E");
block8].setText("O");
block9].setText("V");
block10].setText("E");
block11].setText("R");
block11].addMouseListener(new MouseAdapter() {public void mousePressed(MouseEvent e){reStart();}});
}
}
public void win() //同OVER
{
block0].setText("Y");
block1].setText("O");
block2].setText("U");
block13].setText("W");
block14].setText("I");
block15].setText("N");
block15].addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
reStart();
}
});
}
public void reStart()//重启游戏,和构造函数类似,不在累述
{
numFlag=true;
moveFlag=0;
up=true;down=true;left=true;right=true;
for(int i=0;i<16;i++)
blocki].setValue(0);
for (int i = 0; i < 2; i++)
appearBlock();
}
public void keyPressed(KeyEvent e) //判断按的上下左右键,并依次调用移动函数、判断函数、添加函数、判断是否输掉的函数
{
switch (e.getKeyCode()) {
case KeyEvent.VK_UP:
if(up){
upBlock();}
judgeAppear();
appearBlock();
over();
if(numFlag==false)
{
up=false;
}
else
{
up=true;down=true;left=true;right=true;
}
break;
case KeyEvent.VK_DOWN:
if(down){
downBlock();}
judgeAppear();
appearBlock();
over();
if(numFlag==false)
{
down=false;
}
else
{
up=true;down=true;left=true;right=true;
}
break;
case KeyEvent.VK_LEFT:
if(left){
leftBlock();}
judgeAppear();
appearBlock();
over();
if(numFlag==false)
{
left=false;
}
else
{
up=true;down=true;left=true;right=true;
}
break;
case KeyEvent.VK_RIGHT:
if(right){
rightBlock();}
judgeAppear();
appearBlock();
over();
if(numFlag==false)
{
right=false;
}
else
{
up=true;down=true;left=true;right=true;
}
break;
}
}
public void keyTyped(KeyEvent e) {
}
public void keyReleased(KeyEvent e) {
}
}
编辑 (opens new window)
上次更新: 2022/07/03, 15:32:16