Alguém sabe resolver? Metodos

Em new ExercicioFor(), eu tenho: constructor ExercicioFor in class ExercicioFor cannot be applied to given types

Em .exercicio5() na segunda linha eu tenho: non-static method exercicio5(int) cannot be referenced from a static context


public class PrincipalExercicios{
public static void main(String[] args){

    ExercicioFor exercicio5 = new ExercicioFor();
    ExercicioFor.exercicio5(Teclado.leInt("Digite um nº: "));
    
}

}


public class ExercicioFor{
String nome;

public ExercicioFor(String nome){
this.nome = Teclado.leString("Digite seu time: "); ;
}

Bloco de Citação

public void exercicio5(int x){
int cont = 0;
for(int i=0; i < x; i++)
nome = Teclado.leString("Digite seu time: ");
if (nome == “Gremio”)
cont++;
System.out.println(cont);
}
}

O construtor da sua ExercicioFor requer um parâmetro (String nome), mas você não está o passando ao chamar new ExercicioFor . Ou você passa o parâmetro, ou remove ele do construtor.

Você está tentando invocar o método exercicio5 na classe ExercicioFor, mas ele não é estático e requer uma instância pra ser invocado. Eu suponho que o que você quis fazer é:

exercicio5.exercicio5(Teclado.leInt("Digite um nº: "));

Edit: relacionado -> Alguém sabe resolver? Metodos

Abraço.

Em relação à segunda parte deu certo, mas na 1ª não posso excluir o new ExerciciosFor pois o metodo não é estático e se coloco
ExercicioFor exercicio5 = new ExercicioFor(String nome);
aparece “not a statement”

Você está seguindo algum tutorial? Pois parece estar tropeçando na diferença entre declarar um método (ou construtor) e invocá-lo.

Na invocação do construtor, você não precisa repetir o tipo do parâmetro, apenas passá-lo:

ExercicioFor exercicio5 = new ExercicioFor(nome);

Note que a variável nome precisa estar declarada antes de você chamar o construtor. Ou seja, você vai ter algo assim:

String nome = "Nome fixo qualquer";
ExercicioFor exercicio5 = new ExercicioFor(nome);

Ou:

String nome = Teclado.leString(); // estou supondo que esse método existe
ExercicioFor exercicio5 = new ExercicioFor(nome);

Abraço.

Ah, compreendi essa parte, porém antes de perguntar o nome, preciso perguntar a quantidade de nomes antes e desta maneira não está sendo possível.
----Crie um método que recebe um inteiro x por parâmetro e solicita o time de x usuários pelo teclado. Ao final, imprima quantos torcedores torcem para o Grêmio.----- ESTA É A INSTRUÇÃO
Obs.: eu tenho uma classe Teclado que tem os comandos leString, leInt etc.

Galera, um novo fórum, destinado somente a Java: https://programacaojava.forumeiros.com/

Vamos por parte então. Nesse enunciado, não há nada que diga que o construtor da classe precisa de um parâmetro String. Então você pode remover esse parâmetro do construtor. Indo além, essa classe nem precisa de um construtor específico, pois não há nada para se fazer nele. O começo da classe é só:

public class ExercicioFor{
// calma, vamos colocar mais coisas aqui
}

Continuando, você precisa de um método que recebe um inteiro x :

public class ExercicioFor{
  public void pedirTimeDosUsuarios(int x){
    // haverá mais coisas aqui
  }
}

Nesse método, você precisa pedir o time de alguns usuários, de acordo com a quantidade informada por parâmetro. Portanto, é uma ação que você irá repetir x vezes. Logo, precisa de um laço de repetição. Como você sabe a quantidade de vezes que irá repetir, um laço for já é suficiente:

public void pedirTimeDosUsuarios(int x){
  for(int i = 0; i < x; i++){
  }
}

Aqui um detalhe importante: como você não precisa armazenar os times dos usuários, apenas contar se é o Grêmio, você pode ter apenas uma variável para quantos Grêmio foram informados, e uma variável auxiliar pra armazenar o nome dentro do loop, só pra facilitar:

public void pedirTimeDosUsuarios(int x){
  int quantidadeDeGremio = 0;
  String timeDigitado;
  for(int i = 0; i < x; i++){
    timeDigitado = Teclado.leString();
    if (timeDigitado.equals("Grêmio"){
      quantidadeDeGremio = quantidadeDeGremio  + 1;
    }
  }
}

Obviamente, você precisa de um método main, pegando quantos usuários serão consultados, criando uma instância dessa classe e chamando esse método:

public class ExercicioFor{
// calma, vamos colocar mais coisas aqui
public static void main(String[] args){
  int quantidadeASerAnalisada = Teclado.leInt();
  ExercicioFor exFor = new ExercicioFor();
  exFor.pedirTimeDosUsuarios(quantidadeASerAnalisada);
}
}

Acho que ficou mais claro agora. Obviamente, algumas coisas podem precisar de ajuste.

PS: principalmente enquanto estiver aprendendo, use nomes de classes, métodos e atributos mais expressivos e descritivos (desde que não sejam exagerados), pois isso facilita o entendimento do código. Veja que pedirTimeDosUsuarios é mais descritivo do que o método faz do que simplesmente exercicio5.

@victor_hugo2 , nem programo mais muito em Java, e não vejo motivo para ir para lá. Mas qual o motivo de criar uma nova comunidade?

Abraço.

1 curtida