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

Zadanie - błędy na czerwono - Java

Object Storage Arubacloud
0 głosów
171 wizyt
pytanie zadane 7 maja 2019 w Java przez gorgonkowa Obywatel (1,810 p.)

Hejka. Chciałabym się Was poradzić, co jest nie tak w obecnym programie, w którym nie ma błędów w kodzie, a mimo to podczas wyświetlania pojawiają się komunikaty na czerwono?
Programik wygląda tak:
 

import java.util.Scanner;

public class Tablica 
{
	int size;
	int tab [] = new int [size];
	
	public Tablica(int size)
	{
		this.size=size;
	}
	
	public void rozmiarTablicy()
	{
		Scanner scanner = new Scanner(System.in);
		System.out.print("Podaj rozmiar tablicy: ");
		size=scanner.nextInt();
		
	}
	
	public void ustawLiczby()
	{
		tab = new int [size];
		Scanner scanner = new Scanner(System.in);
		System.out.print("Podaj " + size + " liczb(y) do wpisania do tablicy: ");
		
		for(int i=0; i<tab.length; i++)
		{
			tab[i]=scanner.nextInt();
		}
		System.out.println("");
		scanner.close();
	}
	
	public void zapisaneLiczby()
	{
		System.out.print("Zapisane liczby to: ");
		for(int i=0; i<tab.length; i++)
		{
			System.out.print(tab[i]+"|");
		}
		System.out.println("");
	}
	
	public void srednia()
	{
		float sum=0;
		float srednia=0;
		
		for(int i=0; i<tab.length; i++)
		{
			sum+=tab[i];
			srednia=sum/size;			
		}
		System.out.print("Suma to: " + sum + "\n");
		System.out.print("Średnia to: " + srednia + "\n" );
		
	}
	
	public void znajdzMinMaxElement()
	{
		/*find max*/
		int max=0;
		int min=2147483647;
		
		for(int i=0; i<tab.length; i++) 
		{
			if (max<tab[i]) //maksymalny element
			{
				max=tab[i];
			}
			
			if(min>tab[i]) //minimalny element
			{
				min=tab[i];
			}
		}
		System.out.print("Największy element to: " + max + "\n");
		System.out.print("Najmniejszy element to:" + min + "\n");
	}

	public void nowyRozmiar()
	{	Scanner scanner = new Scanner(System.in);
		System.out.print("Podaj nowy rozmiar tablicy: ");
		size=scanner.nextInt();
		int tab [] = new int [size];
		scanner.close();
		System.out.print("Nowa długość tablicy to: "+ tab.length);
		
		
	}
}
public class Wywolanie
 {

	public static void main(String[] args) {
		
		Tablica tablica = new Tablica(1);
		tablica.rozmiarTablicy();
		tablica.ustawLiczby();
		tablica.zapisaneLiczby();
		tablica.srednia();
		tablica.znajdzMinMaxElement();
		tablica.nowyRozmiar();

	}
}

A błędy wyglądają tak:
 

Podaj rozmiar tablicy: 2
Podaj 2 liczb(y) do wpisania do tablicy: 3
2

Zapisane liczby to: 3|2|
Suma to: 5.0
Średnia to: 2.5
Największy element to: 3
Najmniejszy element to:2
Podaj nowy rozmiar tablicy: Exception in thread "main" java.util.NoSuchElementException
	at java.util.Scanner.throwFor(Unknown Source)
	at java.util.Scanner.next(Unknown Source)
	at java.util.Scanner.nextInt(Unknown Source)
	at java.util.Scanner.nextInt(Unknown Source)
	at Tablica.nowyRozmiar(Tablica.java:85)
	at Wywolanie.main(Wywolanie.java:12)

Byłabym ogromnie wdzięczna za skorygowanie mojego błędu. :)

1 odpowiedź

0 głosów
odpowiedź 7 maja 2019 przez JuniorPL Użytkownik (770 p.)

Doprowadziłem program do poprawnego działania.

Klasa Tablica

import java.util.Scanner;

public class Tablica {

    int size;
    int tab [] = new int [size];


    public Tablica(int size)
    {
        this.size=size;
    }

    public void rozmiarTablicy()
    {
        Scanner scanner = new Scanner(System.in);
        System.out.print("Podaj rozmiar tablicy: ");
        size=scanner.nextInt();

    }

    public void ustawLiczby()
    {
        tab = new int [size];
        Scanner scanner = new Scanner(System.in);
        System.out.print("Podaj " + size + " liczb(y) do wpisania do tablicy: ");

        for(int i=0; i<tab.length; i++)
        {
            tab[i]=Integer.parseInt(scanner.nextLine());
        }
        System.out.println("");

    }

    public void zapisaneLiczby()
    {
        System.out.print("Zapisane liczby to: ");
        for(int i=0; i<tab.length; i++)
        {
            System.out.print(tab[i]+"|");
        }
        System.out.println("");
    }

    public void srednia()
    {
        float sum=0;
        float srednia=0;

        for(int i=0; i<tab.length; i++)
        {
            sum+=tab[i];
            srednia=sum/size;
        }
        System.out.print("Suma to: " + sum + "\n");
        System.out.print("Średnia to: " + srednia + "\n" );

    }

    public void znajdzMinMaxElement()
    {
        /*find max*/
        int max=tab[0];
        int min=tab[0];

        for(int i=0; i<tab.length - 1; i++)
        {

            if(min > tab[i+1])
            {
                min = tab[i+1];
            }
         if(max<tab[i+1])
             {
            max = tab[i+1];
             }

        }
        System.out.print("Największy element to: " + max + "\n");
        System.out.print("Najmniejszy element to:" + min + "\n");
    }

    public void nowyRozmiar()
    {   Scanner scanner = new Scanner(System.in);
        System.out.print("Podaj nowy rozmiar tablicy: ");
        size = scanner.nextInt();
        tab = null;
        int tab [] = new int [size];
        scanner.close();
        System.out.print("Nowa długość tablicy to: "+ tab.length);


    }


}

Program główny:


public class Wywolanie {

    public static void main(String[] args) {

        Tablica tablica = new Tablica(1);
       tablica.rozmiarTablicy();
        tablica.ustawLiczby();
        tablica.zapisaneLiczby();
        tablica.srednia();
       tablica.znajdzMinMaxElement();
        tablica.nowyRozmiar();

    }

}

Program pomimo poprawnego działania zawiera wiele błędów. Należy dodać instrukcję try catch w miejscach pobierania wartosci. Nie użyłaś modyfikatorów dostępu, wszystkie pola domyślnie są prywatne. Dobrze żeby wielkosci max oraz min były polami klasy. Ponad to lepszym wyborem niż tablica była by ArrayList ale myślę że na to przyjdzie czas. Zalecam trzymanie się wyłącznie angielskich nazw nie tylko zmiennych ale również metod.

2
komentarz 7 maja 2019 przez Aisekai Nałogowiec (42,190 p.)

wszystkie pola domyślnie są prywatne

 Domyślny scope w Javie to package-scope. 

Podobne pytania

0 głosów
2 odpowiedzi 226 wizyt
pytanie zadane 13 marca 2019 w Sprzęt komputerowy przez krystian1997 Obywatel (1,020 p.)
0 głosów
2 odpowiedzi 164 wizyt
0 głosów
2 odpowiedzi 211 wizyt
pytanie zadane 16 stycznia 2020 w Java przez Curiosis Użytkownik (540 p.)

92,626 zapytań

141,488 odpowiedzi

319,852 komentarzy

62,009 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!

...