目的:
生成随机整数(1-99)并使用numbers.dat文件(来自上一个实验室)确定生成的随机数是否在文件中。不要计算您找到随机数的次数,只输出它在文件中或不在文件中。
可能的伪代码:
第2部分。将第1部分中的所有代码放在for循环中,使第1部分运行3次。 湾输出 - 类似于以下输出:
The random number 35 is in the file.
The random number 10 is not in the file.
The random number 9 is in the file.
我的代码:
import java.util.*;
import java.io.*;
public class RandomNumberMatch {
public static void main(String[] args) throws Exception {
Scanner num = new Scanner (new File ("numbers.dat"));
Random ran = new Random();
while(num.hasNext()) {
int number = num.nextInt();
int x = ran.nextInt(100);;
if(number == x) {
System.out.println("The number " + x + " is in the file");
}
else {
System.out.println("The number " + x + " is not in the file");
}
}
}
}
输出:
The number 80 is not in the file
The number 52 is not in the file
The number 50 is not in the file
The number 76 is not in the file
The number 21 is in the file
The number 18 is not in the file
The number 40 is not in the file
(Cut short for summary purpose)
档案内容:
16 43 56 8 12 35 65 12 26 3 65 4 75 86 9 79 0 78 5 78 4 63 65 3 53 64 7 5 87 6 96 96 70 7 95 78 46 4 37 46 3 53 93 84 76 56 48 93 3 74 76 46 5 47 38 4 39 4 84 57 46 37 48 4 9 84 7 36 3 0 58 6 7 84 7 5 6 4 9 30 4 3 8 4 7 4 4 55 76 4 53 6 47 5 85 74 63 2 3 45 48 73 63 5 21 42 21 55 1
除了没有将输出嵌套在for循环中之外,我究竟做错了什么,这些数字中的大多数都在文件中。我试图将它与我创建的随机数匹配,如果它们相等,则将其输出到文件,然后继续指示该数字是否在文件中。任何帮助将不胜感激,我非常坚持这一点,我似乎无法弄明白!
答案 0 :(得分:2)
由于这似乎是一项学校作业,我不会给你答案的代码,但请考虑这些问题:
您需要确定整个文件中是否存在随机数。因此,如果将它与文件中的单个数字进行比较,您是否有足够的信息来制作“数字不在文件中”的明确声明?
如果您已找到要查找的号码,是否有必要继续循环浏览整个文件?
答案 1 :(得分:1)
O.k。我知道它是一个实验室 - 我有数百个 - 不幸的是,就像现实一样,它们往往没有很好的要求。通常不是因为他们不知道如何写出适当的要求而是为了。因此,我们首先要分析您的要求(目标):
生成随机整数(1-99)并使用numbers.dat文件(来自上一个实验室)确定生成的随机数是否在文件中。
我认为这是非常明确的做什么,并且有很多方法可以归档它(我的意思是没有人说在那句话中使用Java但cmon你可能在Java实验室:))。所以让我们继续,因为有更多的“客户”要求(我们想要满足我们的客户,因为否则他们不会给我们任何啤酒钱)。
不计算您找到随机数的次数,只输出它在文件中或不在文件中。
O.k。我们这里有第一期(第1期)。我们确实理解我们不会被计算 - 但是我们现在是否自动知道我们是否必须在第一次出现时只输出一次,或者是否有可能在文件中多次出现数字并且我们的客户希望每次输出occurence?
在实时强化中,这些细节是需求工程师的工作。 但是等等,还有更多!我们的客户知道伪代码这个词!他已经对解决方案如何在内部工作有了更详细的想法 - 但是我们必须对这个伪代码非常小心,因为我们不知道客户是否知道他在做什么(不幸的是,它通常不仅仅是我们的工作制作解决方案,但要了解它应该如何看待)。好吧,让我们继续:
可能(例如,COULD是一个解决方案()!!! 伪代码:
从1-99生成随机#声明并将布尔变量初始化为false
// your code
Random ran = new Random();
int x = ran.nextInt(100);
boolean hasNumber = false;
案例清楚,让我们继续:
循环直到文件结尾或匹配:
哦 - 我们有一个选择对我们公开的第1期有直接影响! (不好要求!)让我们称之为第2期并继续“匹配是什么”。
读取数字。比较数字。如果匹配,则设置Boolean var true如果Boolean为true,则找不到其他数字。
如果我必须知道数字被发现将布尔值设置为true以表示找到了数字我几乎不需要布尔“但这主要是因为我们不希望在第一场比赛中结束程序但是只是停止循环文件(并能够决定我们之后是否找到了什么东西)。
现在,而不是复制和粘贴代码,请参考用户@sto的答案,并注意在您将布尔值设置为true的位置,您可以添加返回值;离开循环的声明,因此会有更多的数字(你发现它) OR 你可以继续循环,因为问题2的要求不明确。
最重要的部分 一个重要的部分是,您希望指向正确的方向,而不是获得您可能不理解的完整解决方案。这就是软件开发人员的想法!
正如您在下面的评论中所看到的,这个答案都是关于要求的......它是快速的方式,因为它是一个学校作业?这是漫长的道路,因为它也可能吗?如果关注他们的前两位开发人员已经在做出假设并争论客户可能会想要什么,那么这些意见是否意味着明确而良好的要求?的 NO!强>
我的整个答案中最重要的一点是要指出有多么重要的要求,这些要求不会为假设留下空间(他们仍然会留下十亿种方式来确定你如何编写相应的解决方案技术水平)。因此,一旦你有一个不会让@me和用户@Zéychin争论意义的要求 - 你知道你有一个很好的要求和开始考虑解决方案的价值。
我希望我能给你一些比实验室2的解决方案更有价值的东西(我假设你已经修好了吗?)。
答案 2 :(得分:0)
好的,你正在做的只是根据文本文件中的一个数字检查随机数,然后你正在检查文本文件中下一个数字的新随机数。如果你将int x - ran ...移出循环它应该没问题,所以:
import java.util.*;
import java.io.*;
public class RandomNumberMatch
{
public static void main(String[] args) throws Exception
{
Scanner num = new Scanner (new File ("numbers.dat"));
Random ran = new Random();
int x = ran.nextInt(100);
int number;
boolean hasNumber = false;
while(num.hasNext())
{
number = num.nextInt();
if(number == x)
{
System.out.println("The number " + x + " is in the file");
hasNumber = true;
}
}
if(!hasNumber){
System.out.println("The number " + x + " is not in the file");
}
}
}