Erro ao tentar entrar com dados em linha de comando
4 respostas
A
Armando_Pereira
Olá pessoal, estou começando com JAVA. Nesse erro já tentei de tudo, olhei alguns foruns
mas nada que realmente resolvesse. Pensei até que estivesse configurado meu JDK errado.
Bom, retorna este erro logo qdo executa o código:
Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: 0
at ValorVenda.main(ValorVenda.java:14)
publicclassValorVenda{publicstaticdoubleCalc(doublev,doublep){if(p==0.0)returnv;else{doubler=0.0;r=v*((p/100)+1);returnr;}}publicstaticvoidmain(String[]args){System.out.println("\n Entre com valor de compra ");doubleinputValor=Double.parseDouble(args[0]);System.out.println("\n Entre com porcentagem ");doubleinputPorc=Double.parseDouble(args[0]);doublevalor=Calc(inputValor,inputPorc);System.out.println("Valor da venda = "+valor);}}
Agradeço quem possa me dar uma solução passo à passo,
como iniciante as vezes temos alguma dificuldade. :oops:
String[] args:
este parametro do metodo main é referente ao que vc passa como parametro ao executar a classe.
Ex.:
para executar a sua classe, vc faria assim:
java ValorVenda parametro1 parametro2 parametro3
tudo o que vc digitar depois de ValorVenda vai ser recebido no metodo main… a cada espaço " ", é criada uma nova posição no array!
pra vc receber o que é digitado depois de executar a classe, use Scanner.
ex:
System.out.println("\n Entre com valor de compra ");Scannerin=newScanner(System.in);doubleinputValor=in.nextDouble();
davidbuzatto
Seu código está esperando que os dados venham pela chamada do java.
Corrigi seu código para funcionar com os dois argumentos pela chamada.
publicclassValorVenda{publicstaticdoubleCalc(doublev,doublep){if(p==0.0){returnv;}else{doubler=0.0;r=v*((p/100)+1);returnr;}}publicstaticvoidmain(String[]args){System.out.println("\n Entre com valor de compra ");doubleinputValor=Double.parseDouble(args[0]);System.out.println("\n Entre com porcentagem ");doubleinputPorc=Double.parseDouble(args[1]);doublevalor=Calc(inputValor,inputPorc);System.out.println("Valor da venda = "+valor);}}
Se você compilar sua classe e invocá-la assim:
java ValorVenda 10 20
Você vai ver que a saída vai ser mais ou menos assim:
Entre com valor de compra
Entre com porcentagem;
Valor da venda = 12.0
Entretanto na verdade não é isso que você quer fazer não é? Você quer q o usuário entre com os valores.
Então você teria que fazer assim:
importjava.util.*;publicclassValorVenda{// note que iniciei o nome do método com letra minúscula. Essa é uma boa prática no Java ok?// Classes iniciam com letra maiúscula, métodos com minúscula.publicstaticdoublecalc(doublev,doublep){if(p==0.0){returnv;}else{doubler=0.0;r=v*((p/100)+1);returnr;}}publicstaticvoidmain(String[]args){// cria um scanner (classe Scanner do pacote java.util) para ler a entrada padrão (System.in)Scannerscan=newScanner(System.in);System.out.println("\n Entre com valor de compra ");// o método readLine da classe Scanner lê uma "linha" de dados (posição atual até a quebra de linha)// lê da posição inicial do System.in até uma quebra de linha (quando vc tecla <ENTER>)doubleinputValor=Double.parseDouble(scan.nextLine());System.out.println("\n Entre com porcentagem ");// lê da posição atual do System.in (depois que você deu o <ENTER> // anteriormente até uma quebra de linha (quando vc tecla <ENTER> desta vez)doubleinputPorc=Double.parseDouble(scan.nextLine());doublevalor=calc(inputValor,inputPorc);System.out.println("Valor da venda = "+valor);}}
[]´s
davidbuzatto
Você pode fazer como o amigo acima falou (usando o método nextDouble), entretanto você pode ter problemas na interação do usuário com isso.
[]´s
A
Armando_Pereira
Valeu Lauro e Davi pela força, resolvido. Com certeza em breve estarei ajudando os novos colegas deste fórum como você…
Abraços