gpt4 book ai didi

java - 逐一扫描元素并进行比较

转载 作者:太空宇宙 更新时间:2023-11-04 09:17:33 25 4
gpt4 key购买 nike

我必须为我的编程课做一些作业。任务是将文本文档作为简短程序的输入,并删除所有重复的数字并将这些单个数字打印出来。当有两个数字相互跟随时,这种方法效果很好,但是一旦有三个或更多数字,我的程序就会将它们视为"new"数字,从而打印出错误的答案。

我已经尝试过使用两台扫描仪读取同一文件,但似乎无法使用不同的扫描仪扫描同一个文件两次。我通常会使用 java.util.ArrayList 来完成此任务,但我们不允许使用它,因为我们的讲座中还没有它。我可以将其扩展为能够比较三个数字,但这会使程序过于复杂。看来必须有一种更简单的方法。

    Scanner scanner1 = new Scanner(System.in);
boolean hasPrinted = false;

while(scanner1.hasNext()){

int x = scanner1.nextInt();
if(scanner1.hasNext()){
int y = scanner1.nextInt();
if(x != y){
System.out.println(x);
System.out.println(y);
hasPrinted = true;
}
}
if(!hasPrinted) System.out.println(x);
hasPrinted = false;
}

输入是:javaRemoveDuplicates<input.txt

当文本文档类似于 1 8 3 3 5 4 4 4 9 时,输出预计为 1 8 3 5 4 9。我得到的输出是 1 8 3 5 4 4 9

提前非常感谢。

最佳答案

我们也处理 1 8 3 3 5 4 4 4 8 的情况。基本上我们有一个我们见过的整数数组。如果在运行时我们意识到数组不够大,我们就会用更大的数组替换它。


final static int BLOCK = 1024;

// How we expamd our array. I use arraycopy which is much faster than a loop
// if you're not allowed to use it, resort to a simple loop.
static Integer expand(Integer[] source) {
Integer[] expanded = new Integer[source.length + BLOCK];
System.arraycopy(source, 0, expanded, 0, source.length);
return expanded;
}

// ....

Integer[] alreadySeen = new Integer[BLOCK]; // not int[], to allow nulls.
bailout:
while(scanner1.hasNext()){
int x = scanner1.nextInt();
int i; // we need this out of loop context too.

for(i = 0; i< alreadySeen.length; i++)
if(alreadySeen[i] == null)
break; // nothing furthur too look for.
else if(Objects.equals(alreadySeen[i], (Integer) x))
continue bailout; // yes, we have seen it, bail out.

// If we have reached here, we didn't hit "continue" up there and it's a new number

if(i == alreadySeen.length) // overflow, allocate more
alreadySeen = expand(alreadySeen);
alreadySeen[i] = x;
System.out.println(x);
}

我们在这里实现的是一种低效的 ArrayList。

关于java - 逐一扫描元素并进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58789065/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com