【问题标题】:Printing an array after user input用户输入后打印数组
【发布时间】:2015-06-26 22:32:48
【问题描述】:

我正在开发一个类,该类将接受用户输入以将值分配给在源类中创建的对象。然后将这些对象添加到一个数组中,然后在其上打印值。但是, print : list 下的“列表”告诉我我需要初始化变量。为什么即使它在我的 do 循环中工作正常,它也无法识别这是一个数组?

import java.util.Scanner;
import name.Names;

 public class NameTester {

 public static void main(String[] args) {
    // TODO Auto-generated method stub
    String entry;
    Scanner firstscan = new Scanner(System.in);
    Scanner lastscan = new Scanner(System.in);
    Scanner codescan = new Scanner(System.in);
    Scanner entryscan = new Scanner(System.in);
    String first;
    String last;
    int code;

    System.out
            .println("This program will prompt you to input first name, +"
                    + "last name, and zip code for an individual. Hit \"x\" when finished\n");

    do {
        System.out.println("Enter first name:");
        first = firstscan.nextLine();
        System.out.println("Enter last name:");
        last = lastscan.nextLine();
        System.out.println("Enter zip code:");
        code = codescan.nextInt();

        Names nm = new Names(first, last, code);

        Names[] list = new Names[25];

        int count = 0;
        list[count] = nm;
        count++;

        System.out
                .println("To quit hit \"X\" or any other key followed by enter to continue:");
        entry = entryscan.nextLine();

    } while (!(entry.equalsIgnoreCase("x")));

    for (Names print : list)
        System.out.println(print + "");
}
}

【问题讨论】:

    标签: java arrays printing


    【解决方案1】:

    一方面,您在循环中实例化数组,这意味着每次循环运行时,它都会创建一个新数组而不是更新旧数组。然后,一旦你离开你的循环,你就离开了它的“范围”。这意味着您在循环内声明的所有内容在外部均不可用。解决方案是在循环外声明你的数组。

    java 中的每个块都有自己的范围(通过括号定义)。虽然您可以在块内部访问已在块外部声明的变量,但反之则不行;如你看到的。只需google java范围,您就会了解更多。希望有帮助;)

    【讨论】:

    • 不是“几乎”... 每个 块(不限于 control 块)都有自己的范围...见 JLS @987654321 @和14.2. Blocks
    • 好电话,谢谢,我忘了详细说明,但我现在修好了:)
    • 这行得通,谢谢!现在奇怪的是,虽然所有内容都按应有的方式编译和执行,但我现在在程序结束时收到此错误: Exception in thread "main" java.lang.NullPointerException at name.NameTester.main(NameTester.java:53 )
    • 这意味着第 53 行有 NullPointerException,但第 53 行是什么?当您尝试使用没有值(即 null)的东西时,会发生 NullPointerException。您是否也将索引声明移出循环?否则你仍然有这个范围问题,现在是索引。
    • 是的,我将索引移出循环。第 53 行是 System.out.println(print.toString());如果我取出“toString”,它仍然会打印列表,但也会打印大约 20 次“null”。
    【解决方案2】:

    您将需要在类 Name 中返回名字、姓氏和邮政编码的方法,因为如果您只使用:

    System.out.println(print + "")

    您正在打印对象名称,而不是表示保存在对象中的属性的字符串。

    例如,您可以在类名称中包含方法:

    String getFirst()
    {
           return this.first;
    }
    

    你的类 Nametester 中的最后一行可以是

    System.out.println(print.getFirst() + "");

    【讨论】:

    • 我的 Name 类中实际上有这个。我更改了打印以使用该方法,效果很好。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2013-03-31
    • 2018-08-05
    • 1970-01-01
    • 1970-01-01
    • 2020-12-09
    • 1970-01-01
    • 1970-01-01
    • 2021-03-04
    相关资源
    最近更新 更多