2015-06-29 13 views
8

Ich mache gerade ein paar Übungen in einem Buch für einen Java-Sommerkurs, weil ich ein wenig voraus bin, was bedeutet, dass dies keine Hausaufgaben sind. Ich erhalte eine Fehlermeldung, dass Sie nicht von String zu int konvertieren können, aber beide sind Strings, einer ist eine Variable und einer ein Array.Kann String nicht in int konvertieren, aber beide sind Zeichenfolgen?

Es ist diese Linie Ich bin mit Mühe, ... 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

Die Zeile 'select = items [select]' ist nicht erwünscht, da Arrays einen ganzzahligen Index benötigen. – Daniel

Antwort

10

Da select eine String Variable, nicht als Index in einem Array verwendet werden kann.

select = items[select]; 

Ich glaube, Sie bedeuten den Indexwert i in Ihrer for Schleife zu verwenden (wo i0-items.length ist). So etwas wie

select = items[i]; 

jedoch basierend auf Ihre Kommentare unten, ich glaube, Sie

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

entsprechend Ihrer Bearbeitung wirklich

wollte, können Sie es mit zwei Reihen und zwei Schleifen tun könnte. So etwas wie,

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

Aber ein Map wäre (meiner Meinung nach), eine bessere Lösung (es ist sicherlich effizienter). Wie,

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 das macht Sinn. Könnten Sie mir erklären, warum es besagt, dass Sie nicht von String in int konvertieren können, wenn sie beide Strings sind? Der Sinn dessen ist auch, dass der Benutzer eine Reihe von einem der Möbelstücke eingibt und die Ausgabe der Preis ist. Also in diesem Fall würde ich für jede Schleife statt Sie denken? – NoobCoderChick

+0

@ user3862586 Da ein 'String []' kein 'String' ist, können Sie nicht auf ein Array zugreifen, das auf einem' String'-Index basiert. Basierend auf Ihrem Kommentar, ich denke, Sie wollten wirklich eine "int" vom Benutzer sowieso lesen. –

+0

Oh ich denke ich verstehe aber, nein ich möchte, dass der Benutzer eine Zeichenfolge aus der Reihe von Möbeln eingeben und es wird den Preis für diese Möbel zurückgeben. – NoobCoderChick

0

Weil items[] ist eine Liste, keine Karte. Es muss durch eine Nummer indiziert werden.

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

Element ist ein Array von Zeichenfolge.

Auf das Array wird durch Indizes zugegriffen (die Werte müssen Integer sein, da es kein assoziatives Array wie in PHP ist).

Sie versuchen, auf den Wert eines Arrays zuzugreifen, indem Sie die Zeichenfolge als Index verwenden, was nicht möglich ist, und deshalb erhalten Sie einen Konvertierungsfehler.

Änderung

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

zu

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

Dies wird den String-Wert in integer konvertiert und an das Array übergeben, werden Sie mit Integer-Index, der den String-Array Zugriff auf jetzt.

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

Der Fehler wird da aufgetreten ist, der „String wählt“ wird zum Speichern von Benutzereingaben verwendet, die eine Zahl ist, und später während der Schleife, das Möbel Name ist stored.So, bei der nächsten Iteration, die Elemente [] von Möbelnamen heißt. Wer wird einen Fehler werfen.

0

Hier ist ein kurzes Beispiel, das zeigt, wie Sie tun können, was Sie wollen. Ich habe auch die Grammatik für dich festgelegt: es ist buchstabiert.

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)); 
} 
Verwandte Themen