`
i拾贝
  • 浏览: 29940 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

java数组小游戏——数三退一

    博客分类:
  • java
阅读更多

java数组小游戏——数三退一

Count3Quit.java

//数3退1,小游戏算法测试
/*
	若干个人围成一圈,从第一个人开始数,数到第三个人,第三个人退出,
	继续从1开始数,到3退出
*/
public class Count3Quit {
	public static void main(String[] args) {
		
		//500个人拉成一圈,用数组模拟
		boolean[] arr = new boolean[500];
		for(int i=0; i<arr.length; i++) {
			arr[i] = true;
		}
				
		int leftCount = arr.length;//还剩多少个人
		int countNum = 0;//计数器
		int index = 0;//第0个人
		
		while(leftCount > 1) {
			if(arr[index] == true) {
				countNum ++;
				if(countNum == 3) {
					countNum = 0;
					arr[index] = false;
					leftCount --;
				}
			}
			
			index ++;
			
			//如果index等于arr.length,index回0
			if(index == arr.length) {
				index = 0;
			}
		}
		
		//找到剩下为true的数
		for(int i=0; i<arr.length; i++) {
			if(arr[i] == true) {
				System.out.println(i);//i=435,下标为435,为第436个人
			}
		}
	}
}

 

F:\java>javac Count3Quit.java

F:\java>java Count3Quit
435

F:\java>

 

 Count3Quit2.java

/*
	面向对象的写法:
	数三退一,500个小孩围成一圈
*/
public class Count3Quit2 {
	public static void main(String[] args) {
		//面向对象的写法
		KidCircle kc = new KidCircle(500);
		int countNum = 0;
		Kid k = kc.first;
		while(kc.count > 1) {
			countNum ++;
			if(countNum == 3) {
				countNum = 0;
				kc.delete(k);
			}
			k = k.right;
		}
		
		System.out.println(kc.first.id);
	}
}

//小孩类
class Kid {
	int id;
	Kid left;//小孩的左边
	Kid right;//小孩的右边
}

//小孩围成的圈
class KidCircle {
	int count = 0;
	Kid first, last;//开始的小孩和结束的小孩
	
	KidCircle(int n) {
		for(int i=0; i<n; i++) {
			add();
		}
	}
	
	//添加一个小孩
	void add() {
		Kid k = new Kid();
		k.id = count;
		if(count <= 0) {
			first = k;
			last = k;
			k.left = k;
			k.right = k;
		} else {
			last.right = k;
			k.left = last;
			k.right = first;
			first.left = k;
			last = k;
		}
		count ++;
	}
	
	//删除一个小孩
	void delete(Kid k) {
		if(count <= 0) {
			return;
		} else if (count == 1) {
			first = last = null;
		} else {
			k.left.right = k.right;
			k.right.left = k.left;
			
			if(k == first) {
				first = k.right;
			} else if( k == last) {
				last = k.left;
			}
		}
		count --;
	}
}

 

F:\java>javac Count3Quit2.java

F:\java>java Count3Quit2
435

F:\java>

 

 

分享到:
评论

相关推荐

    java_扫雷游戏——java_扫雷游戏

    在本项目中,我们探讨的是一个使用Java编程语言实现的经典电脑游戏——扫雷。这个扫雷游戏是基于Java的基础语法和面向对象编程理念构建的,旨在帮助开发者熟悉和巩固Java编程技能,同时提供一个趣味性的实践平台。 ...

    JAVA版扫雷游戏——仿XP下的扫雷

    "JAVA版扫雷游戏——仿XP下的扫雷"是一个很好的实践项目,它允许开发者用Java语言来实现经典电脑游戏——扫雷。下面将详细介绍这个项目的相关知识点。 1. **Java基础** - **类与对象**:扫雷游戏的主体是基于类和...

    数组与字符串.docx

    ### 数组与字符串知识点 ...综上所述,该文档涵盖了数组和字符串的基础操作,以及一个实际应用案例——猜密码小游戏。这些知识点不仅有助于初学者理解Java中数组和字符串的使用方法,也为进一步学习提供了实践基础。

    JAVA图形界面程序——汉诺塔演示程序代码

    ### JAVA图形界面程序——汉诺塔演示程序代码 #### 概述 本篇文章将详细介绍一个用Java语言编写的汉诺塔问题的图形界面演示程序。汉诺塔问题是一种经典的递归算法实例,常用于教授递归思想。在这个程序中,我们将...

    Android小游戏——四棋

    【Android小游戏——四棋】 四棋,又称为“井字游戏”或“圈圈叉叉”,是一种简单但富有策略性的双人对弈游戏。在这个Android版本的四棋游戏中,玩家可以选择“X”或“O”作为自己的棋子,并在3x3的棋盘上尝试连成...

    java自制小游戏坦克大战

    本项目是一个基于Java编程语言的小型游戏——坦克大战,非常适合初学者进行实践和学习。通过参与这个项目,你可以深入理解Java编程的基础知识,并逐步提升编程技能。以下是对该项目涉及的主要Java知识点的详细解析:...

    java 五子棋小游戏

    【Java五子棋小游戏】是一款基于Java编程语言开发的简单娱乐项目,旨在提供一个100x100网格的棋盘,供玩家体验五子棋的乐趣。在这款游戏中,两个玩家轮流在棋盘上放置黑白棋子,目标是形成任意方向(横、竖、斜)上...

    JAVA小游戏----俄罗斯方块

    Java小游戏——俄罗斯方块是一款基于Swing图形用户界面开发的经典休闲游戏。Swing是Java标准库中的一个组件,用于创建桌面应用程序,它提供了丰富的UI控件和事件处理机制,非常适合开发这种小型游戏。 在这款游戏中...

    JAVA小游戏---五子棋

    这个Java五子棋小游戏项目涵盖了GUI设计、游戏逻辑实现以及多媒体处理等多个方面,对于初学者来说,是学习和实践Java编程技术的一个良好实例。通过分析和理解这些代码,不仅可以巩固Java基础,还能了解如何在实际...

    使用java语言编写的推箱子游戏,用二维数组来实现游戏界面.zip

    本项目“使用Java开发的游戏项目源码”提供了一个基于二维数组实现的游戏——推箱子,适合用于Java编程的学习者进行课程设计或毕业设计。通过分析这个游戏,我们可以深入理解Java编程在游戏开发中的应用,以及二维...

    BombMan——实时联机对战小游戏 一个用java swing写的实时联机对战小游戏.zip

    《BombMan——实时联机对战小游戏》是基于Java Swing技术开发的一款小型的多人在线对战游戏。在这款游戏中,玩家可以与朋友们实时互动,体验炸弹人风格的竞技乐趣。Swing是Java的一个图形用户界面(GUI)工具包,用于...

    2048小游戏源码(java).rar

    《2048小游戏源码解析——基于Java编程语言》 2048是一款深受玩家喜爱的数字合成游戏,它的核心玩法是通过上下左右滑动屏幕,使相同数字的方块合并,最终目标是达到2048这个数值。这款小游戏的源码采用Java编程语言...

    java小游戏_swing编程_俄罗斯方块

    Java小游戏——基于Swing编程的俄罗斯方块 Java是一种广泛使用的面向对象的编程语言,它以其跨平台性、丰富的库支持以及强大的性能受到开发者们的喜爱。在这个“java小游戏_swing编程_俄罗斯方块”项目中,开发者...

    俄罗斯方块,小游戏java版

    本篇将深入探讨一款由Java语言编写的经典小游戏——俄罗斯方块,旨在解析其背后的编程思想和技术要点。 首先,我们关注的是“游戏”这一标签。游戏开发涉及到许多关键元素,如图形界面、用户交互、逻辑控制等。...

    2048小游戏源码(java)

    《2048小游戏源码解析——Java编程实践》 2048是一款风靡全球的数字合并益智游戏,其简洁的界面和富有挑战性的玩法吸引了无数玩家。本篇文章将深入探讨用Java语言编写的2048小游戏源码,帮助读者理解游戏的核心逻辑...

    chess 棋类小游戏——井字棋

    在这个Java实现的井字棋项目中,我们可以学习到如何构建一个基本的命令行界面游戏,这对于Java编程初学者来说是一个很好的练习。 首先,我们需要了解Java的基础知识,包括类、对象、方法、变量等概念。在这个游戏中...

    Java小游戏-推箱子源码

    "Java小游戏-推箱子源码"是一个基于Java实现的经典逻辑游戏——推箱子的源代码实例。推箱子游戏起源于1981年,以其简单的规则和复杂的策略性闻名,是很多程序员学习游戏编程的入门项目。 源码分析: 1. **项目结构*...

    java应用程序——纸牌游戏发牌实现

    根据给定的信息,我们可以总结出以下关于“Java应用程序——纸牌游戏发牌实现”的相关知识点: ### 一、概述 本Java程序实现了一个简单的纸牌游戏发牌逻辑。该程序利用面向对象的思想,通过定义`Card`类来表示每张...

    学习JAVA编程,完成作业——编一个控制台梭哈游戏.zip

    在本项目中,"学习JAVA编程,完成作业——编一个控制台梭哈游戏.zip",开发者采用Java语言实现了一个基于控制台的梭哈(Poker)游戏。这是一门编程课程的作业,目的是让学生掌握Java的基本语法、面向对象编程概念...

Global site tag (gtag.js) - Google Analytics