2015-06-29 8 views
8

Sto solo scherzando con alcuni esercizi in un libro per una lezione estiva di Java perché sono un po 'più avanti, il che significa che non sono compiti a casa. Ricevo un messaggio di errore che indica che non è possibile convertire da String a int ma entrambe sono stringhe, una è una variabile e una una matrice.Impossibile convertire String in int, ma entrambe sono stringhe?

È questa linea Ho problemi con ... 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]; 
     }  
    } 
} 
+1

La riga 'select = items [select]' non è desiderata, poiché gli array richiedono un indice intero. – Daniel

risposta

10

Poiché select è una variabile String, non può essere utilizzato come un indice in un array.

select = items[select]; 

Credo che si intende utilizzare il valore dell'indice i nel for ciclo (dove i è 0-items.length). Qualcosa di simile

select = items[i]; 

Tuttavia, in base ai vostri commenti qui sotto, credo che si voleva davvero

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

base alla tua modifica, si potrebbe fare con due array e due anelli. Qualcosa di simile,

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]); 
} 

Ma un Map sarebbe (a mio parere) essere una soluzione migliore (è certamente più efficiente). Mi piace,

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: ");  
} 
+0

Oh ok, questo ha un senso. Potresti spiegarmi perché sta affermando che non puoi convertire da String a int se sono entrambe le stringhe? Inoltre, il punto di questo è di avere l'utente in ingresso una stringa di uno dei pezzi di mobili e l'uscita sarebbe il prezzo. Quindi in quel caso dovrei volere un ciclo per ogni ciclo, invece, pensi? – NoobCoderChick

+0

@ user3862586 Perché un 'String []' non è un 'String', e non è possibile accedere a un array basato su un indice' String'. Sulla base del tuo commento, ti ho davvero detto che volevi leggere un 'int' dall'utente comunque. –

+0

Oh penso di capire ma, non voglio che l'utente inserisca una stringa dalla serie di mobili e restituirà il prezzo di quei mobili. – NoobCoderChick

0

Perché items[] è un elenco, non una mappa. Ha bisogno di essere indicizzato da un numero.

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

l'articolo è una matrice di stringa.

L'array sarà accessibile tramite indici (i valori devono essere interi, poiché non è un array associativo come quello che abbiamo in php).

Si sta tentando di accedere al valore di un array utilizzando la stringa come indice che non è possibile ed è per questo che si verifica un errore di conversione.

cambiamento

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

a

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

Questo converte il valore stringa in numero intero e passarlo alla matrice, vi sarà l'accesso alla matrice di stringa con indice intero ora.

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); 

si è verificato l'errore perché la "String selezionare" viene usato per inserire archivio utente che è un numero, e successivamente durante il ciclo, il nome arredamento è stored.So, nella successiva iterazione, gli articoli [] viene chiamato il nome del mobile. Ciò causerà un errore.

0

Ecco un breve esempio che dimostra come eseguire ciò che si desidera. Ho anche aggiustato la grammatica per te: è scritta la sua.

Map<String, Integer> priceMap = new HashMap<String, Integer>() 
{{ 
    put("Table", 250); 
    put("Desk", 175); 
    put("Chair", 125); 
    put("Couch", 345); 
    put("Lazyboy", 850); 
}}; 

Scanner scanner = new Scanner(System.in); 
System.out.println("Please enter an item to view its price: "); 
String item = scanner.nextLine().trim(); 

if (priceMap.containsKey(item)) 
{ 
    System.out.printf("The price is %d", priceMap.get(item)); 
} 
3
select = items[select]; 

Quando il recupero elemento dalla matrice utilizzando l'indice si deve dare il valore int. quindi è meglio cambiare il codice come di seguito.

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

Se si ha tempo, seguire il collegamento sottostante per ulteriori informazioni sugli array. https://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html

Problemi correlati