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包。 任何帮助是极大的赞赏?
答案 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];