Dado um array de objetos A e uma soma S construa uma função que indique se dois
elementos diferentes do array têm soma S.
Está dando erro na hora de mostrar a soma, eu nao sei o que eu estou fazendo de errado…
public static void main(String[] args) {
Scanner t = new Scanner(System.in);
System.out.println("Tamanho");
int x = t.nextInt();
List<Integer> A = new ArrayList<Integer>(x);
for(int i = 0; i < x; i++){
int b;
System.out.printf("Número %d:", i+1);
b = t.nextInt();
A.add(b);
}
System.out.println("Soma: ");
int soma = t.nextInt();
if(!A.contains(soma))
System.out.printf("FALSO: não existe nenhuma combinação de dois elementos que somem %d\n", soma);
else
for (int i = 0; i < x; i++) {
if(A.get(i) + A.get(i+1) == soma){
System.out.printf("TRUE; %d + %d\n", A.get(i), A.get(i));
}
}
}
}
entoa o erro é o seguinte, eu tenho que somar cada item na lista, e noa simplesmente todos saca ?
tenoh que somar o primeiro com o segundo e ve se dá o valor, se nao der eu tenho que somar com o terceiro e assim por diante
depois eu tenho que imprimir desta maneira se houver resultado
Você pega o primeiro da lista (1), subtrai da soma S(9). Vai achar 8, certo? verificar se o 8 ta lista A. Se sim, você imprime o primeiro da lista (1), e o valor 8. Se não, passa pro proximo item da lista (2) e faz a mesma logica de novo.
Você já começou errado pois o enunciado diz para usar array e você está usando lista.
Esse código verifica se dentro da sua lista existe um número que seja igual à soma digitada menos o valor de determinada posição.
Isso serve pra quê?
for (int i = 0; i < x; i++) {
int valor = soma - a[i];
if (a.contains(valor)) {
System.out.printf(“TRUE; %d + %d\n”, soma, A.get(i));
}
}
Exemplo que funciona:
import java.io.PrintStream;
import java.util.Scanner;
public class Exemplo {
public static void main(String[] args) {
try {
Exemplo programa = new Exemplo();
programa.executar();
} catch (Throwable t) {
t.printStackTrace();
}
}
private final Scanner entrada = new Scanner(System.in);
private final PrintStream saida = System.out;
public void executar() {
int tamanho = ler("Tamanho do array: ");
int[] array = new int[tamanho];
for (int i = 0; i < tamanho; i++) {
array[i] = ler("Número %d: ", i + 1);
}
int soma = ler("Soma: ");
String combinacoes = calcularCombinacoes(array, soma);
escrever(combinacoes);
}
private String calcularCombinacoes(int[] array, int soma) {
StringBuilder texto = new StringBuilder();
int tamanho = array.length;
for (int x = 0; x < tamanho - 1; x++) {
for (int y = x + 1; y < tamanho; y++) {
int primeiro = array[x];
int segundo = array[y];
if (primeiro + segundo == soma) {
if (texto.length() == 0) {
texto.append("true: ").append(primeiro).append(" + ").append(segundo);
} else {
texto.append(", ").append(primeiro).append(" + ").append(segundo);
}
}
}
}
if (texto.length() == 0) {
texto.append("false: não existe nenhuma combinação de dois elementos que somem ").append(soma);
}
return texto.toString();
}
private int ler(String mensagem, Object... parametros) {
escrever(mensagem, parametros);
return Integer.parseInt(entrada.nextLine());
}
private void escrever(String mensagem, Object... parametros) {
saida.printf(mensagem + "%n", parametros);
}
}
calma ai bonitão. ele mesmo usou a classe list ali no exemplo dele. por isso usei. eu não quis fazer o exercício todo, não tenho motivo me achar melhor que alguém aqui. tanto só pus algo bem genérico pra ele pegar a ideia. a logica que coloquei faz justamente o que pede e enunciado. Pego a soma solicitada, subtraio de um valor da lista. Se o resultado existe em alguma posição da lista eu mostro.