如何解决这个错误? java.lang.arrayIndexOutOfBoundsException:0

时间:2016-04-12 17:50:06

标签: java string int system

嗨,我有这个问题,我做一个计算器,你介绍一些东西idk橙色或柠檬的重量,你把1公斤(介绍1)然后你把它的价格可以是idk 5 usd(介绍5)然后我乘以1x5 = 5然后我告诉客户好多少你会支付他说idk 10 usd所以我介绍10和我的计算器做5-10 = 5它在那里我有我的代码的问题那部分变化客户(10个篮子中的5个)重复2次(问我2次为客户支付费用)我试图把0(零)放在行中:vuelto = new float [1]; put给我一个错误我该如何解决?

theres the code

import java.util.Scanner;

public class arreglo1 {
    public static void main(String[] args) {

        Scanner ingreso = new Scanner(System.in);
        Scanner peso = new Scanner(System.in);
        Scanner precios = new Scanner(System.in);
        Scanner vuelto1 = new Scanner(System.in);

        float[] kilo; //definir un arreglo
        float[] precio;
        float[] vuelto;
        kilo = new float[2]; //iniciar un arreglo
        precio = new float[2];
        vuelto = new float[1];
        float Total;
        float Vuelto1;

        System.out.println("Ingrese el peso del Producto:");

        for (int i = 0; i < 2; i = i + 1) {

            kilo[i] = peso.nextFloat();

        }
        System.out.println("\nIngrese precio del Producto:");

        for (int j = 0; j < 2; j = j + 1) {
            precio[j] = precios.nextFloat();
        }

        //////Total A Pagar
        for (int i = 0; i < 2; i = i + 1) {
            Total = ((kilo[0] * precio[0]) + (kilo[1] * precio[1]));
            System.out.print("\nTotal a pagar: " + Total);

            //////Vuelto para el cliente

            System.out.println("\nIngrese monto con el que se va a pagar:");

            for (int b = 0; b == 0; b = b + 1) {
                vuelto[b] = vuelto1.nextFloat();
                Vuelto1 = (float)(Total - vuelto[b]) / -1;
                System.out.print("\nVuelto: " + Vuelto1);

            }
        }
    }
}

2 个答案:

答案 0 :(得分:0)

最后一个for循环(“veulto”部分)将运行两次,因为它是前一个for循环体的一部分(“Total A Pagar”部分)。 for循环的整个主体在i<2时执行。 如果你只想要执行一次“veulto”,那么应该添加一个右括号来分隔第一个for循环和第二个循环的主体。

for (int i = 0; i < 2; i = i + 1) {
            Total = ((kilo[0] * precio[0]) + (kilo[1] * precio[1]));
            System.out.print("\nTotal a pagar: " + Total);}

显然,也应该删除最后一个结束括号以平衡它们: - )

解决问题实际上揭示了另一个问题,因为局部变量Total可能无法初始化,javac强制执行。解决方案是在声明时将其初始化为某个值,可能为0。

float Total = 0.0f;

当你在它时,“veulto”部分不需要处于for循环中,它只执行一次。

答案 1 :(得分:0)

为什么需要这部分代码?

for (int b = 0; b == 0; b = b + 1) {
   vuelto[b] = vuelto1.nextFloat();
   Vuelto1 = (float)(Total - vuelto[b]) / -1;
   System.out.print("\nVuelto: " + Vuelto1);
}

我想,你只想从客户那里读一次价格,所以这就足够了 写

Vuelto1 = Math.abs((float)(Total - vuelto1.nextFloat()))
System.out.print("\nVuelto: " + Vuelto1);

注意: Math.abs()返回数字的绝对值,因此您总是得到一个正数。