比如人出了石头,电脑出了剪子,则显示人赢了,否则显示电脑赢了,或者平局。比赛次数至少为5次,将每一局的游戏结果写入result.txt文件
写了一下,结果输出到桌面上,你把文件输出路径改成你的桌面路径就可以了,不知道你要不要最终结果
代码:
package com.hmall;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.Scanner;
/**
* @ClassName Mora
* @Description TODO
* @Author dell
* @Date 2019/7/1 13:03
* @Version 1.0
**/
public class Mora {
private static String calculate(String input) {
List<String> list = new ArrayList<>();
list.add("拳头");
list.add("剪刀");
list.add("布");
Random r = new Random();
Integer random = r.nextInt(3);
String temp = list.get(random);
if (temp.equals(input)) {
return "您出了" + input + ",电脑出了" + temp + ",结果为平局";
} else {
if (input.equals("拳头")) {
if (temp.equals("剪刀")) {
return "您出了" + input + ",电脑出了" + temp + ",结果为您赢了";
} else {
return "您出了" + input + ",电脑出了" + temp + ",结果为您输了";
}
} else if (input.equals("剪刀")) {
if (temp.equals("拳头")) {
return "您出了" + input + ",电脑出了" + temp + ",结果为您输了";
} else {
return "您出了" + input + ",电脑出了" + temp + ",结果为您赢了";
}
} else if (input.equals("布")) {
if (temp.equals("拳头")) {
return "您出了" + input + ",电脑出了" + temp + ",结果为您赢了";
} else {
return "您出了" + input + ",电脑出了" + temp + ",结果为您输了";
}
} else {
return "输入数据有误";
}
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
Integer count;
while (true) {
System.out.println("请输入比赛场次(不能小于5):");
count = scanner.nextInt();
if (count >= 5) {
System.out.println("比赛开始");
break;
}
System.out.println("输入小于5,请重新输入");
}
String input;
File f = new File("C:\\Users\\dell\\Desktop\\result.txt");
try {
BufferedWriter bw = new BufferedWriter(new FileWriter(f));
for (int i = 0; i < count; i++) {
System.out.println("请输入您的选择:");
input = scanner.next();
String result = calculate(input);
bw.write(result);
bw.newLine();
System.out.println(result);
}
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
结果:
追问大佬这么还会这样,,而且我桌面建了result也没记录下来
1.你用的是eclipse?编码改成utf-8了吗?
2.你不需要建result,程序自己创建的,所有比赛比完后就有记录了
没事了全部正常了嘿嘿嘿
追问package com.views;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
/**
*
* @author zmy
*
*/
public class Test {
private BufferedWriter bw;
private BufferedReader br;
private String filePath = "result.txt";
public Test() throws FileNotFoundException, IOException {
br = new BufferedReader(new InputStreamReader(System.in));// 输入
bw = new BufferedWriter(
new OutputStreamWriter(new FileOutputStream(new File("").getCanonicalPath() + "\\" + filePath)));// 输出写入文本,文件位置为当前程序的根目录
}
public void start() throws IOException {
String hand = "";
for (int count = 1; count <= 5; count++) {
System.out.println("第" + count + "局游戏开始,共五局\n请输入剪刀、石头、布");
hand = br.readLine();
if ("石头".equals(hand) || "剪刀".equals(hand) || "布".equals(hand)) {
System.out.println("您出的为:" + hand);
System.out.println(jduge(hand, count));
} else {
System.out.println("请输入剪刀、石头、布");
count--;
}
}
System.out.println("游戏结束!游戏结果详情请查看" + new File("").getCanonicalPath().toString() + "\\" + filePath);
br.close();
bw.close();
}
/**
* 游戏判定
*
* @param hand
* @param count
* @return
* @throws IOException
*/
private String jduge(String hand, int count) throws IOException {
String cpu = cpu();
if (hand.equals("剪刀") && cpu.equals("石头")) {
bw.write("第" + count + "局,CPU:" + cpu + "\t玩家:" + hand + "\tCPU获胜\r\n");// 这里的\r\n为单斜杠,复制的时候可能变成双斜杠,改为单斜杠
return "CPU获胜";
} else if (hand.equals("剪刀") && cpu.equals("布")) {
bw.write("第" + count + "局,CPU:" + cpu + "\t玩家:" + hand + "\t玩家获胜\r\n");
return "恭喜您获胜";
} else if (hand.equals("石头") && cpu.equals("布")) {
bw.write("第" + count + "局,CPU:" + cpu + "\t玩家:" + hand + "\tCPU获胜\r\n");
return "CPU获胜";
} else if (hand.equals("石头") && cpu.equals("剪刀")) {
bw.write("第" + count + "局,CPU:" + cpu + "\t玩家:" + hand + "\t玩家获胜\r\n");
return "恭喜您获胜";
} else if (hand.equals("布") && cpu.equals("剪刀")) {
bw.write("第" + count + "局,CPU:" + cpu + "\t玩家:" + hand + "\tCPU获胜\r\n");
return "CPU获胜";
} else if (hand.equals("布") && cpu.equals("石头")) {
bw.write("第" + count + "局,CPU:" + cpu + "\t玩家:" + hand + "\t玩家获胜\r\n");
return "恭喜您获胜";
} else {
bw.write("第" + count + "局,CPU:" + cpu + "\t玩家:" + hand + "\t平局\r\n");
return "平局";
}
}
/**
* 电脑随机出拳
*
* @return
*/
private String cpu() {
String cpu = "";
int x = 1 + (int) (Math.random() * 3);
switch (x) {
case 1:
cpu = "剪刀";
break;
case 2:
cpu = "石头";
break;
case 3:
cpu = "布";
break;
}
return cpu;
}
public static void main(String[] args) {
try {
new Test().start();// 游戏开始
} catch (IOException e) {
e.printStackTrace();
}
}
}
码字不易,望采纳
你接着输入就行了,回车,程序没停止运行就可以的
还有这是eclipse控制台的原因,你是中文输入法状态下,需要鼠标点到最后一行输入,不然会卡掉,就是你图中“您出的为:石头”变成绿色了,正常时黑色的
那我把中文字符全改字母行吧
追答正常的输入eclipse会为你跳到最后一行(图一)
但是当你的输入法状态时中文的时候,就是你能直接打中文的时候,如果不用鼠标点到最后一行,它就会在光标的位置输入,程序就不能正常接收,比如这样(图二)
就是你每次输入的时候,英文状态下会自动跳到最后不用操作,如果时中文状态下,请用鼠标点到最后一行在输入,输入法,输入法,输入法,输入法,输入法,输入法重要的多说几遍
这个eclipse bug已经存在几个世纪了
但是你这个结果不会在txt文件里输出
追答游戏结束会提示文件路径(图二)
程序结束了么?你这是一点基础都没有啊,代码里不是已经写了输出流么,程序运行完就有了。好好学,不然头发白掉了
再代码有注释写的很清楚了,文件位置自动获取的不用自己改,一定要程序运行完,一定要程序运行完,一定要程序运行完,还有一点,程序不要在C盘,经常涉及到IO流的话,在C盘没有权限,文件也无法更改,比如日志之类的
我想要完整的代码能写一下吗