存储输入数字的arraylist

时间:2017-08-31 19:25:04

标签: java arraylist

我的程序是ArrayList存储输入的数字,当用户输入数字-1时,程序将停止以升序打印出所有输入的数字。我的程序运行,但是让数字输入,它不会打印出数字。似乎声明不起作用。如何在if语句中调用ArrayList才能正常工作?

import java.util.ArrayList;
import java.util.Scanner;
import java.util.Collections;

public class testArrayList {        

    public static void main(String[] args) {

        Scanner inputs = new Scanner(System.in);
        ArrayList <Integer> nums = new ArrayList<Integer>();

        System.out.println("Enter a number(-1 to end): ");

        while(inputs.hasNextInt()) {
            nums.add(inputs.nextInt());
        }

        // it looks like it runs until here. 

            for (Integer n : nums) {
                if (n == -1) {
                    Collections.sort (nums);
                    System.out.println("Here is the list of numbers : ");
                    System.out.println(n);
                }  
            }        
    }
}

7 个答案:

答案 0 :(得分:0)

System.in会屏蔽并等待新输入,只要您继续输入数字,hasNextInt()将始终为true。相反,您应该在初始输入(-1)循环中检查while

while(inputs.hasNextInt()) {
    int num = inputs.nextInt();
    if (num == -1) {
        break;
    }
    nums.add(num);
}

nums.sort();
System.out.println("Here is the list of numbers : ");
System.out.println(nums);

答案 1 :(得分:0)

将循环数添加到列表中的循环不检查值-1以停止循环。 -1是一个int,所以它继续。

在您修复之后,您将遇到下一个问题。您每次用户输入1时都会迭代列表中的元素并进行排序。我没有检查过但这很可能会导致异常,因为如果更改基础列表,迭代器就不会被逗乐迭代它。根据你的描述,你应该在循环之前调用sort,然后在循环中执行System.out.println。

答案 2 :(得分:0)

  

我的程序运行,但是让号码进入,它不打印   数字。似乎声明不起作用   一次执行一次步骤:

在您的代码中,只有n列表nums中的值等于-1才会这样做。

相反,您应该尝试将代码设置为:

// Accept user input
Integer input = inputs.nextInt();

// check if it is not -1
while(input != -1) {
    nums.add(input);
    input = inputs.nextInt()
}

// sort the arraylist
Collections.sort (nums);

// print the elements
System.out.println("Here is the list of numbers : ");         
for (Integer n : nums) {
    System.out.println(n);
}

答案 3 :(得分:0)

永远不会达到if语句,你可以通过在它之前添加一个永远不会打印的println来检查它,因为扫描程序会忽略空格。在您输入信件之前,它会继续尝试输入。为了获得所需的效果,我可能只会做n = inputs.nextInt();那么如果n是-1则使用break。你的整个for循环和if条件是不必要的,只需对列表进行排序并打印它 - 使用.toString,否则它只是一个内存地址 - 因为你在每种情况下都这样做(尽管你可能想删除-1)

答案 4 :(得分:0)

我知道有几个答案,但这是我的版本:

import java.util.ArrayList;
import java.util.Scanner;
import java.util.Collections;

    public class testArrayList 
    {        

    public static void main(String[] args) 
    {

        Scanner inputs = new Scanner(System.in);
        ArrayList <Integer> nums = new ArrayList<Integer>();

        System.out.println("Enter a number(-1 to end): ");

        while(inputs.hasNextInt()) 
        {
            //check if the next value is -1
            int nextVal = inputs.nextInt();
            if(nextVal == -1)
            {
              break; //then exit the loop
            }
            else
            {
              nums.add(inputs.nextInt()); //else add to the list
            }

        }

      //since we exited the loop, we can sort the list, and print header 
      Collections.sort (nums);
      System.out.println("Here is the list of numbers : ");
      for (int i = 0 ; i < nums.size(); i++) 
      {                             
            System.out.println(nums.get(i)); // print every sorted int from 
                                             // the list
      }  
    }        
}

打印时代码的逻辑有问题,并且在读取-1退出代码时也是如此。现在它在读取循环中,然后我们打印整个排序列表。

在这里测试: https://www.jdoodle.com/online-java-compiler

答案 5 :(得分:0)

我重新组织了代码并使其更加简单,因为当您输入-1值时,您尝试退出地图。

public class TestArrayList {

     public static void main(String[] args) {

            Scanner scanner = new Scanner(System.in);
            ArrayList <Integer> nums = new ArrayList<Integer>();

            while(true ) {
                System.out.println("Enter a number(-1 to end): ");
                int value = scanner.nextInt();

                /*read until your input is -1*/
                if ( value != -1 ){
                    nums.add(value);
                }else {
                    Collections.sort (nums);
                    System.out.println("Here is the list of numbers : ");
                    for ( int i : nums){
                        System.out.println(i);
                    }
                    break;
                }
            }
            scanner.close();
        }
}

答案 6 :(得分:0)

扫描仪输入=新扫描仪(System.in);         ArrayList nums = new ArrayList();

    System.out.println("Enter a number(-1 to end): ");

    while (inputs.hasNextInt()) {
        //Accepts the inputs
        int input = inputs.nextInt();
        //Checks condition
        if (input == -1) {
            break;// breaks out of the loop is fails
        }
        nums.add(input);// else keep adding
    }
    System.out.println("Here is the list of numbers : ");
    Collections.sort(nums);
    for (Integer n : nums) {
        System.out.println(n);
    }