Uitzondering in thread “main” java.lang.ArrayIndexOutOfBoundsException: 0 fout in Java

Toen ik probeerde deze code uit te voeren, kreeg ik deze foutmelding..Ik weet niet waar ik fout ben gegaan..

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
    at numericalComputatio.fibo.main(fibo.java:30)
package numericalComputatio;
public class fibo {     
    static double c = -0.618;
    // double c = [(1-sqrt(5))/2] = - 0.618 
    /**
     * Computes the fibonacci series
     * @param n
     * @return
     */
    private static double fibo(int n){
        if (n == 0)
           return 1;
        else if (n == 1)
            return c;
        else
        {
           double result = fibo(n - 1) + fibo(n - 2);
           return result;
        }
    }
    public static void main(String[] args) {
        int n = 0;
        double result = 0.0;
        double result1 = 1.000000000;
        if (args[0] != null)
            n = Integer.parseInt(args[0]);
        for(int i = 0; i<=n; i++)
        {
            result = fibo(i);
            System.out.println("fib(" + i + ") = " + result + "Formula value = " + result1);
            result1 = result1*c;
        }
    }
}

Antwoord 1, autoriteit 100%

Hier:

args[0]

On line 30

if (args[0] != null)

Je moet een argument doorgeven.

args[0]Probeert toegang te krijgen tot het eerste element in de args-array, die vanaf de opdrachtregelargumenten wordt ingevuld. Als u geen argumenten doorgeeft, is die array leeg en als u probeert toegang te krijgen tot een niet-bestaand element in een array, krijgt u die uitzondering.

Je moet de exception stacktrace leren lezen. Ze lijken in eerste instantie zinloos, maar als je eenmaal weet hoe je ze moet lezen, zijn ze erg nuttig. Hier is de jouwe:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at numericalComputatio.fibo.main(fibo.java:30)

Het luidt als volgt:

  • Je hebt een uitzondering in de “hoofd”-thread, wat betekent dat deze rechtstreeks in de stroom komt die is gestart door de public static void main-methode
  • De uitzondering was: java.lang.ArrayIndexOutOfBoundsException: 0wat betekent dat er een array bij betrokken is en de index probeerde toegang te krijgen als 0 (het eerste element) dat je een goed idee geeft van wat is er aan de hand.
  • Eindelijk wordt de naam van het Java-bestand en het regelnummer afgedrukt: fibo.java:30Dit is ook erg handig, vooral als je dat bronbestand bij de hand hebt en daar direct naar kunt kijken regel nummer.

Ik hoop dat dit helpt.


Antwoord 2, autoriteit 38%

Om de args te controleren, moet u args.lengthgebruiken – niet expliciet verwijzen naar de index


Antwoord 3, autoriteit 12%

args[0]zal nooit null zijn (wanneer aangeroepen vanaf de opdrachtregel) – maar args.lengthkan 0 zijn, in welk geval args[0]geeft je die uitzondering, omdat er isgeen element 0 in de array. Test dat maar eens:

if (args.length != 0)
{
    n = Integer.parseInt(args[0])
}

Terzijde, het is nogal vreemd om een doublevan fibote retourneren – de normale Fibonacci-reeks wordt gedefinieerd in termen van gehele getallen (0, 1, 1, 2, 3, 5, 8 enz.). Als je het wilt schalen, zou ik het daarna vermenigvuldigen met je constante.


Antwoord 4

Geef je een opdrachtregelargument op wanneer je het uitvoert?

if (args[0] != null)
    n = Integer.parseInt(args[0]);

Als u dat niet bent, zal de bovenstaande regel mislukken. U moet controleren of args.length >=1 voordat u args[0]opent.


Antwoord 5

args[0] != null

argsbevat geen enkel element , dus als je probeert toegang te krijgen tot 0th krijg je dit


Antwoord 6

Deze uitzondering betekent:

Exception in thread "main" // in main method
java.lang.ArrayIndexOutOfBoundsException: 0 at // Exception ArrayIndexOutOfBounds

Gegooid om aan te geven dat een array heeft
geopend met een illegale index.
De index is ofwel negatief of
groter dan of gelijk aan de grootte van
de array.

numericalComputatio.fibo.main(fibo.java:30) // in line 30, in class fibo

Antwoord 7

public class NewMain {
    public static void main(String[] args) {
       int argslen=args.length;
        int argsValue[] = new int[argslen];
        for (String i:args) {
           int d = 0;
           argsValue[d]=Integer.parseInt(i);
           System.out.print(argsValue[d]+"\t");
        }
    }
}

Antwoord 8

pakket coordCart;

publieke klasse LignePol {
privé Punt[] somts;

public LignePol(int n) {
    Point[] sommets = new Point[n];
}
public LignePol(Point[] sommets) {
    this.sommets = sommets; 
}
public Point getSommet(int i) {
    return sommets[i];
}
public void setSommet(int i, Point p) {
    sommets[i] = p;
}
public String toString() {
    if (sommets.length == 0)
        return "[ ]";
    String res = "[ " + sommets[0];
    for (int i = 1; i < sommets.length; i++)
        res += ", " + sommets[i];
    return res + " ]";
}
public Object clone() {
    Point[] bis = new Point[sommets.length]; 
    for (int i = 0; i < sommets.length; i++) {
        Point p = sommets[i];
        bis[i] = new Point(p.x(), p.y());
    }   
    return new LignePol(bis);
}
public void homothetie(double k) {
    for (int i = 0; i < sommets.length; i++)
        sommets[i].homothetie(k);
}
public void translation(double dx, double dy) {
    for (int i = 0; i < sommets.length; i++)
        sommets[i].translation(dx, dy);
}
public void rotation(double a) {    
    for (int i = 0; i < sommets.length; i++)
        sommets[i].rotation(a);
}
void tracer() {
    for (int i = 1; i < sommets.length; i++)
        tracerSegment((int) sommets[i - 1].x(), (int) sommets[i - 1].y(), 
                (int) sommets[i].x(), (int) sommets[i].y());
}
public static void main(String[] args) {
    Point[] t = { 
            new Point( 1, 3), new Point( 0, 2), new Point( 0, 0),
            new Point( 3, 5), new Point( 4, 4), new Point( 0, 4),
            new Point( 4, 2), new Point( 4, 0), new Point( 1, 1) };
    LignePol lp = new LignePol(t);
    double m = Double.parseDouble(args[0]); 
    double n = Double.parseDouble(args[1]); 
    double l = Double.parseDouble(args[1]); 
    lp.homothetie(l / 4.0);
    lp.translation(m, n);
    lp.tracer();
}
// pour la simulation
static void tracerSegment(int x0, int y0, int x1, int y1) {
    System.out.println("(" + x0 + "," + y0 + ") --> (" + x1 + "," + y1 + ")");
}

}

Other episodes