【问题标题】:Increase Array Size Based on Total Numbers Entered根据输入的总数增加数组大小
【发布时间】:2015-06-12 15:02:51
【问题描述】:

我在根据输入到数组中的数字总数创建数组时遇到问题。

基本上,该程序应按以下方式工作:提示用户输入 n 个数字以输入数组。因此,在用户输入“000”作为输入之前,系统将提示用户输入新号码。

注意:对于这个数组,我不希望用户输入他们想要为数组大小输入的数字数量。相反,我希望用户继续输入随机数,直到输入“000”,然后,输入到数组中的数字总数就是该数组的大小。

例如:如果我们有 int array[] = {1, 2, 4, 6},这将起作用,这将自动将数组大小设置为 4,而无需实际明确地将数组大小声明为 4 个元素。同样,在我的代码中,我希望将用户输入的数字添加到数组中,然后根据用户输入的数字量自动给出数组大小,就像上面一样。

需要注意的是,在用户输入所有 n 个数字之前,我们确实知道数组的长度。

我尝试了一个骨架,但它返回一个找不到符号错误:

代码:

//Array Code           
import java.util.*;

class setArray {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int stopInput = 000;
        int number;

        System.out.print("Enter a number: ");
        number = input.nextInt();

        while(number != stopInput) {
            System.out.print("Enter a number: ");
            number = input.nextInt();
            int array[] = {number};
        }       
       System.out.print("Array size: " + array.length);
    } // Main brace
} // Class brace
setArray.java:19: 错误:找不到符号
    System.out.print("数组大小:" + array.length);
      符号:变量数组
      位置:类 setArray
    1 个错误

【问题讨论】:

  • 我猜这是一个家庭作业,你可能不会简单地使用一个列表?
  • 这不是家庭作业。我是编程新手,所以我从没想过要使用“列表”。
  • 好的,无意冒犯!然后我会列出一个列表 - 我想你可以在这里选择一个答案;)

标签: java arrays


【解决方案1】:

这里有一些错误。首先是了解为什么会立即出现错误。变量array 在while 循环的范围内声明。在这个循环之外是看不到的。这就是编译器抱怨的原因。

第二个是数组的大小(如果在循环之外声明)将始终为 1。根据我对您为解决您所描述的问题而编写的内容的理解,表明您没有解决问题正确。

虽然您不知道要输入的数组的最终长度;您确实需要存储输入的值(我的推论)以填充最终数组。要存储用户输入的值,您需要一个会随着输入而增长的列表。

List<Integer> values = new ArrayList<>();

while (number != stopInput) {
  System.out.print("Enter a number: ");
  values.add(Integer.valueOf(input.nextInt()));
}

Integer[] array = values.toArray(new Integer[values.size()]);

【讨论】:

  • values.toArray 是做什么的?每当我将其添加到其中时,它都会导致以下错误消息:java 18:错误:找不到适合 toArray(int[]) 的 java 方法以及两个响应框大小的大型不适用错误消息。
  • @Baleroc,我纠正了我的代码中的一个错误; int 应该是 Integervalues.toArray() 方法将List&lt;Integer&gt;(动态调整大小)转换为Integer[](具有固定大小);即将列表转换为数组。
【解决方案2】:

首先,编译错误是因为array 变量在System.out.println 行中不可见。这是因为它是在while循环内声明的,所以只在while循环内可见。

要使其对整个方法可见,请在 while 循环之前声明它。

其次,数组不能调整大小。您将数组声明为特定大小,并且不能添加或删除元素。

我的建议是使用ArrayList。在循环之前声明一个,然后在循环内添加新数字。循环之后,大小应该是输入了多少个数字。

最后,0000 之间没有区别。 0 是一个有效的输入数字吗?

【讨论】:

  • 你是对的。 000 和 0 没有区别。因此,为简单起见,我将输入从 000 更改为 012。
  • 但这意味着你不能使用数字 12。在数字前面添加 0 没有任何区别。
  • 您是否建议将其转换为字符串,然后将 int 每个字符串解析为整数,然后 if stopInput = # then inputNumbers = false
  • 您已经使用了扫描仪。 Scanner 有一个名为 hasNextInt() 的方法,它可能有用...
  • 嗯,似乎有人对此表示反对。任何改进答案的建议都将受到欢迎。
【解决方案3】:

你可以使用

List<Integer> array=new ArrayList<Integer>();
while(number != stopInput) {
      System.out.print("Enter a number: ");
      number = input.nextInt();
      array.add(number);
  }   

【讨论】:

    【解决方案4】:

    这听起来像是 java.util.ArrayList 的工作 - 这是一个没有固定大小的数组,并且随着您在幕后自动添加值而不断增长。

    【讨论】:

      【解决方案5】:

      该错误是因为您仅在 while 循环范围内创建数组。您需要在循环之外创建它。其次,标准数组不是动态的,因此您需要设置大小并根据需要增加它,或者只需使用ArrayList

      伪:

      ArrayList<Integer> list = new ArrayList<Integer>()
      ...
      while(not stop number)
        list.add(number)
      ...
      print(list.size())
      

      【讨论】:

        【解决方案6】:

        如果你真的想使用数组,你可以这样做

        public static void main(String[] args){
            STOP_ENTRY = "000";
            scan = new Scanner(System.in);
            entry = "";
            while(true){
                System.out.print("Enter #: ");
                String tempS = scan.nextLine();
                if(tempS.equals(STOP_ENTRY)) break;
                else entry += tempS + ":";
            }
            String[] split = entry.split(":");
            int[] intArray = new int[split.length];
            System.out.println("Length of created intArray = " + intArray.length); //length of created array
        
            for(int i = 0; i < intArray.length; i++){
                intArray[i] = Integer.parseInt(split[i]);
                System.out.println("intArray[" + i + "] => " + String.valueOf(intArray[i]));
            }
        
        }
        

        我会推荐一个 ArrayList,因为它会在您添加元素时动态更改大小,但可以随心所欲。

        重要说明,这不会处理您可能不想要的任何恶意输入(字符、符号),并且如果输入它们会出错,如果需要,您可以轻松添加一些内容

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-04-27
          • 2023-03-23
          • 1970-01-01
          • 2017-07-14
          • 1970-01-01
          • 1970-01-01
          • 2015-08-18
          • 1970-01-01
          相关资源
          最近更新 更多