【问题标题】:Changing the variable assigned everytime a loop iterates每次循环迭代时更改分配的变量
【发布时间】:2013-07-23 20:51:40
【问题描述】:

我正在尝试构建一个程序,该程序允许用户输入对象的长度和宽度,无论我选择多少次(我会构建更多代码来选择循环执行多少次)。我在弄清楚每次循环迭代时如何获取输入和构造对象时遇到了一些问题。谢谢!

public static void main(String[] args) 
{
    Scanner console = new Scanner(System.in);

    for (int i = 1; i <= 2; i++)
    {
        System.out.println("Enter length" + i + ": ");
        int length i = console.nextInt();

        System.out.println("Enter length" + i + ": ");
        int width i = console.nextInt();

        OBJECT instance1 = new OBJECT(length1, width1);
    }


}

【问题讨论】:

  • OBJECT 不应该全部大写。无论如何,我会使用一个数组。第三件事:应该是int length = console.nextInt();。 i 是无关紧要的。
  • OBJECT 在我的代码中并非全部大写,只是从我晦涩的实际名称中更改了它,因为我不包括该类。将长度和宽度更改为数组会起作用,但是可以通过类构造函数来完成吗?
  • 是的,构造函数可以接受零个或多个对象或原语(不包括仅在内部使用的 return_address)。数组就是对象。

标签: java oop object for-loop


【解决方案1】:

您可以使用ArrayList/LinkList,如果您的条目很大,那么只使用LinkList。

Scanner console = new Scanner(System.in);
System.out.println("Enter how many records you want: ");
int j = console.nextInt(); //"Loop will run "+ j +" times"
List<ObjectName> objectList = new ArrayList<ObjectName>();
int length = 0;
int width = 0;

for (int i = 1; i <= j; i++)
{
  System.out.println("Enter length" + i + ": ");
  length = console.nextInt();
  System.out.println("Enter width" + i + ": ");
  width = console.nextInt();
  ObjectName instance1 = new ObjectName(length, width);
  objectList.add(instance1);
}

【讨论】:

  • 如果您的条目很大,那么只选择 LinkList:不,ArrayList 几乎总是更好的选择。哦,它是 LinkedList
  • 肯定不是ArrayListList
  • 当我这样做,然后尝试在 ArrayList 上使用 indexOf 时,它总是返回一个 int 而不是一个对象。
  • 为此,您需要使用 get(int index) 方法。
【解决方案2】:

您需要了解如何使用 Collections API,尤其是 ListLinkedListArrayList。所以你的代码会变成:

public static void main(String[] args) {
    final Scanner console = new Scanner(System.in);

    final List<Area> objectList = new ArrayList<Area>();
    for (int i = 0; i < 2; i++) {
        System.out.println("Enter length" + (i + 1) + ": ");
        final int length = console.nextInt();

        System.out.println("Enter width" + (i + 1) + ": ");
        final int width = console.nextInt();

        final Area instance = new Area(length, width);
        objectList.add(instance);
    }
}

我在这里选择了ArrayList,因为它通常是两者中性能更好的一个(但对于不需要任何一个功能的相对较小的列表,两者都可以)。

【讨论】:

  • ArrayList 几乎总是更好的选择。
  • @JBNizet 好的,改了。如前所述,对于小列表(用户输入将是一个)并不重要,但习惯使用 ArrayList 可能会更好。