【问题标题】:Analyzing arrays without known array size在不知道数组大小的情况下分析数组
【发布时间】:2015-11-10 23:14:53
【问题描述】:

我一直在四处寻找答案,并且总是找到部分回答了我的问题的东西。所以,这是我现在的代码:

import java.util.Scanner;

public class VelikaDN {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("Enter numbers: ");
        int[] array = new int[100];
        for (int i = 0; i < array.length; i++) {
            array[i] = input.nextInt();
            // Number of elements
            int counter = 0;
            for (int j = 0; j < array.length; j++) {
                if (array[j] != 0)
                    counter++;
            }
            System.out.println("This array has " + counter + " numbers.");
        }
    }
}

它有效,但最后我注意到一些事情并不像我想象的那么小。这是输出:http://i.imgur.com/3mmEpUb.png 我试图在整个代码中重新定位打印,试图以某种方式停止循环,但我失败了。我真的不知道是什么问题了。我试图放弃这个问题并执行另一项任务,但正如我已经说过的,循环之外的任何内容都没有出现。

如果这令人困惑,我很抱歉,我是 Java 新手,而且我也很不擅长解释。如果您有一些提示或替代解决方案,请随意将其扔在这里。如果我还有什么需要解释的,那就直说吧。

【问题讨论】:

  • 我很困惑。究竟是什么问题?
  • 这只是我正在做的程序的开始,现在这就是问题所在,是的。但是,当我尝试在第一个 for 循环之外使用 array.length 时,我无法做到。
  • 输入100个数字后循环结束!!!
  • 安德烈亚斯我认为他只计算不同于 0 的数字。或者这就是它的样子
  • @VelkoGeorgiev 外部for 循环将运行100 次,每次从Scanner 中取一个数字,等待更多输入。所以在输入 3 个号码后,它就坐在那里等待更多号码,直到处理完 100 个号码才会退出。

标签: java arrays loops java.util.scanner


【解决方案1】:

int counter=0;放在循环外,然后在循环后发布system.out

【讨论】:

  • 卡在什么地方?另一方面,您可以只使用 ArrayList 它可以为您提供数组大小等等
  • 它只打印出第一个打印语句。
  • 打印语句应该在第二个循环之后
【解决方案2】:

我没有看到使用 2 个嵌套的 for 循环(或 2 个单独的循环)的意义,它只是使算法复杂度 O(n^2) 您可以检查第一个循环中的值是否为 0,如果它没有增加计数器的值

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    System.out.println("Enter numbers: ");
    int[] array = new int[2];
    int counter = 0;

    for (int i = 0; i < array.length; i++) {
        array[i] = input.nextInt();

        if(array[i] != 0) {
            counter++;
        }
    }

    System.out.println("This array has " + counter + " numbers.");
}

编辑

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    System.out.println("Enter numbers: ");
    int[] array = new int[100];
    int i = 0;

    for (; i < array.length; i++) {
        int inputValue = input.nextInt();

        if(inputValue <= 0) {
            break;
        } else {
            array[i] = inputValue;
        }
    }

    System.out.println("This array has " + i + " numbers.");
}

编辑 2(图片来源 @Andreas)

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    System.out.println("Enter numbers: ");
    int[] array = new int[100];
    int i = 0;

    while (input.hasNextInt()) {
        int inputValue = input.nextInt();

        array[i++] = inputValue;
    }

    System.out.println("This array has " + i + " numbers.");
}

【讨论】:

  • 对,我是个白痴。如果我设置 int[] array = new int[100] (最大值为 100)然后用户可以输入“随机”数量的数字,是否有办法使这项工作?
  • 你熟悉 ArrayLists 吗?
  • 顺便说一句,正如@Andreas 所说的问题评论,这个循环总是会要求 100 个数字,你可以设置一些条件来避免这种情况。例如,如果引入的数字小于或等于 0,您可以中断/退出 for 循环。
  • input.nextInt()之前,插入if (! input.hasNextInt()) break;
  • 检查编辑。是一个例子。如果您的输入小于或等于 0,for 循环将停止
猜你喜欢
  • 2011-05-30
  • 2011-12-27
  • 1970-01-01
  • 2020-04-10
  • 1970-01-01
  • 2016-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多