olá gente, estou fazendo uma aplicação para a faculdade e queria saber como puxo o vetor que um método de outra classe retorna. código:
import java.util.Scanner;
public class Notas{
Scanner lerMateria = new Scanner (System.in);
Scanner lerNota = new Scanner (System.in);
float notas[][] = new float[6][2];
String materias[] = new String [6];
int contador = 0;
String[] lerMaterias(){
contador = 0;
while (contador <= 5){
System.out.println("");
System.out.println ("Insira o nome da materia: ");
materias[contador] = lerMateria.nextLine();
System.out.println("");
contador ++;
}
return materias;
}
float[][] lerNotas(){
contador = 0;
while (contador <= 5){
System.out.println("");
System.out.printf ("Insira a primeira nota da materia %s: ", materias[contador]);
notas[contador][0] = lerNota.nextFloat();
System.out.println("");
System.out.println("");
System.out.printf ("Insira a segunda nota da materia %s: ", materias[contador]);
notas[contador][1] = lerNota.nextFloat();
System.out.println("");
contador ++;
}
return notas;
}
Lembrando nesse exemplo o objeto Notas foi instanciado na classe media, então é um objeto novo, nesse exemplo vc precisa setar os valores nessa instância.
Se você instanciar dentro de um método, não precisa (e não pode) indicar a visibilidade já que a visibilidade será a do método. Se instanciação ocorre na classe, mas fora de um método, aí pode.
1 - Dentro de um método
public class Classe1 {
}
public class Classe2 {
private void metodoClasse2(){
Classe1 classe1 = new Classe1();
}
}
2 - Fora de um método
public class Classe1 {
}
public class Classe2 {
private Classe1 classe1 = new Classe1();
}
Quando eu declarava somente um Scanner, por algum motivo pulava algumas leituras, criando dois consegui resolver.
sobre as variáveis, quando deixo elas somente dentro do método aparece o seguinte erro ao compilar:
error: cannot find symbol
System.out.printf ("Insira a primeira nota da materia %s: ", materias[contador]);
^
symbol: variable materias
location: class Notas
src\br\edu\principal\Notas.java:44: error: cannot find symbol
System.out.printf ("Insira a segunda nota da materia %s: ", materias[contador]);
^
symbol: variable materias
location: class Notas
2 errors
Já o erro que dá ao compilar a classe quando tento instanciar a outra dentro dela é:
error: cannot find symbol
Notas notas = new Notas();
^
symbol: class Notas
location: class Medias
src\br\edu\principal\Medias.java:5: error: cannot find symbol
Notas notas = new Notas();
^
symbol: class Notas
location: class Medias
src\br\edu\principal\Medias.java:9: error: cannot find symbol
float[][] notas = notas.lerNotas();
^
symbol: method lerNotas()
location: variable notas of type float[][]
3 errors
É que você utiliza o método nextFloat(), esse método não consome a quebra de linha quando você pressiona o ENTER.
O único método do Scanner que consome a quebra de linha é o nextLine().
Então você tem duas alternativas:
Chamar o nextLine() imediatamente após o nextFloat();
Não chamar o nextFloat() e ao invés disso fazer Float.parseFloat(meuObjetoScanner.nextLine()).
O problema foi a falta de atenção, veja:
public class Medias{
// aqui tem uma variável chamada 'notas'
private Notas notas = new Notas();
private void buscaNotas(){
// aqui declarou uma variável do tipo 'float[][]' e também chamou de 'notas'
// aí quando tenta chamar o método 'lerNotas' vai dar erro
// pois o tipo de dado 'float[][]' não tem um método 'lerNotas'
float[][] notas = notas.lerNotas();
}
}
Ou você utiliza o this para referenciar a variável de instância:
public class Medias{
private Notas notas = new Notas();
private void buscaNotas(){
float[][] notas = this.notas.lerNotas();
}
}
Ou muda o nome da variável local:
public class Medias{
private Notas notas = new Notas();
private void buscaNotas(){
float[][] outroNomePraVariavel= notas.lerNotas();
}
}
tentei fazer as mudanças porém o erro continua o mesmo ao tentar compilar
cannot find symbol
private Notas notas = new Notas();
^
symbol: class Notas
location: class Medias
src\br\edu\principal\Medias.java:5: error: cannot find symbol
private Notas notas = new Notas();
^
symbol: class Notas
location: class Medias
2 errors
Criei um arquivo .bat que meu professor passou o código para abrir o cmd e compilar automaticamente
“C:\Program Files\Java\jdk-12.0.2\bin\javac.exe” -d bin src\br\edu\principal\Medias.java
Para isso teria que alterar algo nas variáveis de ambiente? eu cheguei a configura-las quando comecei a programar, mas não sei se tem que alterar mais algo quando vou trabalhar com várias classes.