【问题标题】:How to assign default parameters to an object created from a file that does not have those parameters?如何将默认参数分配给从没有这些参数的文件创建的对象?
【发布时间】:2014-10-09 16:25:54
【问题描述】:

来自文件的信息:形状、半径/高度/宽度、颜色、填充

CIRCLE, 1, blue, true
RECTANGLE, 1, 2, blue, true
RECTANGLE, 10, 2, red, true
CIRCLE, 2, green
RECTANGLE
CIRCLE

程序:一旦到达缺少参数 true/false 的第 4 行,程序不会为其分配其他类的默认值。当文件中没有指定参数时,如何将默认参数分配给新创建的对象?

默认值为:颜色 = 白色,填充 = 假,半径 = 1,高度 = 1,宽度 = 1。

import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Scanner;

public class Driver {
    public static void main(String[] args) throws FileNotFoundException {
        Scanner input = new Scanner(new File(
                "C:/Users/Charles/Desktop/GeometricObjectsData.txt"));

        ArrayList<GeometricObject> list = new ArrayList<GeometricObject>();

        while (input.hasNextLine()) {
            String line = input.nextLine();
            String[] tokens = line.split(", ");
            if (tokens[0].equals("CIRCLE")) {
                Circle c = new Circle();
                float radius = Float.parseFloat(tokens[1]);
                c.setRadius(radius);
                String color = String.valueOf(tokens[2]);
                c.setColor(color);
                Boolean filled = Boolean.valueOf(tokens[3]);
                c.setFilled(filled);
                c.getArea();
                list.add(c);
                System.out.println(c.toString());
            } else if (tokens[0].equals("RECTANGLE")) {
                Rectangle r = new Rectangle();
                float height = Integer.parseInt(tokens[1]);
                r.setHeight(height);
                float width = Integer.parseInt(tokens[2]);
                r.setWidth(width);
                String color = String.valueOf(tokens[3]);
                r.setColor(color);
                Boolean filled = Boolean.valueOf(tokens[4]);
                r.setFilled(filled);
                r.getArea();
                list.add(r);
                System.out.println(r.toString());
            }

        }

    }

}

【问题讨论】:

    标签: java class object parameters


    【解决方案1】:

    当你使用line.split()并且文件中没有足够的参数时,你将没有tokens[1],tokens[2]等等。

    所以你必须检查令牌数组的长度,看看你是否有足够的参数。如果不是,请分配默认值。您可以先分配默认值,然后检查条件。例如:

    float radius = 1.0F;
    if (tokens.length >= 2) {
        radius = Float.parseFloat(tokens[1]);
    }
    

    【讨论】:

    • 有没有办法使用我在其他类中分配的默认值,而不仅仅是创建一个新的默认半径?就像我在 GeometricObject 类中有默认颜色/填充,在 Circle 类中有半径,在 Rectangle 类中有高度/宽度。
    • 你的问题不清楚。您的意思是在类本身中有默认值吗?当然可以。您可以在类构造函数或类中的初始化程序中设置它。但是您仍然需要拥有我编写的if 语句,以便仅在值存在时才从令牌中分配值。
    • 我还有 3 个其他类,称为 GeometricObject、Circle 和 Rectangle,在这些类中,我有将默认值分配给对象的构造函数。那么我如何调用这些对象获取默认值,而不是在主类中再次定义它们呢?
    • 您使用构造函数创建对象。然而,在驱动程序中,你有一个我写的 if 语句,但略有不同。如果 tokens.length &gt;= 2 则在 if 块内同时执行 parseFloatsetRadius。因此,如果您没有必要的参数,则该部分将被跳过,并且该对象将保留您创建时分配的默认值。
    猜你喜欢
    • 2012-11-28
    • 1970-01-01
    • 2014-12-03
    • 2014-09-29
    • 1970-01-01
    • 1970-01-01
    • 2014-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多