农行投行业务部:大家试试这个JAVA程序,我第一次能用在用就用不了了

来源:百度文库 编辑:杭州交通信息网 时间:2024/05/13 12:13:49
这是个出5组随机数的程序,我用了一次,什么都没动用第二次就不行了
大家试试,高手回答下这是为什么?

public class Suiji{
public static void main(String[] args) {
int[][] si=new int[5][6];
int i,j,m,n,l,k=0;
for(i=0;i<5;i++){
for(j=0;j<6;){
si[i][j]=(int)(48.0*Math.random()+1);
for(m=0;m<j-1;m++)
if(si[i][j]==si[i][m]) k++;
if(k==0) j++;
}
}
for(n=0;n<5;n++){
System.out.println("\n"+(n+1)+":");
for(l=0;l<6;l++)
System.out.print(si[n][l]+" ");
}

}
}

if(si[i][j]==si[i][m]) k++;
if(k==0) j++;

这两句形成了死循环,把第一句后面加上
if(si[i][j]==si[i][m]) k++; else k=0;
就行了~

搂主的意思是不是每组里面的数字还不相同?

如果不是这样
要不然这段代码
for(m=0;m<j;m++)
{
if(si[i][j]==si[i][m]){
k++;
}
}

if(k==0){
j++;
}

就没什么用了

直接

for(i=0;i<5;i++){
for(j=0;j<6;j++){
si[i][j]=(int)(48.0*Math.random()+1);
}
}
就可以了

如果非要实现不能有重复数字的功能那就这样写

public class Suiji{
public static void main(String [] args) {
int[][] si=new int[5][6];
int i,j,m,n,l,k=0;

for(i=0;i<5;i++){
java.util.ArrayList al = new java.util.ArrayList();

for(j=0;j<6;){
do{
si[i][j]=(int)(48.0*Math.random()+1);
}while( al.contains(si[i][j]) );

al.add(si[i][j]);
j++;
}

}

for(n=0;n<5;n++){
System.out.println("\n"+(n+1)+":");

for(l=0;l<6;l++)
{
System.out.print(si[n][l]+" ");
}
}
}
}

 
 
 
主要的问题是程序陷入死循环(原因是没有在每一次检测重复性之前让 k 归零)的可能性大。

另一个问题是这个循环条件:m<j-1;
这条件意味着每次检测重复性时都会忽略 si[ i ][ j - 1 ] 。

两个问题都已通过对 for(m=0;m<j-1;m++) 的修改解决了(加了注释那一行):

class Suiji{
    public static void main(String[] args) {
        int[][] si=new int[5][6];
        int i,j,m,n,l,k=0;
        for(i=0;i<5;i++){
            for(j=0;j<6;){
                si[i][j]=(int)(48.0*Math.random()+1);
                for(m=k=0;m<=j-1;m++)  // 加 "=k" 及把 "<" 改成 "<="
                    if(si[i][j]==si[i][m])
                        k++;
                if(k==0)
                    j++;
            }
        }
        for(n=0;n<5;n++){
            System.out.println("\n"+(n+1)+":");
            for(l=0;l<6;l++)
                System.out.print(si[n][l]+" ");
        }
    }
}

如果不一定要保存在数组里,而仅仅想打印出那 5 组随机数的话,可以这样表达:

import java.util.*;

class Random {
    public static void main( String[ ] args ) {
        for ( int row = 1; row <= 5; row++ ) {
            Set set = new HashSet( );  // 利用 Set 不保存重复元素的特性
            while ( set.size( ) < 6 )
                set.add( new Integer( ( int ) ( 48 * Math.random( ) + 1 ) ) );
            System.out.println( "\n" + row + ":" );
            System.out.print( set ); // 容器内容的打印极端方便
        }
    }
}