/*一个35选7的彩票模拟程序,输入一个数,用来确定要几组彩票,每组彩票内不能有相同的号码,运行时出现如下错误:
Test1.java:15: 非法字符: \12288
if(a[k]==a[i])break;*/
import javax.swing.JOptionPane;
public class Test1
{
public static void main(String [] args)
{
String str=JOptionPane.showInputDialog("请输入您要买的注数:");
int n=Integer.parseInt(str);
int[] a=new int[7];
for(int j=0;j<n;j++)
{
for(int i=0;i<7;)
{
a[i]=(int)(35*(Math.random())+1);
for(int k=0;k<i;k++)
if(a[k]==a[i])break;
System.out.print(a[i]+" ");
i++;
}
System.out.println(" ");
}
}
}
Test1.java:15: 非法字符: \12288
if(a[k]==a[i])break;*/
import javax.swing.JOptionPane;
public class Test1
{
public static void main(String [] args)
{
String str=JOptionPane.showInputDialog("请输入您要买的注数:");
int n=Integer.parseInt(str);
int[] a=new int[7];
for(int j=0;j<n;j++)
{
for(int i=0;i<7;)
{
a[i]=(int)(35*(Math.random())+1);
for(int k=0;k<i;k++)
if(a[k]==a[i])break;
System.out.print(a[i]+" ");
i++;
}
System.out.println(" ");
}
}
}
请教:Math.random()方法是用来输出0到1的随机数吗?
问题你也说对了,是if(a[k]==a[i])break; 前的空格有问题。
这程序能运行,但是输出的7个数还是有相等的可能,想问这个问题怎么解决。
谢谢。
错误原因:15行处if前面有前导非法空字符.
删除if前面的所有字符.运行通过.
public static void main(String [] args){
String str=JOptionPane.showInputDialog("Please input");
int n=Integer.parseInt(str);
int[] a=new int[7];
for(int j=0;j <n;j++){
for(int i=0;i <7;){
boolean sign=true;
a[i]=(int)(35*(Math.random())+1);
for(int k=0;k<i;k++)
if(a[k]==a[i]){
sign=false;
break;
}
if(sign){
System.out.print(a[i]+" ");
i++;
}
}
System.out.println(" ");
}
}
}
import javax.swing.JOptionPane;
public class Test1
{
public static void main(String [] args)
{
String str=JOptionPane.showInputDialog("Please input a number:");
int n=Integer.parseInt(str);
int[] a=new int[7];
for(int j=0;j <n;j++){
for(int i=0;i <7;i++){
a[i]=(int)(35*(Math.random())+1);
boolean bo=false;
for(int k=0;k <i;k++)
if(a[k]==a[i]){
bo=true;
break;
}
if(bo){
i--;
continue;
}
System.out.print(a[i]+" ");
}
System.out.println(" ");
}
}
}
public class Test
{
public static void main(String [] args)
{
String str=JOptionPane.showInputDialog("请输入您要买的注数:");
int n=Integer.parseInt(str);
int a[]=new int[7];
for(int k=1;k<=n;k++){
for(int i=0;i<7;i++)
{
a[i]=(int)(Math.random()*35+1);
for(int j=0;j<i;j++)
while(a[j]==a[i])
{
a[i]=(int)(Math.random()*35+1);
}
System.out.print(a[i]+"\t");
}
System.out.println();
}
}
}
public class Test
{
public static void main(String [] args)
{
String str=JOptionPane.showInputDialog("请输入您要买的注数:");
int n=Integer.parseInt(str);
int a[]=new int[7];
for(int k=1;k<=n;k++){
for(int i=0;i<7;i++)
{
a[i]=(int)(Math.random()*35+1);
for(int j=0;j<i;j++)//每次有一个i的时候,总让a[i]和他前面已经赋值了的a[j]不相等.
while(a[j]==a[i])//我们不知道要循环多少次才可以让a[j]!=a[i]只好用while让它做到a[j]!=a[i]为止.
{
a[i]=(int)(Math.random()*35+1);
}
System.out.print(a[i]+"\t");
}
System.out.println();
}
}
}
13楼的朋友思路跟我最近,不过感觉是没必要再多一个boolean变量的
14楼的朋友有一个i++,还有一个i--,搞得好复杂啊
15楼的朋友有四个循环,循环一多就麻烦啊。
我自己又想了一个办法,自认为可读与执行都还行,不知道你们能不能同意。
不好意思,发这个帖时没有散分,想再追加分,可我没有那么多了。import javax.swing.JOptionPane;
public class Exam10_1
{
public static void main(String [] args)
{
String str=JOptionPane.showInputDialog("请输入要投的注数:");
int n=Integer.parseInt(str);
int [] a=new int[7];
int k;
for(int j=0;j<n;j++)
{
for(int i=0;i<7; )
{
a[i]=(int)(35*Math.random()+1);
for(k=0;k<i;k++)
if(a[k]==a[i])break;
if(i==k)
i++;
}
for(int i=0;i<7;i++)
System.out.print(a[i]+" ");
System.out.println(" ");
}
}
}