Bhavishya Jain Ответов: 2

Приведенный ниже код нуждается в некоторых изменениях. Он печатает только значения в последнем индексе массива. Пожалуйста, предложите некоторые изменения.


Вот эти два кода:
1.Avenger.java
package com.avengers;

public class Avenger {

     String[] name = {"Iron Man","Captain America","Thor","Black Widow","Hulk"};
     String[] weapon = {"Repulsor","Shield","Stormbreaker","Baton","Mjolnir"};
     String[] planet = {"Titan","Earth","Asgard","Vormir","Sakaar"};
     int[] age = {48,27,1500,34,58};
     int[] power = {9,10,20,6,8};
     String names,weapons,planets;
     int ages,powers;

    public void getDetails() {
        for(int i=0;i<5;i++){
            names = name[i];
            ages = age[i];
            powers = power[i];
            weapons = weapon[i];
            planets = planet[i];
        }
    }

    public void displayDetails() {
            System.out.println("Name: " + names);
            System.out.println("Age: " + ages);
            System.out.println("Power: " + powers);
            System.out.println("Weapon: " + weapons);
            System.out.println("Planet: " + planets);
        }
}


2.Main.java
package com.avengers;

public class Main {

    public static void main(String[] args) {

        Avenger[] avenger=new Avenger[5];
        for(int i=0;i<5;i++)
        {
            avenger[i]=new Avenger();
            avenger[i].getDetails();
            System.out.println("Data at index "+i);
            avenger[i].displayDetails();
        }

    }
}


Что я уже пробовал:

Я попытался распечатать все свойства объекта avenger, но он печатает только значения последнего индекса массива, то есть данные Hulk.

2 Ответов

Рейтинг:
2

Nelek

Это происходит потому, что ваш GetDetails в main вызывается в цикле for, а функция GetDetails уже имеет другой цикл for.

Таким образом, возвращаемое значение, которое вы получаете, является последним.

Измените функцию GetDetails так, чтобы она возвращала только одну позицию массива и указывала эту позицию в качестве параметра


EDIT: кроме того, просто мысль.
Я бы изменил то, как ты называешь вещи.
В моем случае я использую "имена" для массива и "имя" как одно значение.

Я имею в виду:

String[] names = {"Iron Man","Captain America","Thor","Black Widow","Hulk"};
...
...
...
name = names[i]


Рейтинг:
2

CPallini

Я полагаю, что вы должны закончить с множеством Мстителей.
Попробуйте, например:

public class Avenger
{
  String name , weapon,planet;
  int age , power;

  public Avenger(String name, String weapon, String planet,int  age, int power )
  {
    this.name = name;
    this.weapon = weapon;
    this.planet = planet;
    this. age = age;
    this.power = power;
  }

  public void displayDetails()
  {
    System.out.println("Name: " + name);
    System.out.println("Age: " + age);
    System.out.println("Power: " + power);
    System.out.println("Weapon: " + weapon);
    System.out.println("Planet: " + planet);
  }

  public static void main( String arg[])
  {
    Avenger [] avenger = AvengerFactory.getAvengers();
    for (Avenger a : avenger)
    {
      a.displayDetails();
      System.out.println();
    }
  }
}

class AvengerFactory
{

  final static int Avengers = 5;
  final static String[] name = {"Iron Man","Captain America","Thor","Black Widow","Hulk"};
  final static String[] weapon = {"Repulsor","Shield","Stormbreaker","Baton","Mjolnir"};
  final static String[] planet = {"Titan","Earth","Asgard","Vormir","Sakaar"};
  final static int[] age = {48,27,1500,34,58};
  final static int[] power = {9,10,20,6,8};

  static Avenger [] s_avenger = null;

  public static Avenger[] getAvengers()
  {
    if ( s_avenger == null )
      createAvengers();
    return s_avenger;
  }

  static void createAvengers()
  {
    s_avenger = new Avenger[Avengers];
    for (int i=0; i<Avengers; ++i)
    {
      s_avenger[i] = new Avenger(name[i], weapon[i], planet[i], age[i], power[i]);
    }
  }
}