Começando em java e um exercícizinho :lol: para começar, apenas para somar dois valores:
packageExercício;publicclassNumQual{intx=40;inty=50;intsoma;publicNumQual(inta1,intb1){x=a1;y=b1;}publicvoidSomaValores(){soma=x+y;}publicstaticvoidmain(Stringargs[]){NumQuals1=newNumQual();s1.SomaValores();System.out.println("Soma é = "+s1.soma);}}
Dessa forma da esse erro:
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
Syntax error on token "int", delete this token
Cannot make a static reference to the non-static field x
Cannot make a static reference to the non-static field y
mas se passo os valores que declarei acima, da certo:
packageExercício;publicclassNumQual{intx,y,soma;publicNumQual(inta1,intb1){x=a1;y=b1;}publicvoidSomaValores(){soma=x+y;}publicstaticvoidmain(Stringargs[]){NumQuals1=newNumQual(40,50);s1.SomaValores();System.out.println("Soma é = "+s1.soma);}}
Lembrando que to começando mesmo, seguindo passo-a-passo nos livros e apostilas... :oops:
Isso eh um construtor que recebe dois parametros. no main vc estava usando um contrutor q nao existia
publicNumQual(inta1,intb1){x=a1;y=b1;}
T
themadjava
Olá Fjal!
Primeiramente, não consegui reproduzir o erro que você teve com o código acima, mas vou explicar um pouco do que poderia ter acontecido.
É o seguinte: o main é um método estático (palavra reservada static), então ele não pode utilizar atributos não estáticos, que são específicos de cada objeto criado. Então se você quer utilizar o x e o y da classe dentro do main, você deve setá-los como estáticos. Vale lembrar que fazendo isso, eles serão únicos para todo objeto criado. Se desejar que eles sejam diferentes em cada objeto, o que parece ser o caso, você deve inicializa-los fora do main, e chama-los através do objeto, e não diretamente.
Mas pegando o código acima, o jeito de corrigir ele foi só criando um construtor que não receba parâmetros, aí ele setaria os valores padrão de x e y, ou então no caso de seu primeiro código, apenas um construtor sem parâmetros vazio resolveria.
Espero ter ajudado
//TheMadJava
B
blst
você quase acertou…
se vc olhar bem…vc não precisaria colocar a1 e b1 no construtor…só com o método somaValores dá certo
packageExercício;publicclassNumQual{intx=40;inty=50;intsoma;publicNumQual(){}publicvoidSomaValores(){soma=x+y;}publicstaticvoidmain(Stringargs[]){NumQuals1=newNumQual();s1.SomaValores();System.out.println("Soma é = "+s1.soma);}}
fujioka
Seu codigo estava quase certo… =) caminho certo…
variaveis e metodos estaticos são como pessoas apaixonadas so enxergam um ao outro… o mesmo vale para não estaticos…
uma variável estática so é vista de um método estático…
uma variável não estatica so é vista de um método nao estático
no caso você pode fazer como a sugestão abaixo… um método que recupera o valor da soma…
packageExercício;publicclassNumQual{intx=40;inty=50;intsoma;publicNumQual(){}publicvoidSomaValores(){soma=x+y;}publicintgetSoma(){returnsoma;}publicstaticvoidmain(Stringargs[]){NumQuals1=newNumQual();s1.SomaValores();System.out.println("Soma é = "+s1.getSoma());}}
Ratao
Seguindo as boas praticas e que todos passaram e ninguém viu hein pessoal?! Métodos iniciam-se com letra minúscula.
publicvoidsomaValores(){soma=x+y;}
F
Fjal
Valeu moçada, entendi o que todos passaram, fujioka, sobre criar um método getSoma() para retornar a soma, acho que isso só aumenta o código não?, pois o programa vai rodar sem o mesmo, igual o blst fez ali em cima.
programadora
fujioka:
uma variável estática so é vista de um método estático..
Pode até não ser correto, mas nesse caso, vale acrescentar que uma variável estática pode ser acessada também por um método não estático:
O contrário também pode acontecer (um método estático acessar uma variável não estática), só que de forma indireta, através de uma instância:
classA{intnum=6;publicstaticvoidmain(String[]args){Aa=newA();// através de uma instância de A, pode-se acessar sua variável não estática numSystem.out.println("O valor de num é: "+a.num);}}