从用户

时间:2017-04-03 23:47:03

标签: java loops

我创建了一个代码,要求用户输入10个必须为负数的数字,当它们不是时,用户被迫再次输入,然后加上10个负数的总和,如下所示。我现在要做的是找到不同的整数(有多少并显示数量以及列出它们是什么)。我的理解是,不同的整数只是尚未添加的数字。例如,如果输入-1,-2,-3,-3,-9,-1,-7,-7,-1,-3,那么不同整数的数量将为5,它们将为-1,-2,-3,-7,-9

import java.util.Scanner;

public class distinctint {
    double counter;
    Scanner scan = new Scanner(System.in);

    public double go() {
        int a;
        int n;
        counter = 7;

        while (counter != 0) {
            System.out.println("Enter number: ");
            if(newInteger < 0) {
                int newInteger = scan.nextInt()
                newint += newInteger;
                dial = dial - 1;
            }
        } 
        System.out.println("sum=" + newint);
    }
}

我遇到的这个问题是试图找到一种方法来实现我的目标。我很确定我需要一些包含所有不同整数的数组,但我不确定从哪里开始。这样的事情会有意义吗?

numbers[] distinctnumbers;

2 个答案:

答案 0 :(得分:1)

如果您要添加的元素对集合是新的,add接口的Set方法会返回true这一事实,您可以利用false如果它已经在集合中。

我会做这样的事情。我已经省略了所有的验证和循环,因为你显然知道如何做到这一点。

// Before your loop

Set<Integer> numbersIveAdded = new HashSet<>();
int total = 0;



// Inside your loop

int numberEntered = scan.nextInt();
boolean thisIntegerIsNew = numbersIveAdded.add(numberEntered);
if (thisIntegerIsNew) {
    total += numberEntered;
}

答案 1 :(得分:0)

如前所述,Set仍然是执行此操作的最佳方式。但是,如果您只需要使用Arrays,则可以执行以下操作。

//outside while loop
int[] array = new int[10];

//inside the while loop
int newInteger = scan.nextInt();
if(newInteger >= 0) 
{
    System.out.println("Must be negative integer, please try again");
}
else if (checkIfAlreadyPresent(array, newInteger)) {
    System.out.println("Integer already present, please enter a distinct one.");
} else {
    n+=newInteger;
    counter = counter - 1;
    a=a+newInteger; 
}

//O(n) worst case vs O(1) for Set
public boolean checkIfIntegerAlreadyPresent(int[] array, int inputInteger) {
    for(int a:array) {
        if(a==inputInteger)
            return true;
    }
    return false;
}