彩票程序陷入死循环
Lottery program is stuck in an infinite loop
我正在创建一个彩票程序,我使用了我创建的一组 class 而不是 java 组。
这是我的套装class;它具有 Java set
的基本功能
import java.util.*;
public class mySet<T>
{
private Set<T> yourSet=new HashSet<T>();
T number;
mySet()
{
}
private mySet(Set<T> yourSet)
{
this.yourSet=yourSet;
}
public void print()
{
if(isEmpty())
System.out.println("Your set is empty");
else
System.out.println(yourSet);
}
//public
public void addToSet(T number)
{
this.number=number;
yourSet.add(number);
}
public boolean isEmpty()
{
return (yourSet==null);
}
public int getCardinality()
{
int size=0;
size=yourSet.size();
return(size);
}
public void clear()
{
yourSet.clear();
}
public boolean isInSet(int value)
{
if(isEmpty())
{
System.out.println("The set is empty");
}
else
{
yourSet.contains(value);
return true;
}
return false;
}
public mySet <T>intersection(mySet<T> setb)
{
Set<T> newSet=new HashSet<>(yourSet);
newSet.retainAll(setb.yourSet);
return new mySet<>(newSet);
}
}
这是获取并验证用户输入的程序
public mySet userLottery(mySet userStore){
for (int x=0;x<6;x++)
{
int user=getUser("Please enter your lottery number : ");
if(userStore.isInSet(user) )// checks if the number entered by the user have been entered before
{
x--;
System.out.println("No duplicates are allowed");
continue;
}
else if (user>=LOTTERY_MAX )// checks if the user entered a number that is higher than the Lottery max
{
x--;
System.out.println("The value you entered must be lower than the limit "+"("+LOTTERY_MAX+")");
continue;
}
else if (user<1 )//prevents the user from entering a number less than 1
{
x--;
System.out.println("The value you entered must be greater than 0");
continue;
}
else
{
userStore.addToSet(user);// adds the users input to the Set if it meets all conditions
}
}
System.out.println("this is the users input : "+userStore);//prints out the users input
return userStore;
}
LOTTERY_MAX
为开奖号码的最大范围,用户选择范围。
当我 运行 程序和输入数字时,它打印出不允许重复的内容,并且不知何故陷入了无限循环。我尝试从一开始就清除设置,但同样的问题仍然存在。当我删除 if 语句时,程序 运行s 按预期运行,但是没有任何东西可以验证用户的输入。该程序的目的是将用户输入放入一个集合中,然后将其与一组计算机生成的数字进行交叉检查。
public boolean isEmpty()
{
return (yourSet==null);
}
这不是您检查集合是否为空的方式。这就是您想要的方式:
public boolean isEmpty()
{
return (yourSet==null || yourSet.isEmpty());
}
编辑:我不明白你为什么要包装 HashSet
而不是直接使用它。如果你这样做,你会避免很多问题。那些 类 存在是有原因的。学会正确使用它们。
我正在创建一个彩票程序,我使用了我创建的一组 class 而不是 java 组。
这是我的套装class;它具有 Java set
的基本功能import java.util.*;
public class mySet<T>
{
private Set<T> yourSet=new HashSet<T>();
T number;
mySet()
{
}
private mySet(Set<T> yourSet)
{
this.yourSet=yourSet;
}
public void print()
{
if(isEmpty())
System.out.println("Your set is empty");
else
System.out.println(yourSet);
}
//public
public void addToSet(T number)
{
this.number=number;
yourSet.add(number);
}
public boolean isEmpty()
{
return (yourSet==null);
}
public int getCardinality()
{
int size=0;
size=yourSet.size();
return(size);
}
public void clear()
{
yourSet.clear();
}
public boolean isInSet(int value)
{
if(isEmpty())
{
System.out.println("The set is empty");
}
else
{
yourSet.contains(value);
return true;
}
return false;
}
public mySet <T>intersection(mySet<T> setb)
{
Set<T> newSet=new HashSet<>(yourSet);
newSet.retainAll(setb.yourSet);
return new mySet<>(newSet);
}
}
这是获取并验证用户输入的程序
public mySet userLottery(mySet userStore){
for (int x=0;x<6;x++)
{
int user=getUser("Please enter your lottery number : ");
if(userStore.isInSet(user) )// checks if the number entered by the user have been entered before
{
x--;
System.out.println("No duplicates are allowed");
continue;
}
else if (user>=LOTTERY_MAX )// checks if the user entered a number that is higher than the Lottery max
{
x--;
System.out.println("The value you entered must be lower than the limit "+"("+LOTTERY_MAX+")");
continue;
}
else if (user<1 )//prevents the user from entering a number less than 1
{
x--;
System.out.println("The value you entered must be greater than 0");
continue;
}
else
{
userStore.addToSet(user);// adds the users input to the Set if it meets all conditions
}
}
System.out.println("this is the users input : "+userStore);//prints out the users input
return userStore;
}
LOTTERY_MAX
为开奖号码的最大范围,用户选择范围。
当我 运行 程序和输入数字时,它打印出不允许重复的内容,并且不知何故陷入了无限循环。我尝试从一开始就清除设置,但同样的问题仍然存在。当我删除 if 语句时,程序 运行s 按预期运行,但是没有任何东西可以验证用户的输入。该程序的目的是将用户输入放入一个集合中,然后将其与一组计算机生成的数字进行交叉检查。
public boolean isEmpty()
{
return (yourSet==null);
}
这不是您检查集合是否为空的方式。这就是您想要的方式:
public boolean isEmpty()
{
return (yourSet==null || yourSet.isEmpty());
}
编辑:我不明白你为什么要包装 HashSet
而不是直接使用它。如果你这样做,你会避免很多问题。那些 类 存在是有原因的。学会正确使用它们。