确定集合中的元素编号:处理 null 和零元素
Determine element number in a set : handling null and zero element
我有一套简单的class。在class中,我有一些方法,例如:添加元素,计算集合大小等。代码如下:
import java.util.HashSet;
import java.util.Set;
public class MySet {
public int numOfElem;
public int totalNum;
public int[] arraySet=new int[100];;
Set<Integer> set=new HashSet<Integer>();
public MySet()
{
numOfElem=0;
totalNum=0;
//int[] arraySet=new int[100];
}
public void makeSet()
{
for(int i:arraySet)
set.add(i);
}
public int size()
{
makeSet();
numOfElem=set.size();
return numOfElem-1;
}
public boolean isEmpty()
{
if(numOfElem==0)
return true;
else
return false;
}
public void clear()
{
int[] arraySet=new int[100];
numOfElem=0;
totalNum=0;
}
public boolean contains(int n)
{
boolean isContains=false;
for(int i=0;i<totalNum;i++)
{
if(arraySet[i]==n)
isContains=true;
}
return isContains;
}
public void add(int n)
{
arraySet[totalNum]=n;
makeSet();
totalNum++;
}
public String toString()
{
String str="";
for(int i=0;i<totalNum;i++)
str= str+arraySet[i]+" ";
return str;
}
public static void main(String[] args) {
MySet simpleSet =new MySet();
simpleSet.add(1);
System.out.println(simpleSet.set);
System.out.println(simpleSet.size());
System.out.println("Hello there!");
}
}
我的问题是
(1) 当我在集合中添加“1”时,集合会说我在集合中有[0,1],这很容易理解,因为当我初始化数组时,array[0- 99] 是 0。但是我怎样才能避免在这里输出 0?
(2)如果我用if语句来避免输出0,那是不明智的。因为如果我必须在集合中输入'0'怎么办,请问如何分析这道题?
您的 makeSet()
方法应该只添加不超过 totalNum
的项目,而不是整个 arraySet
数组。我还会更改 add()
中的执行顺序以避免潜在的不良行为:
public void add(int n)
{
arraySet[totalNum]=n;
totalNum++;
makeSet();
}
public void makeSet()
{
for(int i=0;i<totalNum;i++)
set.add(arraySet[i]);
}
请注意,这仅解决了您询问的问题,代码中还有许多其他问题。
另一种选择是使用 Integer 对象数组而不是 int,因为这样集合中每个元素的默认值为 null,因此您可以只检查 null,如下所示:
import java.util.HashSet;
import java.util.Set;
public class MySet {
public int numOfElem;
public int totalNum;
public Integer[] arraySet = new Integer[100];
;
Set<Integer> set = new HashSet<Integer>();
public MySet() {
numOfElem = 0;
totalNum = 0;
//int[] arraySet=new int[100];
}
public void makeSet() {
for(Integer i : arraySet) {
if(i != null) {
set.add(i);
}
}
}
public int size() {
makeSet();
numOfElem = set.size();
return numOfElem - 1;
}
public boolean isEmpty() {
if(numOfElem == 0)
return true;
else
return false;
}
public void clear() {
arraySet = new Integer[100];
numOfElem = 0;
totalNum = 0;
}
public boolean contains(int n) {
boolean isContains = false;
for(int i = 0; i < totalNum; i++) {
if(arraySet[i] == n)
isContains = true;
}
return isContains;
}
public void add(int n) {
arraySet[totalNum] = n;
makeSet();
totalNum++;
}
public static void main(String[] args) {
MySet simpleSet = new MySet();
simpleSet.add(1);
simpleSet.add(0);
System.out.println(simpleSet.set);
System.out.println(simpleSet.size());
System.out.println("Hello there!");
}
}
但是您可能不知道的是,一个 Set 不能存储两个相同的元素,所以如果您要将数字 1 加两次,您将只会在输出中得到它一次
我有一套简单的class。在class中,我有一些方法,例如:添加元素,计算集合大小等。代码如下:
import java.util.HashSet;
import java.util.Set;
public class MySet {
public int numOfElem;
public int totalNum;
public int[] arraySet=new int[100];;
Set<Integer> set=new HashSet<Integer>();
public MySet()
{
numOfElem=0;
totalNum=0;
//int[] arraySet=new int[100];
}
public void makeSet()
{
for(int i:arraySet)
set.add(i);
}
public int size()
{
makeSet();
numOfElem=set.size();
return numOfElem-1;
}
public boolean isEmpty()
{
if(numOfElem==0)
return true;
else
return false;
}
public void clear()
{
int[] arraySet=new int[100];
numOfElem=0;
totalNum=0;
}
public boolean contains(int n)
{
boolean isContains=false;
for(int i=0;i<totalNum;i++)
{
if(arraySet[i]==n)
isContains=true;
}
return isContains;
}
public void add(int n)
{
arraySet[totalNum]=n;
makeSet();
totalNum++;
}
public String toString()
{
String str="";
for(int i=0;i<totalNum;i++)
str= str+arraySet[i]+" ";
return str;
}
public static void main(String[] args) {
MySet simpleSet =new MySet();
simpleSet.add(1);
System.out.println(simpleSet.set);
System.out.println(simpleSet.size());
System.out.println("Hello there!");
}
}
我的问题是
(1) 当我在集合中添加“1”时,集合会说我在集合中有[0,1],这很容易理解,因为当我初始化数组时,array[0- 99] 是 0。但是我怎样才能避免在这里输出 0?
(2)如果我用if语句来避免输出0,那是不明智的。因为如果我必须在集合中输入'0'怎么办,请问如何分析这道题?
您的 makeSet()
方法应该只添加不超过 totalNum
的项目,而不是整个 arraySet
数组。我还会更改 add()
中的执行顺序以避免潜在的不良行为:
public void add(int n)
{
arraySet[totalNum]=n;
totalNum++;
makeSet();
}
public void makeSet()
{
for(int i=0;i<totalNum;i++)
set.add(arraySet[i]);
}
请注意,这仅解决了您询问的问题,代码中还有许多其他问题。
另一种选择是使用 Integer 对象数组而不是 int,因为这样集合中每个元素的默认值为 null,因此您可以只检查 null,如下所示:
import java.util.HashSet;
import java.util.Set;
public class MySet {
public int numOfElem;
public int totalNum;
public Integer[] arraySet = new Integer[100];
;
Set<Integer> set = new HashSet<Integer>();
public MySet() {
numOfElem = 0;
totalNum = 0;
//int[] arraySet=new int[100];
}
public void makeSet() {
for(Integer i : arraySet) {
if(i != null) {
set.add(i);
}
}
}
public int size() {
makeSet();
numOfElem = set.size();
return numOfElem - 1;
}
public boolean isEmpty() {
if(numOfElem == 0)
return true;
else
return false;
}
public void clear() {
arraySet = new Integer[100];
numOfElem = 0;
totalNum = 0;
}
public boolean contains(int n) {
boolean isContains = false;
for(int i = 0; i < totalNum; i++) {
if(arraySet[i] == n)
isContains = true;
}
return isContains;
}
public void add(int n) {
arraySet[totalNum] = n;
makeSet();
totalNum++;
}
public static void main(String[] args) {
MySet simpleSet = new MySet();
simpleSet.add(1);
simpleSet.add(0);
System.out.println(simpleSet.set);
System.out.println(simpleSet.size());
System.out.println("Hello there!");
}
}
但是您可能不知道的是,一个 Set 不能存储两个相同的元素,所以如果您要将数字 1 加两次,您将只会在输出中得到它一次