大二学生做的简单程序,遇到的难题,解答
package just;
import java.util.Scanner;
class G{
static int re=-1;
public void G(){
int n=(int)(Math.random()*10000);
int n1=n/1000,n2=n/100%10,n3=n/10%10,n4=n%10;
while(n1==n2||n1==n3||n1==n4||n2==n3||n2==n4||n3==n4){
n=(int)(Math.random()*10000);
}
System.out.println("Start The Game");
int se=1,gn;
while(se!=0){
Scanner build=new Scanner(System.in);
System.out.println("请输入你猜测的四位数");
gn=build.nextInt();
while(gn<1000||gn>9999){
System.out.println("输入错误,请重新输入1个4位数:");
gn=build.nextInt();
}
int g1=gn/1000,g2=gn/100%10,g3=gn/10%10,g4=gn%10;
int b=0,a=0;
while(g1==g2||g1==g3||g1==g4||g2==g3||g2==g4||g3==g4){
System.out.println("有重复数字,请重新输入:");
gn=build.nextInt();
g1=(gn/1000);g2=(gn/100%10);g3=(gn/10%10);g4=(gn%10);
}
if(g1==n1){
a++;
}else if(g1==n2||g1==g3||g1==g4){
b++;
}
if(g2==n2){
a++;
}else if(g2==n1||g2==n3||g2==n4){
b++;
}
if(g3==n3){
a++;
}else if(g3==n1||g3==n2||g3==n4){
b++;
}
if(g4==n4){
a++;
}else if(g4==n2||g4==n3||g4==n4){
b++;
}
if(a==4){
System.out.println("锣鼓喧天,鞭炮齐鸣 您猜对啦!!!");
System.out.println("是否继续游戏(退出请输入0)");
re=build.nextInt();
if(re==0&&re!=-1){
break;
}else{
new G();
G.re=-1;
}
}
else
{
System.out.println(a+"A"+b+"B");
System.out.println("是否继续游戏(退出请输入0)");
se=build.nextInt();
}
}
}
}
public class guess {
public static void main(String[] args) {
G g=new G();
g.G();
}
}
解决上面截图中,在输入时同样的四个数只是位置不同,但是却出现结果的偏差的问题
import java.util.Scanner;
class G{
static int re=-1;
public void G(){
int n=(int)(Math.random()*10000);
int n1=n/1000,n2=n/100%10,n3=n/10%10,n4=n%10;
while(n1==n2||n1==n3||n1==n4||n2==n3||n2==n4||n3==n4){
n=(int)(Math.random()*10000);
n1=n/1000;
n2=n/100%10;
n3=n/10%10;
n4=n%10;
}
System.out.println("Start The Game");
int se=1,gn;
while(se!=0){
Scanner build=new Scanner(System.in);
System.out.println("请输入你猜测的四位数");
gn=build.nextInt();
while(gn<1000||gn>9999){
System.out.println("输入错误,请重新输入1个4位数:");
gn=build.nextInt();
}
int g1=gn/1000,g2=gn/100%10,g3=gn/10%10,g4=gn%10;
int b=0,a=0;
while(g1==g2||g1==g3||g1==g4||g2==g3||g2==g4||g3==g4){
System.out.println("有重复数字,请重新输入:");
gn=build.nextInt();
g1=(gn/1000);g2=(gn/100%10);g3=(gn/10%10);g4=(gn%10);
}
System.out.println(g1+" "+g2+" "+g3+" "+g4);
if(g1==n1){
a++;
}else if(g1==n2||g1==g3||g1==g4){
b++;
}
if(g2==n2){
a++;
}else if(g2==n1||g2==n3||g2==n4){
b++;
}
if(g3==n3){
a++;
}else if(g3==n1||g3==n2||g3==n4){
b++;
}
if(g4==n4){
a++;
}else if(g4==n2||g4==n3||g4==n1){
b++;
}
if(a==4){
System.out.println("锣鼓喧天,鞭炮齐鸣 您猜对啦!!!");
System.out.println("是否继续游戏(退出请输入0)");
re=build.nextInt();
if(re==0&&re!=-1){
break;
}else{
new G();
G.re=-1;
}
}
else
{
System.out.println(a+"A"+b+"B");
System.out.println("是否继续游戏(退出请输入0)");
se=build.nextInt();
}
}
}
}
public class guess {
public static void main(String[] args) {
G g=new G();
g.G();
}
}
建议去熟悉一下阿里的代码规范。你这代码看不进去。
首先建议类分文件创,每个类只干一件或一类与它的名字匹配的事情。
然后获取随机数,可以使用Math库来获取,也可以使用System类获取当前系统的毫秒数求余来生成。
其实还有一种思路,你这个限制了数的范围是一个四位数,那么可以将这些四位数用循环存入一个List中,
再调用Collections类的静态方法suffer打乱,然后出第一个。
其实整体只需要分为这样几步:
第一步:生成一个随机数
第二步:开启循环,接收用户输入
第三步:检查输入的有效性
第四步:判断两值是否相等的具体实现
第五步:根据是否相等选择提示或者结束循环
第六步:重写开始或结束游戏的业务实现。
有了这样的模板,你很容易构建一个抽象父类。在抽象父类中写下这六个方法。
对于一些可以去掉的业务,例如:
检查输入有效性,提示等,可以再次分离出来,做成接口。
在抽象父类中完成基本的功能。
然后在直接的子类中进行基础,实现具体的业务。
卧槽 你这代码都没缩进啥的看的很难受 你如果用ij的话按alt+ctrl+L格式化下代码 还有你这详细的要求得讲下 要不然都不知道你要干啥 给的什么0A2B都不知道是什么意思