1、(游戏:豆机)豆机,也称为梅花瓶或髙尔顿瓶,它是一个用来做统计实验的设备,是用英国科学家瑟弗兰克斯髙尔顿的名字来命名的。它是一个三角形状的均匀放置钉子(或钩子)的直立板 子,如图所示
球都是从板子口落下的。每当球碰到钉子,它就有 50%的机会落向左边或落向右边。在板子底部的槽子中都会累积一堆球。
编写程序模拟豆机。程序应该提示用户输入球的个数以及机器的槽数。打印每个球的路 径模拟它的下落。例如:在图 7-13b中球的路径是 LLRRLLR, 而在图 7-13c中球的路径是 RLRRLRR。使用条形图显示橹中球的最终储备量。下面是程序的一个运行示例:
提示:创建一个名为 slots的教组。教组 slots 中的每个元素存储的是一个槽中球的个数。每 个球都经过一条路径落入一个槽中。路径上 R的个數表示球落下的槽的位置。例如:对于路径 LRLRLRR 而言,球落到 slots[4]中,而对路径 RRLLLLL 而言,球落到 slots[2]中。
题目分析:
代码思想:
import java.util.Arrays;
import java.util.Scanner;
public class Class32 {
public static void main(String args[]){
Scanner scanner=new Scanner(System.in);
System.out.print("Enter the number of balls to drop:");
int balls=scanner.nextInt();//输入球的个数
System.out.print("Enter the number of slots in the bean machine:");
int[] arr=new int[scanner.nextInt()]; //槽子数组
String s1="";
for(int i=0;i<balls;i++){ //遍历每个球
for(int j=0;j<arr.length-1;j++){//行数是槽子的个数-1
int n=(int)(Math.random()*10);
if(n<5){ //小于5为左
s1+='L';
}else{
s1+='R';
}
}
System.out.println(s1);
int count=0;
for(int a=0;a<s1.length();a++){
if(s1.charAt(a)=='R'){
count++;//R个数为count
}
}
arr[count]+=1;
s1=""; //清空s1,为下一次遍历做准备
}
System.out.println("各个槽子中的球数为:"+Arrays.toString(arr));
//找数组的最大值
int max=0;
for(int c=0;c<arr.length;c++){
if(arr[c]>max){
max=arr[c];
}
}
System.out.println("最大值为:"+max);//数组的最大值找到
System.out.println("最终球在槽子中的发布如下所示:");
int top=max;
int l=0;
for(int k=0;k<top;k++) {
for (l = 0; l < arr.length; l++) {
if (arr[l] == max) {
arr[l]-=1;//将数组最大值-1
System.out.print("0");
}else{
System.out.print(" ");
}
}
max=max-1;//此时数组最大值-1,更新数组的最大值
System.out.println();
}
}
}
输出结果:
2、(消除重复)使用下面的方法头编写方法,消除数组中重复出现的值:
public static int[] eliminateDuplicates(int[] list)
编写一个测试程序,读取 10 个整数,调用该方法,然后显示结果。下面是程序的运行示例:
import java.util.Arrays;
import java.util.Scanner;
public class Class30 {
public static void main(String args[]){
//边读边删
way1();
//读完再删
way2();
}
//方法1
public static void way1( ){
Scanner scanner=new Scanner(System.in);
System.out.print("Enter ten numbers:");
int[] arr=new int[0];
for(int i=0;i<10;i++){
int number=scanner.nextInt();
//如果数组中不包含这个数字就存到一个新的数组中:即容量+1,然后给扩容后的这个数组中最后一个元素赋值
if(!isContains(arr,number)){
arr=resize(arr,arr.length+1);//获得新数组
arr[arr.length-1]=number; //更新数组内的最后一个元素
}
//如果包含这个数字,角标i++直接跳过这个数字
}
System.out.println(Arrays.toString(arr));
}
//判断指定数组是否包含指定元素
public static boolean isContains(int[] arr,int key){
for(int i=0;i<arr.length;i++){
if(arr[i]==key){
return true;
}
}
return false;
}
//重置数组,相当于创建一个新数组
public static int[] resize(int[] arr,int newLen){
int[] newArr=new int[newLen];
for(int i=0;i<arr.length;i++){
newArr[i]=arr[i];
}
return newArr;
}
//方法2
public static void way2(){
Scanner scanner=new Scanner(System.in);
System.out.print("Enter ten numbers:");
int[] arr=new int[10];
for(int i=0;i<arr.length;i++){
arr[i]=scanner.nextInt();
}
int size=arr.length; //size为有效长度,以便于后期维护size
for(int i=0;i<size;i++){
//当前数字和后面的挨个比
for(int j=i+1;j<size;j++){
//如果有相等,就将重复数字的后面所有数字往前移动
if(arr[i]==arr[j]){
for(int k=j+1;k<size;k++){
arr[k-1]=arr[k];
}
size--;//每次移动后重置有效长度
}
}
}
for(int i=0;i<size;i++){
System.out.print(arr[i]+" ");
}
}
}
3.俩个矩阵相乘
参考定义:
import java.util.Scanner;
public class Home33 {
public static void main(String args[]){
Scanner scanner=new Scanner(System.in);
System.out.print("Enter matrix1 2*3:");
double[][] arr1=new double[2][3];
for(int i=0;i<arr1.length;i++){
for(int j=0;j<arr1[0].length;j++){
arr1[i][j]=scanner.nextInt();
}
}
System.out.print("Enter matrix2 3*2:");
double[][] arr2=new double[3][2];
for(int i=0;i<arr2.length;i++){
for(int j=0;j<arr2[0].length;j++){
arr2[i][j]=scanner.nextInt();
}
}
double[][] arr=multiplyMatrix(arr1,arr2); //返回的数组赋值给arr,目的打印
for(int i=0;i<arr.length;i++){
for(int j=0;j<arr[0].length;j++){
System.out.print(arr[i][j]+" ");
}
System.out.println();
}
}
public static double[][] multiplyMatrix(double[][] a,double[][] b){
double sum=0;
double[][] arr=new double[a.length][b[0].length];
//对新数组里面元素的值进行赋值
for(int i=0;i<arr.length;i++){
for(int j=0;j<arr[0].length;j++){
for(int k=0;k<b.length;k++){ //k控制累加的次数,k为a的列或者b的行
arr[i][j]+=a[i][k]+b[k][j]; //参考矩阵相乘公式
}
}
}
return arr; //返回一个数组
}
}
4.猜字游戏
import java.util.Random;
import java.util.Scanner;
public class Class34 {
//1.先生成一组单词
public static String[] words= {"computer","since","this","double","decide"};
//随机抽取一个单词
public static String word=null;
//创建该单词的状态数组
public static boolean[] state=null;
//当前轮猜错的次数
public static int missed=0;
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
Random random=new Random();
word=words[random.nextInt(words.length)];
state=new boolean[word.length()];
//开始输入字符猜单词
while(true) {
String password=getPassWord(); //接收最新的猜单词结果
System.out.print("Enter a letter in word "+password+":");
String letter=scanner.nextLine(); //输入一个字母
changWordsState(letter); //修改状态数组
if(isEnd()) {
System.out.println("The word is "+word+".You missed "+missed+" time");//结束时打印猜单词游戏的结果(单词+错误次数)
System.out.println("Do you want to guess another word?Enter y or n:");//提示是否继续
if(scanner.nextLine().equals("y")) {
word=words[random.nextInt(words.length)];
state=new boolean[word.length()];
missed=0;
}else{
break;
}
}
}
}
//判断是否结束
private static boolean isEnd() {
for(int i=0;i<state.length;i++) {
if(state[i]==false) { //状态数组存在false则没有结束
return false;
}
}
return true;
}
private static void changWordsState(String letter) {
boolean isExist=false;
for(int i=0;i<word.length();i++) {
if((word.charAt(i)+"").equals(letter)) {//letter是一个字符串对象,所以要将指定角标元素拼接成字符串来比较
isExist=true;
if(state[i]==false) {
state[i]=true;
}else {
System.out.println("\t"+letter+" is already in the word");
return;
}
}
}
if(!isExist) {
missed++; //累加错误次数
System.out.println("\t"+letter+" is not in the word");
}
}
public static String getPassWord() {
String password="";
for(int i=0;i<word.length();i++) {
if(state[i]==true) { //如果有这个字母就返回字母
password+=word.charAt(i);
}else {
password+="*"; //如果没有这个字母返回密文
}
}
return password;
}
}
5.五子棋
import java.util.Scanner;
class WuZiQi{
/*
1.创建一个棋盘
2.对棋盘进行初始化
3.打印棋盘
4.开始游戏
*/
//1.定义全局变量
public static String[][] board=null; //棋盘字符数组
public static Scanner scanner=new Scanner(System.in);
public static void main(String[] args){
initBoard();//定义棋盘
printBoard();//打印棋盘
startGame();//开始游戏
}
public static void startGame(){
int player=0; //先计数从0开始,奇偶交替下棋
while(!isGameOver()){ //下棋的前提条件是游戏没有结束
if(player%2==0){//黑方
System.out.println(">>>黑方下棋:");
if(!xiaqi("O")){ //如果不成功,当前玩家继续下棋
continue; //重新下棋
}
}else{//白方
System.out.println(">>>白方下棋:");
if(!xiaqi("X")){
continue;
}
}
player++; // 更新
}
System.out.println(">>>游戏结束!!");
}
//判断结束
//默认从第一个棋子开始遍历寻找,所以只判断当前棋子的右,右下,下,右上
public static boolean isGameOver(){
for(int i=0;i<board.length;i++){
for(int j=0;j<board.length;j++){
if(!board[i][j].equals("+")){
//有一个方向为5个棋则返回true,否则继续判断其它方向
//向右
if(j<11){
boolean flag=true;
for(int dy=1;dy<=4;dy++){
if(board[i][j]!=board[i][j+dy]){
flag=false;
break;
}
}
if(flag){
return true;
}
}
//向下
if(i<11){
boolean flag=true;
for(int dx=1;dx<=4;dx++){
if(board[i][j]!=board[i+dx][j]){
flag=false;
break;
}
}
if(flag){
return true;
}
}
//右下
if(i<11&&j<11){
boolean flag=true;
for(int d=1;d<=4;d++){
if(board[i][j]!=board[i+d][j+d]){
flag=false;
break;
}
}
if(flag){
return true;
}
}
//右上
if(i>3&&j<11){
boolean flag=true;
for(int d=1;d<=4;d++){
if(board[i][j]!=board[i-d][j+d]){
flag=false;
break;
}
}
if(flag){
return true;
}
}
}
}
}
return false; //此时说明四个方向都没有成连棋,表示没有结束,返回false
}
//填充棋子
public static boolean xiaqi(String chess){
System.out.print(">>>请输入x坐标:");
int x=scanner.nextInt()-1;
System.out.print(">>>请输入y坐标:");
int y=scanner.nextInt()-1;
if(board[x][y].equals("+")){
board[x][y]=chess;//更新棋子
printBoard();//重绘
return true;
}else{
System.out.println(">>>棋子已存在,请重新下棋!");
return false;
}
}
public static void printBoard(){ //打印
System.out.print(" ");
for(int i=1;i<=board.length;i++){
System.out.printf("%-3d",i); //i表示棋盘的列所对应数字
}
System.out.println();
for(int i=0;i<board.length;i++){
System.out.printf("%-3d",i+1); //i=1+1表示棋盘的行所对应数字
for(int j=0;j<board[i].length;j++){
System.out.print(board[i][j]+" ");
}
System.out.println();
}
}
public static void initBoard(){ //定义
board=new String[15][15]; //创建一个15*15的棋盘
for(int i=0;i<board.length;i++){
for(int j=0;j<board[i].length;j++){
board[i][j]="+";
}
}
}
}