我的程序是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);
}
}
}
}
答案 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退出代码时也是如此。现在它在读取循环中,然后我们打印整个排序列表。
答案 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);
}