大家好日子。 我不太确定如何在数组示例中检查相同的元素。 %java stuff 4 6 1 2 3 1 / *现在数组中有两个,它应该抽出“是的!相同!”* / 然而,我确实意识到我可以获取数组中的第一个值并使用for循环检查,然后依此类推。 我对语法还不太自信。 到目前为止,我已经尝试设置一个if case来检查它是否无法正常工作。任何人都可以这么善良,帮助我更好地了解我的项目吗? 附:我对这个问题的所有改进持开放态度。
public class seeIT
{
public static void main (String[] args)
{
int N = args.length;
int [] a = new int[N];
boolean flag = false;
for ( int i = 0; i < N; i++)
{
a[i] = Integer.parseInt(args[0]);
}
for(int i = 0; i < N; i++)
for(int j = i +1; j < N; j++)
{ if(a[i] == a[j])
{ flag = true;
} else
{
System.out.print("correct, there are no numbers that are the same here");}
}
}
}
答案 0 :(得分:1)
将元素添加到集合(HashSet),如果set.add在元素上返回false,则表示该元素重复。
答案 1 :(得分:1)
您的代码中存在一些缺陷:
这总是读取数组的第一个元素:a[i] = Integer.parseInt(args[0]);
,永远不会评估boolean
,并且变量N
是不必要的(并且在Java局部变量中应该以小写字母开头)。
我想,这就是你想要的:
int[] a = new int[args.length];
for (int i = 0; i < a.length; i++) {
a[i] = Integer.parseInt(args[i]);
}
for (int i = 0; i < a.length; i++) {
for (int j = i + 1; j < a.length; j++) {
if (a[i] == a[j]) {
System.out.print("same " + a[i]);
}
}
}
但更好的方法(如前所述)将使用HashSet。这样你甚至不必将字符串转换为int。只需使用==的equals()进行比较。代码更简单:
public static void main(String[] args) {
java.util.Set<String> dbl = new java.util.HashSet<String>();
for (int i = 0; i < args.length; i++) {
for (int j = i + 1; j < args.length; j++) {
if (args[i].equals(args[j])) {
dbl.add(args[i]);
}
}
}
System.out.print("" + dbl.size() + " figure(s) appear more than once.");
java.util.Iterator<String> it = dbl.iterator();
while (it.hasNext()) {
System.out.print(" " + it.next());
}
}
答案 2 :(得分:1)
HashSet
将成为用于解决此类问题的类,但是这样做并不会造成伤害#34;手动&#34;如果你正在学习。以下是对您的代码的一些评论:
a[i] = Integer.parseInt(args[0]);
我认为你的意思是
a[i] = Integer.parseInt(args[i]);
否则你会将args[0]
放在a
的每个位置。
if(a[i] == a[j]) {
flag = true;
} else {
System.out.print("correct, there are no numbers that are the same here");
}
您要过早打印结果 - 在您知道之前。此时你只知道两个特定元素是否相同(如果它们是你正确设置了标志),但你必须等到循环完成才知道整个数组中没有这样的元素。
答案 3 :(得分:1)
首先,我建议使用HashSet
,因为它会照顾所有重复检查。但是,由于你处于学习阶段,我宁愿坚持你的方法。
我建议将数组检查逻辑放在一个返回boolean
的单独方法中。这样,一旦找到重复的数字(true
立即退出方法),就可以返回return
,从而避免无用地迭代数组的其余部分。这也使您的代码可以重复使用。
这给出了以下代码。我还做了一些重新格式化以使代码更具可读性,并且我更正了一个错字,使您的代码重复将第一个参数添加到int
数组中。
public class SeeIT {
public static void main(String[] args) {
int n = args.length;
int[] a = new int[n];
boolean flag = false;
for (int i = 0; i < n; i++) {
a[i] = Integer.parseInt(args[i]);
}
boolean repeats = hasRepetitions(a);
if (repeats) {
System.out.println("There is at least one repeated number.");
} else {
System.out.println("correct, there are no numbers that are the same here");
}
}
private static boolean hasRepetitions(int[] a) {
int n = a.length;
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
if (a[i] == a[j]) {
return true;
}
}
}
return false;
}
}
我希望这会有所帮助......
干杯,
杰夫
答案 4 :(得分:0)
public class SeeIT {
public static void main(String[] args) {
int [] a = new int[]{1,2,5,4,3,7,2};
boolean flag = false;
for(int i = 0; i< a.length; i++){
for(int j = 0; j< a.length; j++){
if(a[j] == a[i]){
if(j != i) {
flag = true;
}
}
}
}
if(flag == true){
System.out.println("Duplicates");
}else{
System.out.println("not duplicate");
}
}
}
}
这个for循环应该可以解决问题。它是一个双重for循环,它在同一个数组中迭代。