无法将String转换为int,但两者都是字符串?

时间:2015-06-29 04:49:36

标签: java arrays string converter

我只是在一本Java夏季课的书中乱搞一些练习因为我有点领先,这意味着这不是功课。我收到一条错误消息,指出您无法从String转换为int,但两者都是字符串,一个是变量,一个是数组。

这就是我遇到麻烦... select = items[select];

public class CarpentryChoice {

    public static void main(String[] args) {
        String items [] = {"Table", "Desk", "Chair", "Couch", "Lazyboy"};
        int price [] = {250, 175, 125, 345, 850};

        String select;

        Scanner scan = new Scanner(System.in);

        System.out.println("Please enter an item to view it's price: ");
        select = scan.nextLine();

        for(int i=0; i < items.length; i++) {
            select = items[select];
        }       
    }
}

6 个答案:

答案 0 :(得分:10)

因为selectString变量,所以它不能用作数组中的索引。

select = items[select];

我认为您打算在i循环中使用索引值for(其中i0items.length)。像

这样的东西
select = items[i];

但是,根据您的评论,我相信您真的想要

int select = scan.nextInt();
System.out.println("You selected: " + items[select]);

根据您的编辑,您可以使用两个数组和两个循环来完成。像,

String items[] = { "Table", "Desk", "Chair", "Couch", "Lazyboy" };
int price[] = { 250, 175, 125, 345, 850 };
Scanner scan = new Scanner(System.in);
int pos = -1;
outer: while (pos == -1) {
    System.out.println("Please enter an item to view it's price: ");
    String select = scan.nextLine();
    for (int i = 0; i < items.length; i++) {
        if (items[i].equalsIgnoreCase(select.trim())) {
            pos = i;
            break outer;
        }
    }
}
if (pos != -1) {
    System.out.printf("The price is %d%n", price[pos]);
}

Map(在我看来)会是一个更好的解决方案(它肯定更有效率)。像,

String[] items = { "Table", "Desk", "Chair", "Couch", "Lazyboy" };
int[] price = { 250, 175, 125, 345, 850 };
Map<String, Integer> map = new HashMap<>();
for (int i = 0; i < items.length; i++) {
    map.put(items[i], price[i]);
}
Scanner scanner = new Scanner(System.in);
System.out.println("Please enter an item to view it's price: ");
while (scanner.hasNextLine()) {
    String item = scanner.nextLine().trim();
    if (map.containsKey(item)) {
        System.out.printf("The price is %d%n", map.get(item));
    }
    System.out.println("Please enter an item to view it's price: ");    
}

答案 1 :(得分:3)

item是一个字符串数组。

数组将被索引访问(值必须是整数,因为它不像我们在php中那样的关联数组)。

您尝试使用字符串作为索引来访问数组的值,这是不可能的,这就是您收到转换错误的原因。

变化

   select = items[select]; // <--- select is string, must be int here

 select = items[Integer.valueOf(select)]; //select is an integer value now

这会将字符串值转换为整数并将其传递给数组,您现在将使用整数索引访问字符串数组。

答案 2 :(得分:3)

select = items[select];

使用索引从数组中检索项目时,必须提供int值。所以你更好地改变你的代码如下。

int index = Integer.parseInt(select);
select = items[index];

如果您有时间按照以下链接进一步了解阵列。 https://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html

答案 3 :(得分:0)

因为items[]是列表,而不是地图。它需要用数字编制索引。

for(int i=0; i < items.length; i++) {
    select = items[i];

答案 4 :(得分:0)

String items [] = {"Table", "Desk", "Chair", "Couch", "Lazyboy"};
int price [] = {250, 175, 125, 345, 850};

String select = null;
int selectOption;
Scanner scan = new Scanner(System.in);

System.out.println("Please enter an item to view it's price: ");
selectOption = Integer.valueOf(scan.nextLine());

for(int i=0; i < items.length; i++) {
    select = items[selectOption];
}       
System.out.println(select);

发生错误是因为,“字符串选择”用于存储用户输入,这是一个数字,稍后在循环期间,将存储家具名称。因此,在下一次迭代中,物品[]的家具名称被调用。这会引发错误。

答案 5 :(得分:0)

这是一个简短的例子,展示了如何做你想做的事。我还为你修改了语法:它拼写了它。

var Test = []
$.getJSON( "file.json", function( json ) {
   for (var i = 0; i < json.data.length; i++) {
      Test = json.data[i]; 
      console.log(Test.Name);
      alert(Test.Name);
   }
});