• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

prosty program do pierwiastkowania w java

Object Storage Arubacloud
+2 głosów
865 wizyt
pytanie zadane 7 marca 2018 w Java przez Przemodzida Nowicjusz (210 p.)

Witam!

Jestem nieco nowy w javie i mam problem z jednym projektem w eclipse, który kilka razy zadziałał, a potem już nie wyświetlał odpowiedzi, tylko:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 20
    at pierwiastkowanie.pierwiastkowanie.main(pierwiastkowanie.java:20)

Oto mój kod:

package pierwiastkowanie;

import java.util.Scanner;

public class pierwiastkowanie 
{	
	public static void main(String[] args)
	{
		Scanner skaner=new Scanner(System.in);
		System.out.println("podaj liczbę do pierwiastkowania");
		double A = skaner.nextDouble();
		System.out.println("podaj stopień pierwiastka");
		double n = skaner.nextDouble();
		double[] x = new double[20];
		 
		x[0]=1.0;
		{
			for(int i=1; i<=x.length; i++)
			{
				x[i]=(1/n)*((n-1)*x[i-1]+A/Math.pow(x[i-1], n-1));
			}
		}
		
		System.out.println(x[20]);
	}
}

Wie ktoś w czym problem?

3 odpowiedzi

+2 głosów
odpowiedź 7 marca 2018 przez niezalogowany
Błąd jest w pętli.

https://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html

Index x[] zaczyna się od 0 i kończy na 19, a jego długość to 20, zatem nie istnieje x[20].
+2 głosów
odpowiedź 7 marca 2018 przez Wiciorny Ekspert (270,190 p.)
i<=x.length;

tutaj  ostatnia wartość x= 20; bo length zwraca całą prymitywną długość

W prymitywnym typie tablic, indeksujesz od 0-19 jak kolega napisał stąd nie możesz przypisać nic do zmiennej 

x[20] = .... "jakaś wartość w pętli";

bo takowa zmienna nie istnieje, więc także wypisanie wartości x[20] będzie błędne  **Kolega właśnie to samo napisał, ja chciałem uzmysłowić że są zarówno dwa błędy i wyjaśnić szerzej. 

0 głosów
odpowiedź 8 marca 2018 przez Kamil Krzysztof Użytkownik (660 p.)

A ja tak od siebie, bo właśnie wróciłem do Javy a to będzie mój pierwszy wpis na forum. Co powiesz o moim przykładzie tabliczka mnożenia, poziom trudności podobny:

class MultiTable {
    public static void main(String[] args) {
        int[][] tab2 = new int[10][10];

        for (int i = 0; i <= 9; i++) {
            for (int j = 0; j <= 9; j++) {
                 tab2[i][j] = (i+1)*(j+1);   
                 System.out.print(" " + tab2[i][j]);
                 if (j % 9 == 0 && j != 0) {
                     System.out.println();
                 }
                 if(tab2[i][j] < 10) {
                     System.out.print(" ");
                 }                  
             }
         }   
    }
}

Jakbyś powiększył tabliczkę by ładnie wyświetlała dane w konsoli do 20x20. Pomyśl ja jeszcze tego nie rozwiązałem.

komentarz 8 marca 2018 przez Tomasz90 Nałogowiec (25,140 p.)
Powinieneś utworzyć na to osobne pytanie. Co do Twojego programu to sobie komplikujesz strasznie. To zadanie da się zrobić w 4 linijkach (2 pętle i 2 printf) bez żadnych if-ów, nadmiarowych inkrementacji i alokowania tablicy (bo w tym przypadku nie ma to sensu). Co do wypisywania to powinieneś też zwrócić uwagę, by każda liczba zajmowała na ekranie tyle samo miejsca, przez co formatowanie się nie rozjedzie.
komentarz 9 marca 2018 przez Kamil Krzysztof Użytkownik (660 p.)
Czekam na inspirujący przykład :)
komentarz 10 marca 2018 przez Tomasz90 Nałogowiec (25,140 p.)
final int MULTIPLICATION_TABLE_SIZE = 20;
for(int i = 1; i <= MULTIPLICATION_TABLE_SIZE; i++) {
	for(int j = 1; j <= MULTIPLICATION_TABLE_SIZE; j++) {
		System.out.printf("%-3d\t", i * j);
	}
	System.out.println();
}

pewnie to można sobie jakoś przyspieszyć stosując zmienną tymczasową, żeby nie mnożyć za każdym razem od nowa i * j. tylko bazować na poprzedniej wartości, ale nie wiem czy w przypadku tak małej tablicy w ogóle to coś da

 

Podobne pytania

0 głosów
1 odpowiedź 164 wizyt
pytanie zadane 4 marca 2019 w Java przez Mitop Użytkownik (700 p.)
0 głosów
3 odpowiedzi 373 wizyt
0 głosów
0 odpowiedzi 344 wizyt

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...