【问题标题】:How to assign values to the array如何为数组赋值
【发布时间】:2016-03-10 03:30:25
【问题描述】:

我正在接受输入,我希望它打印出数组中的所有数字,但由于某种原因,数组只保存最后输入的数字。此外,当输入 null 并且每行一个数字时,代码应该停止 我的意见:

1
2 3
4
<enter>

我的输出:

[4]

我的预期输出:

 [1,2,3,4]

程序

String inputValue; 
String [] input = new String[500];

while((inputValue = stdin.readLine()) != null && !inputValue.equals("")){
    input = inputValue.split("\\s+");         
} 
System.out.println(Arrays.toString(input));

【问题讨论】:

  • 在您阅读的每一行中,您都将输入数组重新分配给一个新值。
  • 那么我该如何解决这个问题
  • 我会更新答案

标签: java arrays


【解决方案1】:

您需要收集多个循环调用的值。你可以这样做:

ArrayList<String> inputList = new ArrayList<>();
String line;
while((line = stdin.readLine()) != null
       && !line.equals(""))
{
    String[] words = line.split("\\s+");
    inputList.addAll(Arrays.asList(words));         
} 
System.out.println(inputList); 

【讨论】:

    【解决方案2】:

    可能的错误是您在循环的每次迭代中都分配了input = inputValue.split("\\s+");。这导致您只会看到最后一行或最后一个字符

    String inputValue; 
    inputCount=0;
    String [] input = new String[500];
    
    while((inputValue = stdin.readLine()) != null && !inputValue.equals("")){
        String [] inputLine = inputValue.split("\\s+");  
        for(i =0; i<inputLine.length; i++){
           input[inputCount++] = inputLine[i];
        }
    }
    input = Arrays.copyOf(input, inputCount);
    System.out.println(Arrays.toString(input));
    

    试试这个。这是一个可能的错误

    【讨论】:

    • 每次我输入一个数字都会抛出一个越界错误
    • 你知道行吗?在哪里
    • 好吧,我只需要删除等号,现在虽然它在我的数组中添加了一堆空值
    • 您需要在末尾截断数组(将其复制到较短的数组)或仅使用第一个 inputCount 元素。 input = Arrays.copyOf(input, inputCount);
    • @swaguire,它不添加空值,我认为这个空值在声明后立即在数组中
    【解决方案3】:
    import java.util.Arrays;
    import java.util.Scanner;
    
    public class Hello {
    
        public static void main(String args[]) {
            Scanner s = new Scanner(System.in);
    
            String inputValue = ""; 
            String [] input = new String[500];
            int count = 0;
    
                for(int i = 0 ; i < input.length; i++){
                    System.out.println("Enter Value : ");
                    inputValue = s.nextLine();
                    input[i] = inputValue;
                    count ++;
    
                    if(inputValue.trim().isEmpty())
                    {
                        break;
                    }
                }
    
            String[] tmpArray = new String[count-1];
    
            count = 0;
    
            for(String number : input)
            {
                if(number != null && !number.trim().isEmpty()){
                    System.out.println(number);
                    tmpArray[count] = number;
                    count++;
                }
            }
    
            System.out.println(Arrays.toString(tmpArray));
    
        }
    }
    

    试过了,一切正常!我还添加了 trim() 函数,以确保删除所有尾随空格。

    【讨论】:

      猜你喜欢
      • 2011-08-13
      • 1970-01-01
      • 1970-01-01
      • 2021-10-08
      • 1970-01-01
      • 1970-01-01
      • 2012-06-20
      • 1970-01-01
      相关资源
      最近更新 更多