Java小练习及答案.docx
《Java小练习及答案.docx》由会员分享,可在线阅读,更多相关《Java小练习及答案.docx(26页珍藏版)》请在冰豆网上搜索。
Java小练习及答案
Arrays
难度
★★★★★
课程名
CoreJava(SL275)
章节
Module4Arrays
知识点
Arrays
模块
J2EE
作业详细内容介绍
1、五子棋游戏()
编写程序实现两人互玩的五子棋游戏,游戏开始时要求输出以下棋盘,然后提示黑方和白方下子,玩家从命令行输入:
af,表示在a,f坐标落子,其中黑方的子用@表示,白方的子用O表示,每有一方落子,则要重新输出棋盘的状态.程序还要能判断某一方获胜,并终止程序。
abcdefghijklmnop
a****************
b****************
c****************
d****************
e****************
f****************
g****************
h****************
i****************
j****************
k****************
l****************
m****************
o****************
p****************
2、砸金花游戏
编写程序模拟砸金花的游戏,程序开始时要求用户输入赌注,并在一副牌中随机发两手牌,每手牌三张,然后比较这两手牌的大小,若A比B大,则用户赢得赌注,反之,则输掉赌注。
每手牌的大小比较规则:
1,三条>同花顺>同花>顺子>对子>单张
2,处于同一级别的两手牌比较最大的一张牌的大小
作业截图
答案1:
importjava.util.Scanner;
publicclassFiveChess{
/**
*@paramargs
*/
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
//提示用户
System.out.println("请输入棋盘的大小:
");
Scannerin=newScanner(System.in);
intN=in.nextInt();
//创建和初始化棋盘
char[][]board=newchar[N][N];
for(inti=0;ifor(intj=0;jboard[i][j]='*';
}
}
//输出棋盘
printBoard(board);
//使用boolean类型的变量表示黑方或者白方:
true:
表示黑方false:
表示白方
booleanisBlack=true;
//游戏开始
target:
while(true){
//提示某方下棋
System.out.println("请"+(isBlack?
'黑':
'白')+"方下子:
");
//控制台输入下棋的坐标位置
Stringinput=in.next();
//处理退出问题
if("EXIT".equalsIgnoreCase(input)){
System.out.println("GameOver!
");
break;
}
//判断输入的下标的位置是否正确,是否符合要求
for(intindex=0;indexif(input.length()<=1||!
Character.isLetter(input.charAt(index))){
System.out.println("输入有误,请重新输入!
");
continuetarget;
}
}
//判断输入的下标是否越界
if(input.charAt(0)>N+'a'||input.charAt
(1)>N+'a'){
System.out.println("输入有误,请重新输入!
");
continue;
}
//計算和输出下棋的坐标位置
intx=input.charAt(0)-'a';
inty=input.charAt
(1)-'a';
//System.out.println("坐标:
"+x+","+y);
//判断输入的下标位置上是否已经有棋子
if(board[x][y]=='@'||board[x][y]=='O'){//该位置是否已经有棋子了
System.out.println("该位置已经有棋子,请重新指定坐标!
");
continue;
}
//下棋
board[x][y]=isBlack?
'@':
'O';
//输出棋盘
printBoard(board);
//判断输赢情况
if(isWin(board,isBlack,x,y)){
System.out.println((isBlack?
"黑":
"白")+"方获胜!
");
break;
}
//黑白方交换
isBlack=!
isBlack;
}
}
privatestaticvoidprintBoard(char[][]board){
//输出星形的内容
for(inti=0;iSystem.out.print((char)('a'+i)+"\t");//输出行坐标(左边的字母)
for(intj=0;jSystem.out.print(board[i][j]+"");
}
System.out.println();//输出换行符
}
//输出第最后一行的内容
System.out.print("\t");//输出第一行开头的空格
for(inti=0;iSystem.out.print((char)('a'+i)+"");
}
System.out.println();//输出换行符
}
/**
*判断胜负
*@paramboard表示棋盘
*@paramisBlack表示刚下棋的一方
*@paramx表示横坐标
*@paramy表示纵坐标
*@return返回代表刚下棋的一方是否获胜
*/
privatestaticbooleanisWin(char[][]board,booleanisBlack,intx,inty){
//代表和下棋方对应的棋子
charchess=isBlack?
'@':
'O';
returnisShuipingWin(board,chess,x,y)
||isChuizhiWin(board,chess,x,y)
||isZuoXieWin(board,chess,x,y)
||isYouXieWin(board,chess,x,y);
}
//判断水平方向上的胜负情况
privatestaticbooleanisShuipingWin(char[][]board,charchess,intx,inty){
//1,循环找到左边界(不能直接判断到边界,因为可能最后一次循环过来会出现异常情况)
while(y>0&&board[x][y]==chess){
y--;
//System.out.println("水平方向处理");
}
//2,判断边界情况时,最边界的棋子为何种颜色
intcount=0;
if(board[x][y]==chess){
count=1;
}
//3,向右循环统计有多少个连续的同颜色棋子
y++;
while(ycount++;
if(count==5){
returntrue;
}
y++;
}
returnfalse;
}
//判断垂直方向上的胜负情况
privatestaticbooleanisChuizhiWin(char[][]board,charchess,intx,inty){
//1,循环找到上边界(白子的边界)
while(x>0&&board[x][y]==chess){
x--;
//System.out.println("垂直方向处理");
}
//2,判断边界情况时,最边界的棋子为何种颜色
intcount=0;
if(board[x][y]==chess){
count=1;
}
//3,向下循环统计有多少个连续的同颜色棋子
x++;
while(xcount++;
if(count==5){
returntrue;
}
x++;
}
returnfalse;
}
//判断左斜方向上的胜负情况
privatestaticbooleanisZuoXieWin(char[][]board,charchess,intx,inty){
//1,循环找到左上边界
//情况:
如果第一个就下最左上角的位置上,该循环不被执行。
while(y>0&&x>0&&board[x][y]==chess){
y--;
x--;
//System.out.println("左斜方向处理");
}
//2,判断边界情况时,最边界的棋子为何种颜色
intcount=0;
if(board[x][y]==chess){
count=1;
}
//3,向右下循环统计有多少个连续的同颜色棋子
y++;
x++;
while(xcount++;
if(count==5){
returntrue;
}
y++;
x++;
}
returnfalse;
}
//判断右斜方向上的胜负情况
publicstaticbooleanisYouXieWin(char[][]board,charchess,intx,inty){
//1,循环找到右上边界
while(x>0&&yx--;
y++;
//System.out.println("右斜方向处理");
}
/**
*2,判断边界情况时,最边界的棋子为何种颜色
*判断条件(y*在上面的while循环中最后一个次循环结束的时候y值可能已经等于board[0].length的长度了。
*/
intcount=0;
if(ycount=1;
}
//3,向左下循环统计有多少个连续的同颜色棋子
y--;
x++;
while(x=0&&board[x][y]==chess){
count++;
if(count==5){
returntrue;
}
y--;
x++;
}
returnfalse;
}
}
答案2:
作业提交时间及方法
作业题目
Arrays
难度
★★★★
课程名
CoreJava(SL275)
章节
Module4Arrays
知识点
Arrays
模块
J2EE
作业详细内容介绍
1、从键盘输入十个整数,升序输出;
2、用二维字符数组保存一首唐诗(五言或七言),每一行代表一句,要求将这首唐诗按照古文的方式输出出来
(从右至左,竖行排列)。
。
。
3、九宫格;
4、用数组实现约瑟夫出圈问题。
n个人排成一圈,从第一个人开始报数,从1开始报,报到m的人出圈,剩下的
人继续开始从1报数,直到所有的人都出圈为止。
对于给定的n,m,求出所有人的出圈顺序。
5、将所有学生的课程成绩保留在一个二维数组中,每一行代表一个学生的成绩,每一列代表一门课程的成绩;
将每门课程的名称保留在一个一维数组中(课程的下标序号与二维数组的列号匹配);
将每个学生的姓名保留在一个一维数组中(学生的下标序号与二维数组的行号匹配);
要求编写程序实现成绩的查询,要求程序运行时从命令行输入统计命令及参数,程序则输出结果,
例如:
AVGCOUcorejava:
统计课程corejava的平均分。
AVGSTU张三:
统计学生张三的平均分。
SORTsum:
列出每个学生所有课程总分的排名。
SORTcorejava:
列出corejava课程的成绩的排名。
GET张三sum:
统计学生张三的总分。
GET张三corejava:
统计张三的corejava课程的成绩。
作业截图
答案1:
importjava.util.Scanner;
publicclassSort{
/**
*@paramargs
*/
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
intlength=10;
int[]arr=newint[length];
System.out.println("请输入10个整数:
");
Scannerin=newScanner(System.in);
for(inti=0;iarr[i]=Integer.parseInt(in.next());
}
//升序排序
for(inti=0;ifor(intj=0;jif(arr[i]inttemp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
for(inti=0;iSystem.out.print(arr[i]+"");
}
}
}
请输入10个整数:
9876543210
0123456789
答案2:
publicclassgusi01{
publicstaticvoidmain(String[]args){
char[][]a={
{'朝','辞','白','帝','彩','云','间'},
{'千','里','江','陵','一','日','还'},
{'两','岸','猿','声','啼','不','住'},
{'轻','舟','已','过','万','重','山'}};
//方法一:
for(inti=0;ifor(intj=0;jSystem.out.print(a[3-j][i]+"");//而打印的时候,打印的确是原有古诗二维数组的内容即原来的位置。
}
System.out.print("\n");
}
//方法二:
for(inti=0;ifor(intj=a.length-1;j>=0;j--)
System.out.print(a[j][i]+"");
System.out.println();
}
}
}
输出:
轻两千朝
舟岸里辞
已猿江白
过声陵帝
万啼一彩
重不日云
山住还间
答案3:
importjava.util.Scanner;
publicclassTest{
/**
*@paramargs
*/
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
System.out.println("请输入一个奇数:
");
Scannerin=newScanner(System.in);
intN=in.nextInt();
//为数组赋初始值
intdata[][]=newint[N][N];
for(inti=0;ifor(intj=0;jdata[i][j]=0;
}
printArray(data);
//计算第一个元素存放的位置
introw=0;//声明行变量
intcol=N/2;//声明列变量
for(inti=1;i<=N*N;i++){
System.out.println("data["+row+"]["+col+"]="+i);
data[row][col]=i;
//始终保证是右上角的位置;
row--;
col++;
//行越界,列不越界;
if(row<0&&colrow=N-1;//col不变;
}
//列越界,行不越界
if(row>=0&&col==N){
col=0;//row不变;
}
//最右上角||右上角有值;
if((row<0&&col>=N)||(data[row][col]!
=0)){
row+=2;
col--;
}
}
printArray(data);
}
privatestaticvoidprintArray(int[][]data){
//TODOAuto-generatedmethodstub
for(inti=0;ifor(intj=0;jSystem.out.print((data[i][j]<10?
"0"+data[i][j]:
data[i][j])+"");
}
System.out.println();
}
}
}
请输入一个奇数:
3
080106
030507
040902
请输入一个奇数:
5
1724010815
2305071416
0406132022
1012192103
1118250209
答案4:
publicclassOut{
/**
*@paramargs
*/
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
int[]arr=newint[]{1,2,3,4,5,6,7,8};
out(arr,8,3,0);
}
/**
*@paramarray:
表示一个存放数据的一维数组;
*@paramlength:
数组中元素的个数(共有多少人围成的圈);
*@paramtarget:
目标数(从1开始报,报到m的人出圈)
*@paramstart:
从数组中哪个元素开始的坐标(第一次时指定从哪一个人开始报数);
*注意:
数组起始下标从0开始。
*/
privatestaticvoidout(intarray[],intlength,inttarget,intstart){
if(length==0)
return;
intindex=(s