Gelo Reuterez Ответов: 2

Что не так с этим кодом, почему цепочка конструкторов не работает?


import java.util.Scanner;
class BloodData{
	 private String bloodType;
	 private String rhFactor;
	 
	 public BloodData(){
		bloodType = "O";
		rhFactor = "+";
	 }
	 public BloodData(String bt, String rh){
		 this.bloodType = bt;
		 this.rhFactor = rh;
	 }
	 public void display() {
		 System.out.println(bloodType+rhFactor+" is added to the blood bank");
	 }
	 public static void main(String[] args) {
		 Scanner in = new Scanner(System.in);
		 System.out.println("Enter Blood Type(O, A, B, AB)");
		 System.out.println("Enter rhFactor('+' or '-')");
		 String x = in.nextLine();
		 String y = in.nextLine();
		 BloodData bd = new BloodData(x, y);
		 bd = new BloodData();
		 bd.display();	 
	} 
}


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

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

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

2 Ответов

Рейтинг:
1

Sandeep Mewara

Цитата:
я хочу, чтобы пользователь ввел две строки, чтобы запустить второй конструктор, и если они ничего не введут, то запустится конструктор по умолчанию

String x = in.nextLine();
String y = in.nextLine();
BloodData bd = new BloodData(x, y);
bd = new BloodData();
bd.display();

Основываясь на вашем требовании, приведенный выше код ничего не делает. У вас нет логики, чтобы проверить, были ли введены строки или нет. Вместо этого, вы используете ту же самую переменную, чтобы определить объект BloodData. По умолчанию без параметров, являющихся последним вызовом. Таким образом, отображение делает жестко закодированный O+ve всегда независимо от того, что вы вводите или нет.

Это не случай цепочки конструкторов. Это простая логическая задача, и ваши конструкторы будут вызваны, как и ожидалось. Вы, кажется, упускаете ключевой аспект программирования - использование отладчика. Используя его в IDE, он поможет вам понять каждую строку и то, как она выполняется.

Для обучения отладке:
jdb - отладчик Java[^]
Отладка среды разработки Eclipse IDE для разработчиков Java | The Eclipse Foundation[^]


CPallini

5.

Рейтинг:
0

CPallini

Цитата:
BloodData bd = new BloodData(x, y); // здесь вызываются два параметра ctor, созданному соответствующему объекту присваивается bd
bd = new BloodData(); // здесь вызывается ctor по умолчанию, вновь созданный объект присваивается bd (Предыдущее значение bd, прежнего объекта, теряется)

Вы переназначаете одну и ту же переменную с другим экземпляром класса.
Пытаясь
BloodData bd = new BloodData(x, y);
 bd.display(); // show the object created via the 2 params ctor
 bd = new BloodData(); // reassign bd
 bd.display(); // show the newly created object via the default ctor

(или использование, как было предложено, отладчика), вероятно, прольет на вас некоторый свет.