A类每0-2秒生成-100到100之间的随机整数。B类让一个计数器在A类生成负数的时候自减,并且在生成正数的时候自增。B类的计数器必须与A类同时实时更新。
把3种情况分别写出来:1,A与B在同一线程内;2,不同线程;3,不同进程
程序如下:
package practice2;
public class Practice2 {
/**
* @param args
* @throws InterruptedException
*/
/*
* 类每0-2秒生成-100到100之间的随机整数。B类让一个计数器在A类生成负数的时候自减,
* 并且在生成正数的时候自增。B类的计数器必须与A类同时实时更新。 把3种情况分别写出来:1,A与B在同一线程内;2,不同线程;3,不同进程
*/
//单线程版
public static void main(String[] args) throws InterruptedException {
// TODO Auto-generated method stub
C c = new C();
System.out.println("程序开始........");
new Thread(c).start();
}
}
class A {
private static int x;
public static void generateValue() {
// 生成-100到100之间的随机整数
int y;
y = (int) (Math.random() * 2 + 1);
if (y % 2 == 1)
x = (int) ((Math.random() * 100 + 1));
else
x = -(int) ((Math.random() * 100 + 1));
}
public static int getX() {
return x;
}
}
class B {
private static int sum;
public static void plus(int x) {
// 求和
sum = sum + x;
}
public static int getSum() {
return sum;
}
}
//
class C implements Runnable {
public void run() {
// TODO Auto-generated method stub
while (true) {
int x = (int) ((Math.random() * 2 + 1) * 1000);
try {
Thread.sleep(x);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("您产生的数字是:");
A.generateValue();
System.out.println(A.getX());
System.out.println("和是:");
B.plus(A.getX());
System.out.println(B.getSum());
}
}
}
多线程序
package practice2;
public class Practice2duo {
/**
* @param args
*/
/*
* 类每0-2秒生成-100到100之间的随机整数。B类让一个计数器在A类生成负数的时候自减,
* 并且在生成正数的时候自增。B类的计数器必须与A类同时实时更新。 把3种情况分别写出来:1,A与B在同一线程内;2,不同线程;3,不同进程
*/
//多线程版
public static void main(String[] args) {
// TODO Auto-generated method stub
CDuo c = new CDuo();
System.out.println("程序开始........");
new Thread(c).start();
new Thread(c).start();
}
}
class ADuo {
private static int x;
public static void generateValue() {
// 生成-100到100之间的随机整数
int y;
y = (int) (Math.random() * 2 + 1);
if (y % 2 == 1)
x = (int) ((Math.random() * 100 + 1));
else
x = -(int) ((Math.random() * 100 + 1));
}
public static int getX() {
return x;
}
}
class BDuo {
private static int sum;
public static void plus(int x) {
// 求和
sum = sum + x;
}
public static int getSum() {
return sum;
}
}
class CDuo implements Runnable {
public void run() {
String str = new String("");
// TODO Auto-generated method stub
while (true) {
synchronized (str) {
int x = (int) ((Math.random() * 2 + 1) * 1000);
try {
Thread.sleep(x);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("您产生的数字是:");
A.generateValue();
System.out.println(A.getX());
System.out.println("和是:");
B.plus(A.getX());
System.out.println(B.getSum());
}
}
}
}
分享到:
相关推荐
程序2 编程先由计算机“想”一个1~100之间的数请人猜,如果人猜对了,则结束游戏,并在屏幕上输出人猜了多少次才猜对此数,以此来反映猜数者“猜”的水平;否则计算机给出提示,告诉人所猜的数是太大还是太小,直到...
该程序通过`while`循环实现了1到100之间交替正负数的求和操作。 - 使用变量`a`作为计数器,`d`存储求和结果。 - 通过`switch`语句判断`a`是偶数还是奇数,从而决定是在`d`上加还是减当前值。 - 每次循环结束时,`a`...
- **解析**: `A=fix(100+101*rand(5,6))`表示生成一个5×6的矩阵,其中每个元素为[100,201)范围内的随机整数。 ### 16. 矩阵元素操作 - **知识点**: 可以使用矩阵运算符来对矩阵的元素进行统一操作。 - **解析**: `...
2. **随机数生成**:生成随机ID时,可以使用`Random`函数,它会根据系统时间生成一个伪随机数。例如,你可以这样生成16位随机ID: ```delphi var RandomID: Word; begin Randomize; RandomID := Random(65536)...
根据给定文件的信息,我们可以总结出以下几个主要的知识点: ### 1. 函数 `void fun(unsigned long *n)` 的解析 ...- 对于每一个新节点,随机生成一个介于 0 到 `m-1` 之间的数据值。 - 最后返回链表的头结点指针。
- 程序首先随机生成一个100以内的数作为目标。 - 用户进行猜测,程序根据猜测值与目标的关系提示“Too big”(大了)、“Too small”(小了)或“Bingo!”(猜对了)。 - 程序需要统计猜测次数,如果一次猜中,...
可以使用`Random`类生成1到100之间的随机数。 2. 初始化两个变量,分别作为当前最大值和最小值,初始值设为第一个生成的数。 3. 遍历剩余的9个数,与当前最大值和最小值比较,更新这两个变量。 4. 输出最大值和...
但是,这个程序有一个错误:初始时,max和min都被赋值为0,这可能导致错误的结果,特别是当数组中所有元素都是负数时。正确做法是初始化max为数组的第一个元素,min为数组的第二个元素。 2. **找完数**: 完数是指...
通过`Math.random()`函数可以生成0到1之间的随机浮点数,通过乘以特定数值并加上起始值可以得到指定范围内的随机数。在5.2题中,使用这种方法生成两个1到15之间的随机数,让用户进行加法运算。 7. **变量的使用**...
- **无符号整数**使用所有位来表示数值大小,范围从0到2^n-1。 - **带符号整数**采用二进制补码表示,最高位为符号位,0表示正数,1表示负数。 - **4.2 符号扩展** - 符号扩展是指将一个较短的整数扩展为较长的...
比如,100.0, 50.0, 10.0, 5.0, 1.0, 0.5, 0.1, 0.05, 0.01分别代表了不同的精度级别,通过减去这些数值来统计每个级别的计数器(a1到a9)。 4. 数组操作、随机数生成和数据统计: 第四个代码片段尝试生成一组...
- **A项**(dcebfa):合法,因为每退栈两次之后都会有一个进栈操作。 - **B项**(cbdaef):合法,同样遵循了进退栈交替且没有连续三次退栈的原则。 - **C项**(dbcaef):合法,满足所有条件。 - **D项**(afedcb...
11. 16位二进制可以表示的整数范围是-32768到32767或0到65535,取决于是否考虑负数和无符号数。 12. 控制键(CTRL)在键盘上常与其他键组合使用,实现特定功能。 13. 计算机执行一条指令所需的时间称为指令周期,是...
十进制转二进制:125 ÷ 2 = 62...1,62 ÷ 2 = 31...0,31 ÷ 2 = 15...1,15 ÷ 2 = 7...1,7 ÷ 2 = 3...1,3 ÷ 2 = 1...1,1 ÷ 2 = 0...1,所以(125)10 = (1111101)2。八进制转换是每三位二进制对应一位八...
128M*32位内存,若以字节编址,每个地址对应一个字节(8位),所以地址线数量为2^27=128M,因此需要27根地址线。 4. 存储容量与寻址范围:64KB的存储容量,若按字节编址,寻址范围是0到64KB-1,即0到2^16-1;若按字...
题目中给出了指令的二进制形式和执行前寄存器r0的值,要求计算执行后的PC(程序计数器)值,这涉及到指令解码和控制信号的生成。 4. **指令寻址方式**:常见的寻址方式包括立即寻址、直接寻址、间接寻址、相对寻址...
"guess-a-number" 是一个基于JavaScript的简单游戏项目,它涉及到基本的编程概念,如条件语句、循环、随机数生成以及用户交互。在这款游戏中,计算机将随机选择一个数字,然后玩家需要通过一系列尝试来猜出这个数字...
表示一个四位十进制整数至少需要14位二进制数,不含符号位。 9. **浮点数表示**: 在16位浮点数表示中,最大浮点数为2^(1-2^(-9)),最小浮点数为-2^(1-2^(-9))。 10. **ASCII码与校验码**: 字符"F"的ASCII码为...
32. **存储单元地址**:每个存储单元都有一个唯一的地址。 33. **动态DRAM**:需要定期刷新以保持数据。 34. **补码加法**:两个补码表示的数相加,其结果的补码等于这两个补码的和。 35. **算术移位**:有符号数...