2016-07-22 12 views
0

ich eine Karte wie so erstellt:get (int) in Liste kann nicht auf java.lang.String angewendet werden

private Vector vaildateTestScore(String persTestCode, String score, List<TSpecialTest> specialTestList, Vector errorVtr) { 

     Map<String, TSpecialTest> specialTestmap = new HashMap<String, TSpecialTest>(); 

     for (TSpecialTest specialTest : specialTestList) { 
      specialTestmap.put(persTestCode,specialTest); 
     } 

     if (specialTestList.get(persTestCode).getPersTestScrQyMin() < score){ 

      errorVtr.add(specialTestList.get(persTestCode)+" max range is "+" "+specialTestList.get(persTestCode).getPersTestScrQyMax()); 

      System.out.println("There was an error with > "+specialTestList.get(persTestCode).getPerTestTypeCd()); 
     } 
     else if(specialTestList.get(persTestCode).getPersTestScrQyMax() > score){ 

      errorVtr.add(specialTestList.get(persTestCode).getPerTestTypeCd()+" min range is "+" "+specialTestList.get(persTestCode).getPersTestScrQyMin()); 

      System.out.println("There was an error with < "+specialTestList.get(persTestCode).getPerTestTypeCd()); 
     } 

     return errorVtr; 
    } 

jedoch, wo immer Sie persTestCode meine IDE zeigt einen Laufzeitfehler zu sehen sagte: get(int) in List cannot be applied to java.lang.String

Diese Klasse festgelegt wird durch den Aufruf des folgenden am Anfang der Klasse bis etwa so:

SpecialTestImpl specialTest = ComponentBuilder.getInstance().getApplicationContext().getBean(SpecialTestImpl.class); 

    List<TSpecialTest> specialTestList = specialTest.specialTestList(); 

Dann wird das Verfahren wie so genannt:

String persTestCode = elem.replace("scr.", ""); 
           String score = request.getParameter(elem); 
    Vector errorVtr = new Vector(); 

    //validates inputted test scores 
    vaildateTestScore(persTestCode, score, specialTestList,errorVtr); 

-------------------- Gelöst ----------------------- ---------

Dies war ein kompletter Überhang auf meiner Seite. Der Tab-Button und die Namensähnlichkeit haben das Beste von mir bekommen. Das ist es was ich versuche zu tun.

private Vector vaildateTestScore(String persTestCode, String score, List<TSpecialTest> specialTestList, Vector errorVtr) { 

     Map<String, TSpecialTest> specialTestmap = new HashMap<String, TSpecialTest>(); 

     for (TSpecialTest specialTest : specialTestList) { 
      specialTestmap.put(persTestCode,specialTest); 
     } 

     if (specialTestmap.get(persTestCode).getPersTestScrQyMax() > Integer.parseInt(score)){ 

      errorVtr.add(specialTestmap.get(persTestCode)+" max range is "+" "+specialTestmap.get(persTestCode).getPersTestScrQyMax()); 

      System.out.println("There was an error with > "+specialTestmap.get(persTestCode).getPerTestTypeCd()); 
     } 
     else if(specialTestmap.get(persTestCode).getPersTestScrQyMax() > Integer.parseInt(score)){ 

      errorVtr.add(specialTestmap.get(persTestCode).getPerTestTypeCd()+" min range is "+" "+specialTestmap.get(persTestCode).getPersTestScrQyMin()); 

      System.out.println("There was an error with < "+specialTestmap.get(persTestCode).getPerTestTypeCd()); 
     } 

     return errorVtr; 
    } 
+0

Der String 'persTestCode' nach' elem.replace ("scr.", "") 'Steht für einen ganzzahligen Wert? – SomeDude

Antwort

0

specialTestList.get(persTestCode) versucht List#get(int) in einem String, so natürlich zu nennen vorbei, die nicht geht zu.

Vielleicht wollten Sie stattdessen die Karte specialTestmap verwenden; Es wird eine Methode get(String) haben, da Sie die Karte erstellt haben, die von String codiert wird.

Beachten Sie auch, dass

if (specialTestList.get(persTestCode).getPersTestScrQyMin() < score){ 

... vergleicht, was ich vermute, ist ein int (das Ergebnis der getPersTestScrQyMin()) mit einem Stringscore.

Und diese Schleife ist ziemlich suspekt: ​​

for (TSpecialTest specialTest : specialTestList) { 
    specialTestmap.put(persTestCode,specialTest); 
} 

Sie bringen immer wieder den gleichen Schlüsselwert verwenden, persTestCode. Nachfolgende Puts überschreiben frühere, so dass die Schleife keinen Sinn ergibt.

0

Das Problem scheint sehr klar.

Mit einem List<TSPecialTest>, die nur get Funktion, die Sie verwenden können, ist:

  • List#get(int)

Aber Sie versuchen, die Methode get mit einem String als Parameter zu nennen.

Ihr Ziel war sicherlich den Wert aus der Liste der String angebracht zu erhalten, anstatt die List

+0

@ T.J.Crowder In der Tat, weiß nicht, warum ich das dachte. –

1

Java Liste get() Methode der Verwendung nimmt eine ganze Zahl als Index in die Liste und gibt das Objekt an diesem Index. Sie könnten dies mit Ihrer Kartendatenstruktur verwechseln, die Sie am Anfang der Methode hinzufügen.

0

Die List.get() -Methode erwartet einen Ganzzahl-Index, Sie übergeben einen String-Wert.

if (specialTestList.get(persTestCode).getPersTestScrQyMin() < score){ 

https://docs.oracle.com/javase/7/docs/api/java/util/List.html#get(int)

Sie wahrscheinlich suchen ein Objekt aus Ihrer Karte zu bekommen, wie folgt aus:

if (specialTestmap.get(persTestCode).getPersTestScrQyMin() < score){ 
1

Liste nur die Mehtod von get (int index) zur Verfügung stellen, können Sie nicht Verwenden Sie get (instanceName) Gain die Instanz, die als instanceName benannt ist. Ergänzung: die Art und Weise, dass Sie Karte verwenden # put (Schlüssel, Wert) sind inkorrekt.ich denke, Sie sollten die Java # API sorgfältig lesen.

1

Dies war ein kompletter oversite auf myside. Ich lasse die Tab-Taste auf meiner IDE das Beste von mir bekommen, da specialTestList und specialTestmap ähnliche Namen sind.

private Vector vaildateTestScore(String persTestCode, String score, List<TSpecialTest> specialTestList, Vector errorVtr) { 

     Map<String, TSpecialTest> specialTestmap = new HashMap<String, TSpecialTest>(); 

     for (TSpecialTest specialTest : specialTestList) { 
      specialTestmap.put(persTestCode,specialTest); 
     } 

     if (specialTestmap.get(persTestCode).getPersTestScrQyMax() > Integer.parseInt(score)){ 

      errorVtr.add(specialTestmap.get(persTestCode)+" max range is "+" "+specialTestmap.get(persTestCode).getPersTestScrQyMax()); 

      System.out.println("There was an error with > "+specialTestmap.get(persTestCode).getPerTestTypeCd()); 
     } 
     else if(specialTestmap.get(persTestCode).getPersTestScrQyMax() > Integer.parseInt(score)){ 

      errorVtr.add(specialTestmap.get(persTestCode).getPerTestTypeCd()+" min range is "+" "+specialTestmap.get(persTestCode).getPersTestScrQyMin()); 

      System.out.println("There was an error with < "+specialTestmap.get(persTestCode).getPerTestTypeCd()); 
     } 

     return errorVtr; 
    } 
Verwandte Themen