Попытка распечатать данные показывает Null - PullRequest
0 голосов
/ 18 марта 2020

Я хочу немного помочь с кодом, который я написал в качестве примера. И в настоящее время я использую Блокнот Atom для своих кодов.

Постановка проблемы:

Взять пользовательский ввод для Сведения о самолете.

Ожидаемый вывод:

Распечатайте введенные пользователем данные.

Проблема:

Я могу успешно принять ввод от пользователя, но во время печати все значения отображаются как NULL.

КОД:

import java.util.*;
class Planes{
  String Name;
  int Number_of_Pylons;
  String Type;

  void EnterValues()
    {
      Scanner s=new Scanner(System.in);
      System.out.println("NAME: ");
      String Name=s.nextLine();
      System.out.println("PYLONS: ");
      int Number_of_Pylons=s.nextInt();
      s.nextLine();
      System.out.print("TYPE OF CRAFT: ");
      String Type=s.nextLine();
    }


};
class Base{
  public static void main(String args[]){
    Planes air[]=new Planes[2];//DID NOT CREATE OBJECTS, REFERENCE ARRAY!!!!!!!!!
    for(int j=0;j<2;j++){
      air[j]=new Planes();
    }// CREATED OBJECTS OF CLASS PLANE!!!!!!!!!
    int i=0;
    for(i=0;i<2;i++)
    {
      System.out.println("Enter values for the planes:");
      air[i].EnterValues();
    }
    System.out.println(air[0].Name);//Test for Print, prints NULL idk why :(
      for(i=0;i<2;i++)//Display the Entered Details
      {
      System.out.println("Name: "+air[i].Name+"Number of Pylons: "+air[i].Number_of_Pylons+"Type: "+air[i].Type);
      }
    }
  };

Это довольно простой код, но я не могу заставить его работать. Также прошу прощения за мой Engli sh. Это не мой родной язык.

Ответы [ 2 ]

1 голос
/ 18 марта 2020

Классическая проблема c. Я думаю, что вы не изучили концепцию объема в Java.

class Planes{
  String Name;  //instance variable
  int Number_of_Pylons;//instance variable
  String Type;//instance variable

  void EnterValues()
    {
      Scanner s=new Scanner(System.in);
      System.out.println("NAME: ");
      String Name=s.nextLine(); //local variable
      System.out.println("PYLONS: ");
      int Number_of_Pylons=s.nextInt(); //local variable
      s.nextLine();
      System.out.print("TYPE OF CRAFT: ");
      String Type=s.nextLine(); //local variable
    }


};

Я прокомментировал приведенный выше код о типе переменных, которые вы использовали. Поэтому, если вы напишите что-то вроде

String Name=s.nextLine(); 

, он просто присваивает значение вашей локальной переменной Name, область действия которой находится внутри одной функции. Это ничего не назначает вашему объекту. Если вы хотите присвоить значения свойствам объекта, это должно быть сделано следующим образом:

this.Name=s.nextLine();

Когда вы указываете это this, область действия - уровень экземпляра. Теперь ваше свойство объекта Name имеет значение. Точно так же и для других. Вы можете исправить оставшееся и заставить его работать.

Кстати, используемые соглашения об именах, форматирование кода и т. Д. c., Похоже на модель .Net. Ознакомьтесь с лучшими практиками в java кодировании - потому что здесь все сломано!.

0 голосов
/ 18 марта 2020

Вы запросили значения у пользователя, но не установили эти значения для текущего объекта

void EnterValues(){
    Scanner s = new Scanner(System.in);

    System.out.println("NAME: ");
    this.name = s.nextLine(); // assign the value to the object's name

    System.out.println("PYLONS: ");
    this.number_of_Pylons=s.nextInt();
    s.nextLine();

    System.out.print("TYPE OF CRAFT: ");
    this.type=s.nextLine();
}

Кроме того, Java соглашение об использовании lowerCamelCase для имен переменных

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...