Erro ao tentar entrar com dados em linha de comando

4 respostas
A

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)

public class ValorVenda{
	public static double Calc(double v,double p){
		if(p==0.0)	return v;
		else{
		double r=0.0;
		r=v*((p/100)+1);
		return r;}
		
	}
	
	public static void main(String[] args){
	System.out.println("\n Entre com valor de compra ");
	double inputValor = Double.parseDouble(args[0]);
	System.out.println("\n Entre com porcentagem ");
	double inputPorc = Double.parseDouble(args[0]);
	double valor = 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: :smiley:

4 Respostas

L

ok… vamos la…

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 ");  
Scanner in = new Scanner(System.in);
double inputValor = 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.

public class ValorVenda{

    public static double Calc(double v,double p){
        if(p==0.0)	{
            return v;
        } else {
            double r=0.0;
            r=v*((p/100)+1);
            return r;
        }
    }

    public static void main(String[] args){
        System.out.println("\n Entre com valor de compra ");
        double inputValor = Double.parseDouble(args[0]);
        System.out.println("\n Entre com porcentagem ");
        double inputPorc = Double.parseDouble(args[1]);
        double valor = 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:

import java.util.*;

public class ValorVenda{

    // 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.
    public static double calc(double v,double p){
        if(p==0.0)	{
            return v;
        } else {
            double r=0.0;
            r=v*((p/100)+1);
            return r;
        }
    }

    public static void main(String[] args){
    	
        // cria um scanner (classe Scanner do pacote java.util) para ler a entrada padrão (System.in)
    	Scanner scan = new Scanner( 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>)
        double inputValor = 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)
        double inputPorc = Double.parseDouble( scan.nextLine() );
        
        double valor = 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

Valeu Lauro e Davi pela força, resolvido. Com certeza em breve estarei ajudando os novos colegas deste fórum como você…
Abraços :smiley:

Criado 2 de maio de 2010
Ultima resposta 2 de mai. de 2010
Respostas 4
Participantes 3