Java初始化错误

时间:2017-09-10 21:45:27

标签: java initialization

double pullPrice(String input){
        if(input.length() < 3){
            System.out.println("Error: 02; invalid item input, valid example: enter code here'milk 8.50'");
            System.exit(0);
        }
        char[] inputArray = input.toCharArray();
        char[] itemPriceArray;
        double price;
        boolean numVal = false;
        int numCount = 0;
        for(int i = 0; i <= inputArray.length-1; i ++){
            //checking if i need to add char to char array of price
            if(numVal == true){
                //adding number to price array
                itemPriceArray[numCount] = inputArray[i];
                numCount++;
            }
            else{
                if(inputArray[i] == ' '){
                    numVal = true;
                    //initializing price array
                    itemPriceArray = new char[inputArray.length - i];
                }
                else{

                }
            }


        }
        price = Double.parseDouble(String.valueOf(itemPriceArray));
        return price;
    }

问题:尝试在牛奶8.50&#39;之间的空格后拉出字符序列。作为输入。发生初始化错误是因为我在if else语句中初始化char数组,如果找到空格,它将初始化数组。

问题,因为我不知道我的字数统计数字,直到我找到空格还有另一种方法可以初始化吗?在调用数组之前,编译器是否不相信我将初始化。

另外,如果我遗漏了某些内容或者有更好的方法来编写任何代码,请告诉我。我在java数据结构类中学习基础数据结构,但同时也希望专注于效率和模块化。我也有一个pullPrice函数,它执行相同的操作,但是拉取项目名称。我想结合这些,所以我不必为两者重用相同的代码,但只能返回具有相同数据类型的项目,除非我创建一个类。不幸的是,这个练习是使用两个数组,因为我们正在练习如何使用ADT包。 任何帮助是极大的赞赏?

4 个答案:

答案 0 :(得分:2)

尝试这样的事情:

double pullPrice(String input)
{
   try
   {
      // Instantiate a new scanner object, based on the input string
      Scanner scanner = new Scanner(input);
      // We skip the product (EG "milk")
      String prod = scanner.next();
      // and read the price(EG 8.5)
      double price = scanner.nextDouble();
      // We should close the scanner, to free resources...
      scanner.close();
      return price;
   }
   catch (NoSuchElementException ex)
   {
      System.out.println("Error: 02; invalid item input, valid example: enter code here 'milk 8.50'");
      System.exit(0);
   }

}

答案 1 :(得分:0)

我会补充其他答案, 因为一旦创建,你就无法改变数组的大小。您要么必须分配比您认为需要更大的开销,要么接受重新分配它需要增加的开销。什么时候你必须分配一个新的并将数据从旧的复制到新的:

int oldItems[] = new int[10];
for (int i=0; i<10; i++) {
  oldItems[i] = i+10;
}
int newItems[] = new int[20];
System.arraycopy(oldItems, 0, newItems, 0, 10);
oldItems = newItems;

答案 2 :(得分:0)

如果您确定程序只能获得正确的输入数据,那么只需使用null初始化数组:

char[] itemPriceArray = null;

编译器抱怨的主要问题 - 如果程序访问未初始化的变量(例如输入数据错误)会发生什么? Java编译器完全阻止了这种情况。

答案 3 :(得分:0)

char[] itemPriceArray = new char[inputArray.length];