tablica w konstruktorze

0

Witam
Mam do napisania konstruktor z argumentami imię,nazwisko,liczba egzaminów, który generuje losowo tablice ocen
napisałem coś takiego, ale wyrzuca błędy, jak to powinno wyglądać?
i mam drugie pytanko, jak użyć random, aby dostać losowe liczby od 2 do 5 z połówkami(czyli np. 2.0, 3.5, 4.0)?

public class student {
private String imie;
private String nazwisko;
private int nralbumu;
private int liczbaegzaminow;
private double[] tablicaocen;
Random los = new Random();
	student(String imie,String nazwisko,int nralbumu,int liczbaegzaminow){
		this.imie=imie;
		this.nazwisko=nazwisko;
		this.nralbumu=nralbumu;
		this.liczbaegzaminow=liczbaegzaminow;
        for(int i=0;i<this.liczbaegzaminow;i++){
		tablicaocen[i]=los.nextDouble();
        }
        }
1
  1. brak pola nralbumu. Próbujesz przypisać do niego wartość w konstruktorze a nie ma w ogóle takiego pola.
  2. Możesz stworzyć tablice z wszystkimi ocenami i losować indeks z przedziału 0.. ilość ocen -1.
  3. Nazwy klas w języku java powinny zaczynać sie od wielkiej litery, a zmienne i pola powinny być pisane camelCasem
0

jest pole nralbumu, przy wklejaniu mi się usunęło, błedy to
Exception in thread "main" java.lang.NullPointerException
at student.<init>(student.java:17)
at apk.main(apk.java:5)

1

Wypadałoby jeszcze stworzyć te tablice przez new. Najlepiej w konstruktorze tuż przed petla

0

a mam jeszcze jedno pytanko
mam metode i wyrzuca mi błąd Exception in thread "main" java.lang.NullPointerException
at student.srednia(student.java:30)
at apk.main(apk.java:7)
Wiesz czemu tak jest?

public double srednia(){
	double suma=0;
	for(int i=0; i<this.tablicaocen.length;i++){
		suma+=this.tablicaocen[i];
	}
	
	return suma/tablicaocen.length;	
}
1

Niestety nie wiem która to linia 30 w klasie student (serio, przeczytaj mój pierwszy post i zmień nazwy klas i zmiennych). Najlepiej uruchom debugger i sprawdź co jest nullem

0

tak wyglada klasa student


import java.util.Random;


public class student {
private String imie;
private String nazwisko;
private int nralbumu;
private int liczbaegzaminow;
private double[] tablicaocen;
Random los = new Random();
	student(String imie,String nazwisko,int nralbumu,int liczbaegzaminow){
		this.imie=imie;
		this.nazwisko=nazwisko;
		this.nralbumu=nralbumu;
		this.liczbaegzaminow=liczbaegzaminow;
		double[] tablicaocen = new double [liczbaegzaminow];
		double[] oceny = new double []{2.0,2.5,3.0,3.5,4.0,4.5,5.0};
        for(int i=0;i<this.liczbaegzaminow;i++){
        	tablicaocen[i]=oceny[los.nextInt(7)];
        }
        }
public void sprawdz(int nralbumu){
if(this.nralbumu==nralbumu)
	System.out.println("istnieje");
else
	System.out.println("nieistnieje");
}
public double srednia(){
	double suma=0;
	for(int i=0; i<this.tablicaocen.length;i++){
		suma+=this.tablicaocen[i];
	}
	
	return suma/tablicaocen.length;	
}
public void wypisz(){
	System.out.println("imie "+ this.imie+" nazwisko "+this.nazwisko);
}
public int liczbadwoj(){
	//for(student std:student)
	
	return 0;
	
}
}
0

dlaczego ten konstruktor, nie wypełnia tablicy ocenami?

public class student {
private String imie;
private String nazwisko;
private int nralbumu;
private int liczbaegzaminow;
private double[] tablicaocen;
Random los = new Random();
	student(String imie,String nazwisko,int nralbumu,int liczbaegzaminow){
		this.imie=imie;
		this.nazwisko=nazwisko;
		this.nralbumu=nralbumu;
		this.liczbaegzaminow=liczbaegzaminow;
		double[] tablicaocen = new double [liczbaegzaminow];
        for(int i=0;i<this.liczbaegzaminow;i++){
        	int a =los.nextInt(7);
        	tablicaocen[i]=2.0+0.5*a;
        }
        }
1

Bo double[] tablicaocen = new double [liczbaegzaminow]; tworzy zmienną lokalną tablicaocen, która jest niszczona zaraz po wyjściu z konstruktora. Zamień to na this.tablicaocen = new double [liczbaegzaminow];

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.