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++;}returnmaterias;
}
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++;}returnnotas;}
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.
W
Willyfp
tentei usar isso, porém quando tento instanciar a classe aparece:
cannotfindsymbolprivateNotasnotas=newNotas();
J
Jothar_Aleksander
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.
Igualmente ele da erro ao compilar, aparenta que não acha a classe, porém as duas estão no mesmo pacote. Código que tentei usar:
public class Medias{
private Notas notas = new Notas();
private void buscaNotas(){
float[][]notas=notas.lerNotas();
}
}
S
staroski
Por qual razão você está criando dois objetos do tipo Scanner com o System.in?
O System.in é um só, então basta um único objeto Scanner.
Essas variáveis só são utilizadas dentro dos métodos, então não há motivo para declarar como sendo atributos.
Declare elas dentro dos métodos apenas.
Posta a mensagem exata do erro.
W
Willyfp
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:cannotfindsymbolSystem.out.printf("Insira a primeira nota da materia %s: ",materias[contador]);^symbol:variablemateriaslocation:classNotassrc\br\edu\principal\Notas.java:44:error:cannotfindsymbolSystem.out.printf("Insira a segunda nota da materia %s: ",materias[contador]);^symbol:variablemateriaslocation:classNotas2errors
Já o erro que dá ao compilar a classe quando tento instanciar a outra dentro dela é:
É 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:
publicclassMedias{// aqui tem uma variável chamada 'notas'privateNotasnotas=newNotas();privatevoidbuscaNotas(){// 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:
Qual package da classe Medias e qual o package da classe Notas?
W
Willyfp
Ambas estão no package br.edu.principal
S
staroski
Como está fazendo para compilar?
Mas está declarando o package no arquivo ou só colocou os arquivos dentro da pasta correspondente?
W
Willyfp
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.
S
staroski
Então posta o comando pra gente ver.
Está executando o javac a partir de qual pasta?
Está incluindo a pasta raíz do teu programa no classpath da aplicação usando o parâmetro -classpath?
S
Solucao aceita
staroski
Não, para isso você usa o parâmetro -cp ou -classpath ao executar o compilador.
No seu exemplo ficaria assim:
"C:\Program Files\Java\jdk-12.0.2\bin\javac.exe” -d bin -classpath src src\br\edu\principal\Medias.java