Java - Проблемы с конструктором перегрузки, содержащим только строку - PullRequest
0 голосов
/ 09 марта 2020

У меня возникают проблемы с выяснением того, как правильно запросить у пользователя 3 входа, представляющих атрибуты, которые будут использоваться для создания объекта, который будет напечатан на экране, и чтобы убедиться, что входные данные не являются плохими значениями. Например, если пользователь ввел значение .5 в качестве диаметра, он изменится на 1. Предполагается, что конструктор перегрузки представляет имя файла, который будет содержать имя, диаметр и температуру создаваемого объекта.

Когда я пытаюсь запустить его, появляются ошибки для пропущенных символов. Как получить так, чтобы конструктор перегрузки со строкой в ​​качестве единственного параметра вызывался в классе Object2 для создания объекта?

public class Object1
{
   //attributes
   private double yyy;
   private int zzz;
   private String xxx;
   private String fileName;

   //symbolic constants
   private final double MINDIAMETER = 1;
   private final int MINTEMP = 300;
   private final String NA = "N/A";

   // getter/setter methods for name
   public void setName(String n)
   {
   if (n != "")
   xxx = n;

   else 
   xxx = NA;
   }

   public String getName()
   {
   return xxx;
   }

   // getter/setter methods for diameter
   public void setDiameter(double d)
   {
   if (d >= MINDIAMETER)
   yyy = d;

   else 
   yyy = MINDIAMETER;
   }

   public double getDiameter()
   {
   return yyy;
   }

   // getter/setter methods for temperature
   public void setTemp(int t)
   {
   if (t >= MINTEMP)
   zzz = t;

   else 
   zzz = MINTEMP;
   }

   public int getTemp()
   {
   return zzz;
   }

   public Object1()
   {
      xxx = NA;
      yyy = MINDIAMETER;
      zzz = MINTEMP;
   }

   public Object1(String n, double d, int t)
   {
      setName(n);
      setDiameter(d);
      setTemp(t);
   }

   public Object1(String f)
   {
        fileName = f; //Initialize the object's fileName with f
        System.out.print("Enter the filename: ");


   }

   public String toString()
   {
      return "A object, named " + xxx + ", with a diameter of " + yyy + " miles, and a temperature of " + zzz + " Kelvin.";
   }
}

Отдельный код файла

import java.util.Scanner;
import java.io.FileWriter;
import java.io.File;
import java.io.PrintWriter;
import java.io.FileReader;
import java.io.IOException;

public class Object2
{
   public static void main(String[] args) throws IOException
   {

         // object with overload
        Object1 z;
        z = new Object1("");

        Scanner kb = new Scanner(System.in);


        fileName = kb.nextLine();
        File file = new File(fileName);
        PrintWriter outputFile = new PrintWriter(file);

        System.out.println("please enter name: ");
        while (kb.hasNext())
        {

        name = kb.nextLine();
        System.out.println("please enter the diameter: ");
        diameter = kb.nextDouble();
        System.out.println("please enter the temperature: ");
        temp = kb.nextInt();

        System.out.println(name + " " + diameter + " " + temp);

        outputFile.println(name);
        outputFile.println(diameter);
        outputFile.println(temp);
        }


        outputFile.close();
        System.out.println(z);
    }
}

1 Ответ

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

Во-первых, что-то должно измениться в вашем классе Object1.

public class Object1
{
   ...

   public void setName(String n)
   {
   if (!n.equals(""))
   xxx = n;

   else 
   xxx = NA;
   }

   ...
}

Во-вторых, вам нужно внедрить значения вашего сканера в ваш объект.

z.setName(kb.nextLine());
System.out.println("please enter the diameter: ");
z.setDiameter(kb.nextDouble());
System.out.println("please enter the temperature: ");
z.setTemp(kb.nextInt());

System.out.println(z.getName + " " + z.getDiameter + " " + z.getTemp);

outputFile.println(z.getName);
outputFile.println(z.getDiameter);
outputFile.println(z.getTemp);
...