源码?还是编译好的 class 文件,如果是 class 文件的话,在 tomcat 下放在 webapps 下即可
② 跪求停车场管理系统源代码,注意是javaweb
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
/*********************************
* 停车场管理
* author zhang
*2013-12-13
********************************/
public class CarStopManager {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请入车牌号:");
String carno = sc.next();
CarStopManager carStopManager = new CarStopManager();
carStopManager.setCarNo(carno);//设置车牌号
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String sdate = format.format(new Date());
System.out.println("当前时间(入场时间)是: "+sdate);
System.out.println("需要开出车场吗?yes/no:");
String yesno = sc.next();
if(yesno.equals("yes")){
String edate = format.format(new Date());
System.out.println("出场时间是: "+edate);
//计算方法
carManager(2, sdate, edate,carStopManager);
}
}
/**
* 计算方法
*/
public static void carManager(int type,String starTime,
String endTime,CarStopManager carStopManager){
if(type==1){//按月收费
System.out.println("如若没有缴纳月费请缴纳800元,如若缴纳将不再提示!");
}else{
/**
* 一般不会有停车几个月的吧?先不考虑停车几年或者几个月的
*/
String sDay = starTime.substring(8,10);//入场日期(天)
String sHour = starTime.substring(11, 13);//入场小时
String sMM = starTime.substring(14,16);//入场分钟
String eDay = starTime.substring(8,10);//出场日期(天)
String eHour = endTime.substring(11, 13);//出厂小时
String eMM = endTime.substring(14,16);//出厂分钟
float money = 0;//需缴纳的费用
int shour = Integer.parseInt(sHour);
int ehour = Integer.parseInt(eHour);
int smm = Integer.parseInt(sMM);
int emm = Integer.parseInt(eMM);
int rehour = 0;//停车几个小时
if(sDay.equals(eDay)){//同一天
//当天6点到20点之间
if((shour>=6 && shour<=20)){
if(ehour - shour<=6){//6个小时之内
rehour = (ehour - shour)*60+(emm - smm);//停车多少分钟
//需要缴纳的费用 前15分钟免费 以后每15分钟1.5元
money = (rehour/15-15)*1.5f;
}else{
int hour = ehour - shour -6;//6小时除外剩余小时数
rehour = 6*60+(emm - smm);//停车多少分钟
//前15分钟免费 以后每15分钟1.5元 超过6小时15分钟2元
money = ((rehour/15-15)*1.5f)+(hour*60/2);
}
}
}else{//跨天 20点到 6点之间
//todo
}
System.out.println("您的车牌号是:"+carStopManager.getCarNo()+";
" +
"您此次停车花费的费用是: "+money+"元");
}
}
/**
* bean属性
*/
private String carNo;//车牌号
private String startTime;//入场时间
private String endTime;//出场时间
/**
* 无参构造
*/
public CarStopManager(){
super();
}
/**
* 有参数构造
* @param carNo
* @param startTime
* @param endTime
*/
public CarStopManager(String carNo, String startTime, String endTime) {
super();
this.carNo = carNo;
this.startTime = startTime;
this.endTime = endTime;
}
/**
* 设置get方法
* @return
*/
public String getCarNo() {
return carNo;
}
/**
* 设置set方法
* @param carNo
*/
public void setCarNo(String carNo) {
this.carNo = carNo;
}
public String getStartTime() {
return startTime;
}
public void setStartTime(String startTime) {
this.startTime = startTime;
}
public String getEndTime() {
return endTime;
}
public void setEndTime(String endTime) {
this.endTime = endTime;
}
}
③ JAVA 编译后WEB项目 源码没有了 怎么可以添加新功能求各位高手指点,小弟不懈感激
看你是什么样的功能吧。
有可能是这样的。对方将原码编译成一个jar文件放到web-inf/lib下。
他们需要你做的功能完全是新的,对即有的不会有影响。
如果是这样,那你需要知道你要继承什么样的接口来做实现。这个需要对方提供相应的资料。
如果是改动即有的功能,没有源码,做不了。
虽然可以反编译代码,但反编译的也不是完全都准确的,有些语句解析的不正确,最常见的就是异常处理的反编译。
总得来说,没有源码是很不方便的。
④ java源码解析
如何快速读懂项目源码javaWeb一:学会如何读一个JavaWeb项目源代码步骤:表结构-web.xml-mvc-db-spring
ioc-log-代码
1、先卖祥了解项目数据库的表结构,这个方面是最容易忘记的,有时候我们只顾着看每一个方法是怎么进行的,却没
有去了解数据库之间的主外键关联。其实如果先了解数据库表结构,再去看一个方法的实现会更加容易。
2、然后需要过一遍web.xml,知道项目中用到了什么拦
截器,监听器,过滤器,拥有哪些配置文件。如果是拦截器,一般负责过滤请求,进行AOP等;如果是监可能是定时任务,初始化任务;配置文件有如使用了spring
后的读取mvc相关,db相关,service相关,aop相关的文件。
3、查看拦截器,监听器代码,知道拦截了什么请求,这
个类完成了怎样的工作。有的人就是因为缺少了这一步,自己写了一个action,配置文件也没有写错,但是却怎么
调试也无法进入这个action,直到别人告诉他,请求被拦
4、接下来,看配置文件,首先一定是mvc相关的,如springmvc
中,要请求哪些请求是静态资源,使用了哪些view策略,侍陵controller注解放在哪个包下等。然后是db相关配置文件,看使用了什么数据库,使用了
什么orm框架,是否开启了二级老配戚缓存,使用哪种产品作为二级缓存,事务管理的处理,需要扫描的实体类放在什么位置。最后是spring核心的ioc
功能相关的配置文件,知道接口与具体类的注入大致是怎样的。当然还有一些如apectj置文件,也是在这个步骤中完成
5、log
相关文件,日志的各个级别是如何处理的,在哪些地方使用了log记录日志
6、从上面几点后知道了整个开源项目的整体框架,阅读每个方法就不再那么难了。
7、当然如果有项目配套的开发文档也是要阅读的。
源码解析-偏向锁撤销流程解读
源码链接:
简单总结下偏向撤销的流程:
细节补充:
如何判断偏向所有者没有正在持有该偏向锁?
分两步,首先判断偏向所有者是否还活着,如果还活着,则遍历它的栈,看是否能找到关联该锁的锁记录,如果找到,则正在持有,如果没找到,则没有持有。(遍历过程在一个安全点执行,此时偏向所有者被阻塞。)
偏向所有者正在持有该偏向锁,如何将其撤销为轻量级锁?
遍历偏向所有者的栈,修改与该锁关联的所有顷橘旅锁记录,让偏向所有者以为它对该对象加的就是轻量级锁。
源码中的highest_lock,为什么说是最早关联偏向锁的锁记录呢?
首伍喊先,锁记录在栈里是连续存放的。
请求获取锁时,按照从低地址到高地址的顺序,找在已关联该锁的锁记录之前,最后一个空闲的锁记录(没有指向雀凳任何锁对象)。
请求锁的源码如下:
而撤销偏向锁时,遍历偏向所有者的锁记录,也是按照从低地址到高地址的顺序,但它没有break的逻辑,因为它要处理所有关联该锁的锁记录。所以退出循环后,highest_lock指向的是最早关联该锁的锁记录。
这篇:源码解析-触发批量撤销或批量重偏向的条件,介绍了批量撤销的触发条件。
包含批量撤销逻辑的源码:
禁用类的可偏向属性有两点作用:
对于批量撤销时,正在被线程持有的偏向锁,通过在安全点遍历所有Java线程的栈,将偏向锁撤销为轻量级锁。
JAVA源码解析的时候Character.MIN_RADIX为什么=2?‘’占一个蚂誉位,你想一下,如果值是1,那么你怎么输笑物租入汉字
Character类的使用方法
Character:字符类型
1、属碰兆性。
staticintMIN_RADIX:返回最小基数。
java解析eml的源代码//?从EML文件得到MimeMessage对象
MimeMessage?message?=?new?MimeMessage(session,?new?FileInputStream(emlFile));
public?static?String?getMailSubject(Message?message)?throws?拆察Exception?{
return?MimeUtility.decodeText(message.getSubject());
}
public?static?String?getMailSender(Message?message)?throws?Exception?{
String?emailSender?=?null;
Address[]?addresses?=?message.getFrom();
if?(addresses?==?null?||?addresses.length??1)?{
throw?旅橘茄new?IllegalArgumentException("该邮件没有发件人");
}
//?获得发件人
InternetAddress?address?=?(InternetAddress)?addresses[0];
String?senderName?=?address.getPersonal();
if?(senderName?!=?null)?{
senderName?=?MimeUtility.decodeText(senderName);
emailSender?=?senderName?+?""?+?address.getAddress()?+?"";
}?else?{
senderName?=?address.getAddress();
}
return?emailSender;
}
public?static?String?getMailRecipients(Message?message,?Message.RecipientType?recipientType)?throws?Exception?{
StringBuilder?builder?=?new?StringBuilder();
Address[]?addresses?=?null;
if?(recipientType?==?null)?{
addresses?=?message.getAllRecipients();
}?else?{
addresses?=?message.getRecipients(recipientType);
}
if?(addresses?==?null?||?addresses.length??1)?{
throw?new?IllegalArgumentException("该邮件没有收件人");
}
for?(Address?address?:?addresses)?{
InternetAddress?iAddress?=?(InternetAddress)?address;
builder.append(iAddress.toUnicodeString()).append(",?");
}
return?builder.deleteCharAt(builder.length()?-?1).toString();
}
public?static?String?getMailSendDate(Message?message,?String?pattern)?throws?Exception?{
String?sendDateString?=?null;
if?(pattern?==?null?||?"".equals(pattern.trim()))?{
pattern?=?"yyyy年MM月dd日?E?HH:mm";
}
Date?sendDate?=?message.getSentDate();
sendDateString?=?new?SimpleDateFormat(pattern).format(sendDate);
return?伍凯sendDateString;
}
public?static?boolean?containsAttachment(Part?part)?throws?Exception?{
boolean?flag?=?false;
if?(part?!=?null)?{
if?(part.isMimeType("multipart/*"))?{
MimeMultipart?mp?=?(MimeMultipart)?part.getContent();
for?(int?i?=?0;?i??mp.getCount();?i++)?{
BodyPart?bodyPart?=?mp.getBodyPart(i);
String?disposition?=?bodyPart.getDisposition();
if?(disposition?!=?null??(Part.ATTACHMENT.equalsIgnoreCase(disposition)
||?Part.INLINE.equalsIgnoreCase(disposition)))?{
flag?=?true;
}?else?if?(bodyPart.isMimeType("multipart/*"))?{
flag?=?containsAttachment(bodyPart);
}?else?{
String?contentType?=?bodyPart.getContentType();
if?(contentType.indexOf("application")?!=?-1)?{
flag?=?true;
}
if?(contentType.indexOf("name")?!=?-1)?{
flag?=?true;
}
}
if?(flag)
break;
}
}?else?if?(part.isMimeType("message/rfc822"))?{
flag?=?containsAttachment((Part)?part.getContent());
}
}
return?flag;
}
public?static?boolean?isSeen(Message?message)?throws?Exception?{
if?(message?==?null)?{
throw?new?MessagingException("Message?is?empty");
}
return?message.getFlags().contains(Flags.Flag.SEEN);
}
public?static?boolean?isReplaySign(Message?message)?throws?Exception?{
if?(message?==?null)?{
throw?new?MessagingException("Message?is?empty");
}
boolean?replaySign?=?false;
String[]?headers?=?message.getHeader("Disposition-Notification-To");
if?(headers?!=?null??headers.length??0)?{
replaySign?=?true;
}
return?replaySign;
}
public?static?String?getMailPriority(Message?message)?throws?Exception?{
if?(message?==?null)?{
throw?new?MessagingException("Message?is?empty");
}
String?priority?=?"普通";
String[]?headers?=?message.getHeader("X-Priority");
if?(headers?!=?null??headers.length??0)?{
String?mailPriority?=?headers[0];
if?(mailPriority.indexOf("1")?!=?-1?||?mailPriority.indexOf("High")?!=?-1)?{
priority?=?"紧急";
}?else?if?(mailPriority.indexOf("5")?!=?-1?||?mailPriority.indexOf("Low")?!=?-1)?{
priority?=?"低";
}?else?{
priority?=?"普通";?//?3或者Normal;
}
}
return?priority;
}
public?static?void?getMailTextContent(Part?part,?StringBuilder?content)?throws?Exception?{
if?(part?==?null)?{
throw?new?MessagingException("Message?content?is?empty");
}
boolean?containsTextInAttachment?=?part.getContentType().indexOf("name")??0;
if?(part.isMimeType("text/*")??containsTextInAttachment)?{
content.append(part.getContent().toString());
}?else?if?(part.isMimeType("message/rfc822"))?{
getMailTextContent((Part)?part.getContent(),?content);
}?else?if?(part.isMimeType("multipart/*"))?{
Multipart?mp?=?(Multipart)?part.getContent();
for?(int?i?=?0;?i??mp.getCount();?i++)?{
BodyPart?bodyPart?=?mp.getBodyPart(i);
getMailTextContent(bodyPart,?content);
}
}?else?if?(part.isMimeType("image/*"))?{
//?TODO?part.getInputStream()获得输入流然后输出到指定的目录
}?else?{
//?TODO?其它类型的contentType,?未做处理,?直接输出
content.append(part.getContent().toString());
}
}
public?static?void?saveAttachment(Part?part,?String?destDir)?throws?Exception?{
if?(part?==?null)?{
throw?new?MessagingException("part?is?empty");
}
//?复杂的邮件包含多个邮件体
if?(part.isMimeType("multipart/*"))?{
Multipart?mp?=?(Multipart)?part.getContent();
//?遍历每一个邮件体
for?(int?i?=?0;?i??mp.getCount();?i++)?{
BodyPart?bodyPart?=?mp.getBodyPart(i);
//?bodyPart也可能有多个邮件体组成
String?disposition?=?bodyPart.getDisposition();
if?(disposition?==?null??(Part.ATTACHMENT.equalsIgnoreCase(disposition)
||?Part.INLINE.equalsIgnoreCase(disposition)))?{
InputStream?in?=?bodyPart.getInputStream();
saveFile(in,?destDir,?decodeText(bodyPart.getFileName()));
}?else?if?(bodyPart.isMimeType("multipart/*"))?{
saveAttachment(bodyPart,?destDir);
}?else?{
String?contentType?=?bodyPart.getContentType();
if?(contentType.indexOf("name")?!=?-1?||?contentType.indexOf("application")?!=?-1)?{
saveFile(bodyPart.getInputStream(),?destDir,?decodeText(bodyPart.getFileName()));
}
}
}
}?else?if?(part.isMimeType("message/rfc822"))?{
saveAttachment((Part)?part.getContent(),?destDir);
}
}
public?static?void?saveFile(InputStream?in,?String?destDir,?String?fileName)?throws?Exception?{
FileOutputStream?out?=?new?FileOutputStream(new?File(destDir?+?fileName));
byte[]?buffer?=?new?byte[1024];
int?length?=?0;
while?((length?=?in.read(buffer))?!=?-1)?{
out.write(buffer,?0,?length);
}
out.close();
in.close();
}
public?static?String?decodeText(String?encodedText)?throws?Exception?{
if?(encodedText?==?null?||?"".equals(encodedText.trim()))?{
return?"";
}?else?{
return?MimeUtility.decodeText(encodedText);
}
}
⑤ 求Java web增删改查 极简源码
//用户新增
publicbooleanaddUser(Usersuser){
try{
conn=ConnDB.getConnection();
Stringsql="insertintotb_usersvalues(default,?,?,?,?,?,?)";
System.out.println(sql);
ps=conn.prepareStatement(sql);
ps.setInt(1,user.getDepID());
ps.setString(2,user.getUserName());
ps.setString(3,user.getUserPwd());
ps.setString(4,user.getUserCode());
ps.setString(5,user.getUserSex());
ps.setInt(6,user.getUserAge());
if(ps.executeUpdate()==1){
returntrue;
}
}catch(Exceptione){
e.printStackTrace();
}finally{//关闭当前页打开的相关对象
ConnDB.close(conn,ps,null);
}
returnfalse;
}
//用户删除
publicbooleandelUser(intid){
try{
conn=ConnDB.getConnection();
Stringsql="deletefromtb_userswhereid=?";
System.out.println(sql);
ps=conn.prepareStatement(sql);
ps.setInt(1,id);
if(ps.executeUpdate()==1){
returntrue;
}
}catch(Exceptione){
e.printStackTrace();
}finally{//关闭当前页打开的相关对象
ConnDB.close(conn,ps,null);
}
returnfalse;
}
//用户编辑
publicbooleanupdateUser(Usersuser){
try{
conn=ConnDB.getConnection();
Stringsql="updatetb_userssetdepID=?,userName=?,userPwd=?,userCode=?,userSex=?,userAge=?whereid=?";
System.out.println(user.getDepID()+user.getUserName()+user.getUserPwd()+user.getUserCode()+user.getUserSex()+user.getUserAge()+user.getId());
ps=conn.prepareStatement(sql);
ps.setInt(1,user.getDepID());
ps.setString(2,user.getUserName());
ps.setString(3,user.getUserPwd());
ps.setString(4,user.getUserCode());
ps.setString(5,user.getUserSex());
ps.setInt(6,user.getUserAge());
ps.setInt(7,user.getId());
if(ps.executeUpdate()==1){
returntrue;
}
}catch(Exceptione){
e.printStackTrace();
}finally{//关闭当前页打开的相关对象
ConnDB.close(conn,ps,null);
}
returnfalse;
}
//根据id查询用户
publicUsersfindAllUserById(intid){
Usersu=null;
DepDaodepd=null;
try{
conn=ConnDB.getConnection();
Stringsql="select*fromtb_userswhereid=?";
System.out.println(sql);
ps=conn.prepareStatement(sql);
ps.setInt(1,id);
rs=ps.executeQuery();
if(rs.next()){
depd=newDepDao();
Departmentdep=depd.findAllDepById(rs.getInt("depID"));
System.out.println(dep.getDepName());
u=newUsers();
u.setId(rs.getInt("id"));
u.setDepID(rs.getInt("depID"));
u.setUserName(rs.getString("userName"));
u.setUserPwd(rs.getString("userPwd"));
u.setUserCode(rs.getString("userCode"));
u.setUserSex(rs.getString("userSex"));
u.setUserAge(rs.getInt("userAge"));
u.setDep(dep);
}
}catch(Exceptione){
e.printStackTrace();
}finally{//关闭当前页打开的相关对象
ConnDB.close(conn,ps,rs);
}
returnu;
}
这是我在层写的代码,都调用了ConnDB这个类,这个类完成了驱动的注册,及连接数据库的功能,代码如下:
packagecom.asjy.util;
importjava.sql.Connection;
importjava.sql.DriverManager;
importjava.sql.PreparedStatement;
importjava.sql.ResultSet;
importjava.sql.SQLException;
importjava.sql.Statement;
publicclassConnDB{
privatestaticStringurl="jdbc:mysql://localhost:3306/news";
privatestaticStringuser="root";
privatestaticStringpass="root";
//1.加载驱动
static{
try{
Class.forName("com.mysql.jdbc.Driver");
}catch(ClassNotFoundExceptione){
System.out.println("驱动加载失败");
}
}
//2.建立数据库连接对象
()throwsException{
returnDriverManager.getConnection(url,user,pass);
}
//3.关闭数据库
publicstaticvoidclose(Connectionconn,Statementps,ResultSetrs){
try{
if(rs!=null){
rs.close();
rs=null;
}
if(ps!=null){
ps.close();
ps=null;
}
if(conn!=null){
conn.close();
conn=null;
}
}catch(SQLExceptione){
e.printStackTrace();
}
}
}
⑥ 用java web小游戏源代码。期末结课老师让做,急用,谢了
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Toolkit;
import javax.swing.JFrame;
@SuppressWarnings("serial")
public class MainClass extends JFrame {
ControlSnake control;
Toolkit kit;
Dimension dimen;
public static void main(String[] args) {
new MainClass("my snake");
}
public MainClass(String s) {
super(s);
control = new ControlSnake();
control.setFocusable(true);
kit = Toolkit.getDefaultToolkit();
dimen = kit.getScreenSize();
add(control);
setLayout(new BorderLayout());
setLocation(dimen.width / 3, dimen.height / 3);// dimen.width/3,dimen.height/3
setSize(FWIDTH, FHEIGHT);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(false);
setVisible(true);
}
public static final int FWIDTH = 315;
public static final int FHEIGHT = 380;
}
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import java.util.Random;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.Timer;
@SuppressWarnings("serial")
public class ControlSnake extends JPanel implements ActionListener {
Random rand;
ArrayList<Point> list, listBody;
String str, str1;
static boolean key;
int x, y, dx, dy, fx, fy, flag;
int snakeBody;
int speed;
public ControlSnake() {
snakeBody = 1;
str = "上下左右方向键控制 P键暂停...";
str1 = "现在的长度为:" + snakeBody;
key = true;
flag = 1;
speed = 700;
rand = new Random();
list = new ArrayList<Point>();
listBody = new ArrayList<Point>();
x = 5;
y = 5;
list.add(new Point(x, y));
listBody.add(list.get(0));
dx = 10;
dy = 0;
fx = rand.nextInt(30) * 10 + 5;// 2
fy = rand.nextInt(30) * 10 + 5;// 2
setBackground(Color.BLACK);
setSize(new Dimension(318, 380));
final Timer time = new Timer(speed, this);
time.start();
addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == 37) {
dx = -10;
dy = 0;
} else if (e.getKeyCode() == 38) {
dx = 0;
dy = -10;
} else if (e.getKeyCode() == 39) {
dx = 10;
dy = 0;
} else if (e.getKeyCode() == 40) {
dx = 0;
dy = 10;
} else if (e.getKeyCode() == 80) {
if (flag % 2 == 1) {
time.stop();
}
if (flag % 2 == 0) {
time.start();
}
flag++;
}
}
});
}
public void paint(Graphics g) {
g.setColor(Color.WHITE);
g.fillRect(0, 0, 400, 400);
g.setColor(Color.DARK_GRAY);
g.drawLine(3, 3, 305, 3);
g.drawLine(3, 3, 3, 305);
g.drawLine(305, 3, 305, 305);
g.drawLine(3, 305, 305, 305);
g.setColor(Color.PINK);
for (int i = 0; i < listBody.size(); i++) {
g.fillRect(listBody.get(i).x, listBody.get(i).y, 9, 9);
}
g.fillRect(x, y, 9, 9);
g.setColor(Color.ORANGE);
g.fillRect(fx, fy, 9, 9);
g.setColor(Color.DARK_GRAY);
str1 = "现在的长度为:" + snakeBody;
g.drawString(str, 10, 320);
g.drawString(str1, 10, 335);
}
public void actionPerformed(ActionEvent e) {
x += dx;
y += dy;
if (makeOut() == false) {
JOptionPane.showMessageDialog(null, "重新开始......");
speed = 700;
snakeBody = 1;
x = 5;
y = 5;
list.clear();
list.add(new Point(x, y));
listBody.clear();
listBody.add(list.get(0));
dx = 10;
dy = 0;
}
addPoint(x, y);
if (x == fx && y == fy) {
speed = (int) (speed * 0.8);//速度增加参数
if (speed < 200) {
speed = 100;
}
fx = rand.nextInt(30) * 10 + 5;// 2
fy = rand.nextInt(30) * 10 + 5;// 2
snakeBody++;// 2
} // 2
repaint();
}
public void addPoint(int xx, int yy) {
// 动态的记录最新发生的50步以内的移动过的坐标
// 并画出最新的snakeBody
if (list.size() < 100) {//蛇身长度最长为100
list.add(new Point(xx, yy));
} else {
list.remove(0);
list.add(new Point(xx, yy));
}
if (snakeBody == 1) {
listBody.remove(0);
listBody.add(0, list.get(list.size() - 1));
} else {
listBody.clear();
if (list.size() < snakeBody) {
for (int i = list.size() - 1; i > 0; i--) {
listBody.add(list.get(i));
}
} else {
for (int i = list.size() - 1; listBody.size() < snakeBody; i--) {
listBody.add(list.get(i));
}
}
}
}
public boolean makeOut() {
if ((x < 3 || y < 3) || (x > 305 || y > 305)) {
return false;
}
for (int i = 0; i < listBody.size() - 1; i++) {
for (int j = i + 1; j < listBody.size(); j++) {
if (listBody.get(i).equals(listBody.get(j))) {
return false;
}
}
}
return true;
}
}
/*贪吃蛇代码*/