作者IC2You (I love You)
看板java
标题[问题] 关於终极密码程式
时间Wed Mar 10 10:00:03 2010
/*
我是个初学者,所以不会的地方还很多,请各位高手多多指教,以下是我的写法:
*/
import java.io.*;
import java.util.Random;
public class test01 {
public static void main(String[] args) throws IOException {
int num, min, max;
max = 100;
min = 0;
Random ran = new Random();
int m = 100;
int temp = 0;
temp = ran.nextInt(m)+1;
System.out.println("temp = " + temp);
boolean find = false;
System.out.println("(1~100)");
System.out.print("→");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
num = Integer.parseInt(str);
//num = 输入的值
do{
int num2;
if (num<temp){
//输入的值若小於系统产生的随机数字
min = num;
System.out.print(num + "to" + max + ":");
System.out.print("→");
String str2 = br.readLine();
num2 = Integer.parseInt(str2);
num = num2;
find = false;
}
else if(num>temp){
//输入的值若大於系统产生的随机数字
max = num;
System.out.print(min + "to" + num + ":");
System.out.print("→");
String str2 = br.readLine();
num2 = Integer.parseInt(str2);
num = num2;
find = false;
}
else if(num == temp){
find = true;
break;
}
}while(find == false);
}
}
/*
我先让temp显示出来测试一下,等到都没问题之後再拿掉。
我写出来之後会出现一个问题..
temp = 31
(1~100)
→50
0to50:→25
Press any key to continue...
也就是说,当我进入do..while回圈之後,输入第二次的数字它就不会再跑do..while回圈
了...我要怎麽样才可以让它一直在do..while回圈内跑到num=temp才离开回圈呢?
*/
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.60.110.98
1F:推 jacky951:看起来像是少了个 " = " ....while(find == false)... 03/10 10:09
2F:→ IC2You:嗯嗯...我再试看看0.0 03/10 11:00
我已经改过程式了,但是它范围会扩展= =
执行结果:
temp = 39
(1~100)
→50
0to50:→20
20to50:→90
20to90:→10
10to90:→_
照理说...
当20to50时,我输入的num超过这个范围程式可能会出错,但它会自己扩展成20to90..囧
如果我要去判断num是否小於min或num是否大於max应该加在哪里好呢?
※ 编辑: IC2You 来自: 61.60.110.98 (03/10 11:25)
3F:→ ogamenewbie:你觉得你应该去跟 min max 比还是跟 temp 比? 03/10 11:32
4F:→ IC2You:跟min max吧...@@!? 因为我已经加上min = num; max = num; 03/10 11:56
5F:推 snowlike:所以输入任何非temp数字都可以成为min or max,何来比较 03/10 12:38
6F:→ ogamenewbie:那请把你的程式码用中文叙述一遍, 尤其是if (num<temp 03/10 12:47
7F:→ ogamenewbie:另外 snowlike 你哪位? 03/10 12:47
8F:→ snowlike:回应min=num;max=num;当作跟min max比的原po些意见敝姓石 03/10 13:00
9F:→ ogamenewbie:原来是这样阿, 石先生/小姐说的也有道理呢. (敲手) 03/10 13:07
https://www.youtube.com/watch?v=76TU_U4aAxw
如同影片所示,一开始我让程式随机抓一个数字,假设是33,游戏开始:(temp=33)
一开始最大值是100,最小值是0 (max = 100; min = 0;)
如果我猜50,那麽程式就就会帮我把范围缩小,33介於0到50之间 (num>temp)
那麽程式就会show出0to50,再继续跑这个回圈
直到猜到33(num=temp)为止...
但假设现在已经缩小范围为0to50了
但我又去猜非这个范围内的数字,比如说75
但程式会显示0to75
而我希望程式会以System.out.println告诉我超过范围并且要我重新输入
所以到底应该改哪里呢...
※ 编辑: IC2You 来自: 61.60.110.98 (03/10 13:41)
10F:→ jacky951:这个就要靠自己思考了...ˊAˋ 03/10 13:53
11F:→ CrazyHunter:你可以在进回圈一开始先设判断输入的值是否在范围内.. 03/10 14:13
12F:→ CrazyHunter:if(num <= min || num >= max) 来防止超出范围 03/10 14:15
13F:→ TonyQ:我觉得你就把人脑当compile+jvm 一行一行执行跟带入变数 03/10 14:41
14F:→ IC2You:嗯嗯 虽然逻辑上还算简单 但想了好久...总是解决不了...囧 03/10 14:44
15F:→ CrazyHunter:我寄了一份自己写的code,可以参考看看 03/10 14:47
16F:→ TonyQ:你没有进入那个思考流程而已啦,要多练习。只用想的不去操作 03/10 14:49