2

所以这就是我想要做的。让用户输入数字,将它们存储在一个数组中,然后在一行上打印所有这些数字。我也必须使用方法/函数。我认为到目前为止我做得很好,它在 Eclipse 中没有显示错误。我坚持的是将他们的输入存储到一个数组中。我希望他们继续一次输入一个数字,直到他们满意并输入“退出”。尽管环顾四周,但我还没有阅读有关如何将事物存储在数组中的信息,尤其是逐步存储多个事物。到目前为止,这是我的代码,提前感谢您的帮助!

import java.util.Scanner;

public class intarray {

public static void main(String[] args) {
    System.out.println("Enter a number then hit enter. You may then enter another number or end by typing quit.");
    String x;
    Scanner input = new Scanner(System.in);
    while (true)  {
       x=input.next();
       if (x.equalsIgnoreCase("quit")) {break;}
       if (x.equals(null)) throw new Error("You entered nothing. Try again.");
       int stringLength = x.trim().length();
       if (stringLength == 0) throw new Error("Seems you only entered spaces. Try again.");
        isNum(x);
        int goingintoarray = Integer.parseInt(x);



        int array[];

    }
  }

public static String isNum(String t) {


    int user=Integer.parseInt(t);
    String convertback = Integer.toString(user);
    return convertback;
}

}

4

3 回答 3

1

由于您不知道数组中有多少元素是一个坏主意,因为您必须在新元素出现时经常调整它的大小(复制数组很昂贵!)或在开始时实例化一个足够大的数组(即一种浪费,但仍然不能 100% 保护您免于最终调整它的大小)。

相反,使用 Java 的 List(最好是 LinkedList)听起来是个好主意,因为您可以动态添加元素而无需调整数据结构的大小。

List<Integer> numbers = new LinkedList<>();
while(true) {
  // something
  numbers.add(goingintoarray);
  // something
}

请注意其他实现 - 例如 ArrayList 使用数组 (d'uh ;-) ) 来存储元素,因此您会遇到同样的问题,但实现会为您处理调整大小的部分。

@Edit:按照惯例,Java 中的类是使用以大写字母开头的 CamelCase 编写的。

于 2013-10-22T02:45:20.917 回答
0
ArrayList<Integer> inputs = new ArrayList<Integer>();    
while (true)  {
      Scanner input = new Scanner(System.in);
      x=input.next();
      if (x.equalsIgnoreCase("quit")) {break;}
      if (x.equals(null)) throw new Error("You entered nothing. Try again.");
      int stringLength = x.trim().length();
      if (stringLength == 0) throw new Error("Seems you only entered spaces. Try again.");

      inputs.add(Integer.parseInt(x));

    }

您不需要 isNum 方法,因为如果 x 输入错误,它会在此处给出相同的异常。

于 2013-10-22T02:53:40.967 回答
0

导入 java.util.Scanner;

公共类数组{

public static int initSize = 5;

public static void main(String[] args) {
    System.out.println("Enter a number then hit enter. You may then enter another number or end by typing quit.");

    int array[] = new int[initSize];
    int pos = 0;
    int maxSize = initSize; 

    String x = null;
    Scanner input = new Scanner(System.in);

    while (true) {
        x = input.next();

        if (x.equalsIgnoreCase("quit")) {
            break;
        }

        //input empty string, java io can filter. So , x impossible "null" or null.
        //if (x.equals(null))
        //  throw new Error("You entered nothing. Try again.");

        int stringLength = x.trim().length();

        if (stringLength == 0)
            throw new Error("Seems you only entered spaces. Try again.");

        Integer numX = isNum(x);

        // if the array is full, extend it
        if(pos == maxSize){
            int[] newArray = new int[2 * maxSize];
            System.arraycopy(array, 0, newArray, 0, maxSize);
            array = newArray;
            maxSize = array.length;
        }

        if(null == numX) 
            System.out.println(x + " isn't a number."); //choose notify or throw error  
        else
            array[pos++] = numX;

    }

    printArray(array, pos);

}

public static Integer isNum(String t) {
    try {
        return Integer.parseInt(t);
    } catch (NumberFormatException e) {
        return null;
    }
}

public static void printArray(int[] array, int pos) {
    if(null == array || array.length == 0 || pos <= 0)
        return ;
    for(int i = 0 ; i < pos; i++)
        System.out.print(array[i] + " ");
}

}

于 2013-10-22T03:30:30.913 回答