这个必须要用线程的同步才可以做,打印星星不能再无条件的打印了
import java.util.concurrent.Phaserpublic class StarPhaserDemo {
public static void main(String args[]) {
NewlinePhaser phsr = new NewlinePhaser(4,4)
new StarThread(phsr)
new StarThread(phsr)
new StarThread(phsr)
new StarThread(phsr)
}
}
class NewlinePhaser extends Phaser {
private static int firstLineStartNum=4
int numPhases
int starNum=0
public NewlinePhaser(int numParties, int phases) {
super(numParties)
numPhases = phases
this.starNum=firstLineStartNum
}
public boolean onAdvance(int phase, int numParties) {
System.out.println() // print a newline
this.starNum=firstLineStartNum-phase-1
return phase == numPhases - 1 // stop after numPhases
}
public synchronized boolean canPrintStart(){
this.starNum--
return this.starNum>=0
}
}
class StarThread implements Runnable {
NewlinePhaser phsr
StarThread(NewlinePhaser p) {
phsr = p
new Thread(this).start()
}
public void run() {
while (!phsr.isTerminated()) {
if(phsr.canPrintStart()){
System.out.print('*')
}
phsr.arriveAndAwaitAdvance()
}
}
}
修改成Java后的代码:
public class Demo {public static int gcd(int a, int b, int c) {
int min, i
if(a > b) {
if(b > c) {
min = c
} else {
min = b
}
} else {
if(a > c) {
min = c
} else {
min = a
}
}
if(b > c) {
if(c > a) {
min = a
} else {
min = c
}
} else {
if(b > a) {
min = a
} else {
min = b
}
}
if(a > c) {
if(c > b) {
min = b
} else {
min = c
}
} else {
if(a > b) {
min = b
} else {
min = a
}
}
for(i=min i>=1 i--) {
if(a%i==0 && b%i==0 && c%i==0) {
break
}
}
return i
}
public static void main(String[] args) {
int a = 1, b = 0, c = 0, i, k = 0, j = 0, m = 0, n = 0, z, y
while(a < 9) {
b = 1
while(b < 9) {
c = 1
while(c < 9) {
if(gcd(a,b,c) == 1) {
System.out.println(a + "" + b + "" + c)
k++
z = b*b - 4*a*c
if(z == 0) {
j++
} else if(z > 0) {
m++
for (y=1 y<z/2 y++) {
if (y*y==z) {
System.out.println("解答是有理数。")
}
}
} else {
n++
}
}
c++
}
b++
}
a++
}
System.out.println("N = " + k)
System.out.println("N2 = " + j)
System.out.println("N3 = " + m)
System.out.println("N4 = " + n)
i = gcd(a, b, c)
}
}
我的电脑点右键,选择“属性”,选择“高级”标签,进入环境变量设置,分别设置如下三个环境变量:设置JAVA_HOME:一是为了方便引用,比如,JDK安装在C:\jdk1.6.0目录里,则设置JAVA_HOME为该目录路径, 那么以后要使用这个路径的时候, 只需输入%JAVA_HOME%即可, 避免每次引用都输入很长的路径串二则是归一原则, 当JDK路径改变的时候, 仅需更改JAVA_HOME的变量值即可, 否则,就要更改任何用绝对路径引用JDK目录的文档, 要是万一没有改全, 某个程序找不到JDK, 后果是可想而知的----系统崩溃!三则是第三方软件会引用约定好的JAVA_HOME变量, 不然, 你不能正常使用该软件.在系统环境变量那一栏中点->新建JAVA_HOME (JAVA_HOME指向的是JDK的安装路径)变量名: JAVA_HOME变量值: C:\jdk1.6.0 (1)设置好path变量,使得我们能够在系统中的任何地方运行java应用程序,比如javac、java、javah等等,这就要找到我们安装JDK的目录,假设我们的JDK安装在C:\jdk1.6.0目录下,那么在C: \jdk1.6.0\bin目录下就是我们常用的java应用程序,我们就需要把C:\jdk1.6.0\bin这个目录加到path环境变量里面。在系统变量里找到path变量,选择->编辑;(里面已经有很多的变量值,是在变量值的最前面加上C:\jdk1.6.0\bin如果没有 就新建一个 但是 一般都会有的)变量名: path变量值: C:\jdk1.6.0\bin或 %JAVA_HOME%\bin(2)classpath环境变量,是当我们在开发java程序时需要引用别人写好的类时,要让java解释器知道到哪里去找这个类。通常,sun为我们提供了一些额外的丰富的类包,一个是dt.jar,一个是tools.jar,这两个jar包都位于C:\jdk1.6.0\lib目录下,所以通常我们都会把这两个jar包加到我们的classpath环境变量中set classpath=.C:\jdk1.6.0\lib\tools.jarC:\jdk1.6.0\lib\dt.jar。在系统环境变量那一栏中点->新建classpath变量名: classpath变量值: .C:\jdk1.6.0\lib\tools.jarC:\jdk1.6.0\lib\dt.jar或 .%JAVA_HOME%\lib\tools.jar%JAVA_HOME%\lib\dt.jar(注意,CLASSPATH 中最前面是有个 “.”的,表示当前目录,这样当我们运行java AClass的时候,系统就会先在当前目录寻找AClass文件了。)