webForumDet fria alternativet

Behöver hjälp med mina arrayer

Java

1 svar · 1 178 visningar · startad av Alexandra

Medlem sedan mars 20131 inlägg
Frågan#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

Medlem sedan dec. 2004736 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.

252 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)