webForumDet fria alternativet

Behöver hjälp med mina arrayer

1 svar · 1 174 visningar · startad av Alexandra

AlexandraMedlem sedan mars 20131 inlägg
#1

Hej,

Jag har fastnat. Försöker skapa ett program som läser in antal dagis barn av användaren. Sen ha en array som samlar alla objekt (har en klass för det). Sen vill jag att barnen ska kopieras till nya arrayer beroende på åldern och det är där något går fel.

import java.util.Scanner;

public class ChildRegister {

	// Instansvariabler
	// Child lagrar "barnobjekt"
	private Child[] children;

	// Konstruktor som skapar minne för arrayen
	public ChildRegister(int size) {
		children = new Child[size];
	}

	// En metod som fyller arrayen med objekt och sätter värden
	public void initialize(Scanner keyboard) {
		// Loop så att vi vet hur många gånger vi ska fråga användaren om namn,
		// födelseår
		for (int i = 0; i < children.length; i++) {
			System.out.println("Namn: ");
			String name = keyboard.nextLine();

			System.out.println("Ålder: ");
			int age = keyboard.nextInt();
			// rensa buffert
			keyboard.nextLine();

			children[i] = new Child(name, age);

		}
	}

	public void printAboveFour() {

		// Lokal variabel
		int ageAboveFour = 0;

		// Loop där antalet över eller lika med 4 läggs i ageAboveFour

		for (int i = 0; i < children.length; i++) {

			if (children[i].getAge() >= 4) {

				ageAboveFour = i;
				ageAboveFour++;
			}
		}
                
                //Den nya arrayen storlek som den gamla med längden ageAboveFour

		Child[] childrenAboveFour = new Child[ageAboveFour];

		System.out.println("Följande " + "(" + childrenAboveFour.length
				+ "st) barn är över eller exakt 4 år:");

                //Kopierar de barn med rätt ålder till nya arrayen
		for (int i = 0; i < children.length; i++) {
			if (children[i].getAge() >= 4) {
				Child child = children[i];
				childrenAboveFour[i] = child;
			}
			// Skriver ut våran toString
			System.out.println(childrenAboveFour[ageAboveFour].toString());
		}

	}

	public void printUnderFour() {

		// Lokal variabel
		int ageUnderFour = 0;

		for (int i = 0; i < children.length; i++) {

			if (children[i].getAge() < 4) {

				ageUnderFour = i;
				ageUnderFour++;
			}
		}

		// Vår nya array
		Child[] childrenUnderFour = new Child[ageUnderFour];

		// Skriver ut hur månag barn som är under fyra
		System.out.println("Följande " + "(" + childrenUnderFour.length
				+ "st) barn är under 4 år:");

		for (int i = 0; i < children.length; i++) {
			if (children[i].getAge() >= 4) {
				Child child = children[i];
				childrenUnderFour[i] = child;
				
			}

		}

		for (int i = 0; i < childrenUnderFour.length; i++) {
			
				System.out.println(childrenUnderFour[ageUnderFour].toString());

			}
		}

	public static void main(String[] args) {

		Scanner keyboard = new Scanner(System.in);
		// Lokala variabler Antal personer som ska lagras
		int nrOfChildren = 0;

		// Läsa in antalet personer
		System.out.println("Hur många barn ska registreras? ");
		nrOfChildren = keyboard.nextInt();
		keyboard.nextLine(); // Rensa buffert

		ChildRegister childRegister = new ChildRegister(nrOfChildren);
		// Anropar metoden initilize
		childRegister.initialize(keyboard);

		// Anropar våra print-metoder
		childRegister.printUnderFour();
		childRegister.printAboveFour();
	}

}

Hoppas någon kan hjälpa mig att förstå (står varken i boken och vi har inte gått igenom detta)
/Alexandra

LedelMedlem sedan dec. 2004735 inlägg
#2

Vad är det som går fel?

Sedan, i dina for-loopar som kollar barn som är under resp. över 4 år sätter du

ageUnderFour = i

följt av att du ökar den med 1 vilket innebär att ageUnderFour alltid kommer vara children.length vilket nog inte är tanken. Ta bort den raden.

Genererad på 384 ms · cache AV · v20260730165559-full.f96bc7eb