Obliczanie średniej - ilość krzeseł w pokojach

0
Chair[] chair1 = {new Chair("123"),new Chair("124"),new Chair("125"), new Chair("126")};
		Chair[] chair2 = {new Chair("321"),new Chair("322"),new Chair("323")};
	    Chair[] chair3 = {new Chair("189"),new Chair("148")};

Room room1 = new Room("pokoj1", chair1); 
		 Room room2 = new Room("pokoj2", chair2);
	     Room room3 = new Room("pokoj3", chair3);
		
	     Room[] rooms = new Room[]{room1, room2, room3};

Prosze o pomoc.
Chcę obliczyć średnią ilość krzeseł w pokojach. Czy ten kod jest poprawny:

private double getAverage(Room[] rooms) {

		int sum=0;
		
		for (int s=0; s <= rooms[s].chairs.length; s++){
			
    		sum=sum+((rooms[s].chairs.length));
    			
    	         }
		double average = sum /rooms.length;
		
		
		return average;
	}

poprawienie tematu wątku + dodanie tagu Java - fp

1

Nie, w Javie dzielenie a/b gdy a oraz b są typu całkowitego daje wynik całkowity. Trzeba jedną z liczb rzutować

((double)a)/b
0

Poprawiłam na: double average = ((double)sum) /rooms.length;

Ale wyświetla błąd:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
at drugi.ChairStat.getAverage(ChairStat.java:15)

w linicje 15, czyli:

for (int s=0; s <= rooms[s].chairs.length; s++){

Help!

dodanie znaczników <code class="java"> oraz <quote> dla treści błędu - fp

1

Wychodzisz poza zakres tablicy, zamień <= na <, ponieważ masz rooms[s].chairs.length elementów o indeksach: 0 .. roms[s].chairs.length-1.

0

Próbowałam :

for (int s=0; s <= (rooms[s].chairs.length-1); s++){

albo :

for (int s=0; s < (rooms[s].chairs.length); s++){

i w obu przypadkach żle liczy średnią. Tylko z elementów z dwóch pokoi, zamiast z trzech pokoi. Pomocy!

dodanie znaczników <code class="java"> - fp

1

Hm, w ogóle jak na to patrzę, to coś dziwnie to napisałaś.

for (int i=0; i<rooms.length; i++)
 sum += rooms[i].chairs.length;
0

Poprawiłam i działa:

private double getAverage(Room[] rooms) {

		int sum=0;
		//rooms[s].chairs.length)
		
		for (int s=0; s<rooms.length; s++)
		
		{
			sum += rooms[s].chairs.length;
    	
    	}
		double average = ((double)sum) /rooms.length;
		
		return average;
	}

Pytanie: Czy musi być:

double average = ((double)sum) /rooms.length;

czy wystarczy :

double average = sum /rooms.length;

bo to są krzesła, a raczej 2.66666 krzesła to nie widziałam;)

dodanie znaczników <code class="java"> - fp

1

bo to są krzesła, a raczej 2.66666 krzesła to nie widziałam;)

Ale zapewne średnią np.z ocen 4.6 widziałaś, chociaż oceny są liczbami naturalnymi ;)
Jak chcesz, to możesz oczywiście zmienić: po prostu stracisz wtedy tę część ułamkową, nic więcej.

Edit: oraz ofc.wtedy zamień dodatkowo typ zmiennej average na int.

0
double average = ((double)sum) /rooms.length;

musi byś ale możesz zaokrąglić i zamienić na inta ;)

int avR = (int) (average+0.5)
0

Odnośnie:
Edit: oraz ofc.wtedy zamień dodatkowo typ zmiennej average na int.
Tak było podane w zadaniu:

private double getAverage(Room[] rooms) {

i teraz nie wiem czy chcą żeby wyświetlać z 2 czy 2.0.
Dzięki za pomoc.
A mogę jeszcze zapytać o inna część kodu?

dodanie znacznika <code class="java"> - fp

0

Jak poprawić tą metodę by wyszukał krzeslo o numerze 322 i wyśwteilił w którym pokoju jest to krzeslo?

private Room findChair(Room[] rooms, String inventoryNumber) {
		
		//Chair[] chair1 = {new Chair("123"),new Chair("124"),new Chair("125"), new Chair("126")};
		//Chair[] chair2 = {new Chair("321"),new Chair("322"),new Chair("323")};
	        //Chair[] chair3 = {new Chair("189"),new Chair("148")};
		
	        	
	    	for (int s=0; s<(rooms[s].chairs.length); s++){
	    	if (rooms[s].chairs.getinventoryNumber() == "200"){
	    		System.out.println("równe");
	    		System.out.println("nazwa pokoju ="+rooms[s].getName());}
		   		else
		    	{System.out.println("nie jest równe");	}

		    	}
	
	    		
		return new Room("dummy room",null);
 }



W klasie chair (w pakiecie z klasą o której kod pytałam wczesniej) znajduje się. Jak odwołać się do  getInventoryNumber() by wyświetlać numer w findChair()?

package drugi;

public class Chair {
	private String inventoryNumber;

	
	public Chair(String inventoryNumber) {
		this.inventoryNumber = inventoryNumber;
	}

	public String getInventoryNumber() {
		return inventoryNumber;
	}

	public void setInventoryNumber(String inventoryNumber) {
		this.inventoryNumber = inventoryNumber;
	}
	
	
}

	
	public String getName() {
		return name;
	}

dodanie po raz kolejny znaczników <code class="java"> - fp

0
ewa222 napisał(a)

A mogę jeszcze zapytać o inna część kodu?

Pytaj ile chcesz, tylko pamiętaj o wstawianiu kodu do specjalnych znaczników kolorujących składnię:

<code class="java">tutaj kod</code>

bo jak do tej pory, to każdy Twój post @ewa222 w tym wątku trzeba było poprawić...

0

Zapewne coś w rodzaju:

private Room findChair(Room[] rooms, String inventoryNumber)
{
  for (int room=0; room<rooms.length; room++)
  {
    for (int chair=0; chair<rooms[room].chairs.length; chair++)
    {
      if (rooms[room].chairs[chair].getInventoryNumber().equals(inventoryNumber))
      {
        something;
      }
    }
  }
}

Lecz masz to wszystko tak pomieszane, że sam nie wiem co jest czym :/

Btw1: skoro to jest 'inventoryNumber', dlaczego jest String-iem?
Btw2: skoro metoda nazywa się findChair, to zwracanie w tym wypadku obiektu pokoju jest niezbyt logiczne...

0

Dziękuje za uwagę o znacznikach Furious Programming.

Odnoście
Btw2: skoro metoda nazywa się findChair, to zwracanie w tym wypadku obiektu pokoju jest niezbyt logiczne...

Ponieważ krzesla sa w tablicy pokoje i ma być zrwacana nazwa pokoju w którym jest krzeslo z tym numerem:

Chair[] chair1 = {new Chair("123"),new Chair("124"),new Chair("125")/*, new Chair("126")*/};
		Chair[] chair2 = {new Chair("321"),new Chair("322"),new Chair("323")};
	    Chair[] chair3 = {new Chair("189"),new Chair("148")};
		                                
	   
		 Room pokoj1 = new Room("Writers1", chair1); 
		 Room pokoj2 = new Room("Support", chair2);
	     Room room3 = new Room("Architects", chair3);
		
	     Room[] pokoje = new Room[]{pokoj1, pokoj2, pokoj3};

co powinna zwracać ta metoda?

private Room findChair(Room[] rooms, String inventoryNumber)
{
  for (int room=0; room<rooms.length; room++)
  {
    for (int chair=0; chair<rooms[room].chairs.length; chair++)
    {
      if (rooms[room].chairs[chair].getInventoryNumber().equals(inventoryNumber))
      {
        something;
      }
    }
  }
}
return new Room(room ,"322");

dobrze?

0

dobrze?

Masz return poza kodem metody, a poza tym w miejsce tego something; powinnaś właśnie wpisać kod, który ma zostać wykonany po odnalezieniu danego krzesła, np.:

private Room findChair(Room[] rooms, String inventoryNumber)
{
  for (int room=0; room<rooms.length; room++)
  {
    for (int chair=0; chair<rooms[room].chairs.length; chair++)
    {
      if (rooms[room].chairs[chair].getInventoryNumber().equals(inventoryNumber))
      {
        return rooms[room];
      }
    }
  }

  return null; // nie odnaleziono
}
0

Wysłałam posta przed Twoja odpowiedzią.

1 użytkowników online, w tym zalogowanych: 0, gości: 1