onverwachte typefout

Ik ben nieuw op Java, ik studeer strings en ik wil dat een string wordt omgedraaid. Hier is mijn code

String myStr = "abcdef"; String reversed = "";
for(int j=myStr.length()-1;j>=0;j--) {
    myStr.charAt(j) += reversed;
}

Maar ik krijg een foutmelding:

****.java:14: error: unexpected type
required: variable
found:    value

Maar als ik het afdruk met System.out.print(reversed), wordt reversedcorrect afgedrukt. Wat is het verschil tussen variabele en waarde? Waarom kan het me het juiste antwoord geven ondanks dat ik een foutmelding krijg? Ik stel uw antwoorden op prijs, bedankt


Antwoord 1, autoriteit 100%

Het probleem is hier:

myStr.charAt(j) += reversed;

De linkerkant is een waarde. Geen variabele. Daarom kun je er geen +=op zetten.


Hoewel het doel om te leren hoe je het op de harde manier doet voorbijgaat, kun je het als volgt doen:

myStr = new StringBuffer(myStr).reverse().toString();

Antwoord 2, autoriteit 40%

het zou reversed += new String(myStr.charAt(j));… het onverwachte type is dat wat charAt(j) teruggeeft


Antwoord 3, autoriteit 20%

String myStr = "abcdef";
String reversed = "";
for(int j = myStr.length()-1 ; j >= 0; j--)
{
     reversed += myStr.CharAt(j);
}

Antwoord 4

Wat u wilt is reversed += myStr.charAt(j). U kunt alleen een waarde aan een variabele toewijzen. myStr.charAt(j)is geen variabele. Het is een uitdrukking die een waarde of type char retourneert.

U moet ook een StringBuildergebruiken en elke Char aan de StringBuilder toevoegen, omdat uw lus een nieuwe snaartinstantie creëert bij elke iteratie, die helemaal niet efficiënt is.


5

+=Werkt op een variabele geen waarde. myStr.charAt(j)retourneert een waarde, en u kunt +=over die waarde niet gebruiken. Het moet een variabele zijn zoals reversed.
b.g

reversed += myStr.substring(j, j+1);

6

Variabelen zijn plaatsen waar u waarden kunt opslaan. Ze moeten een waarde worden verklaard en toegewezen voordat ze worden gebruikt:

String reversed = "";

reversedis een variabele toegewezen de waarde "".
Alleen variabelen kunnen aan de linkerkant van een opdracht staan ​​(zoals =). +=is een speciaal type opdracht. a += b;is in principe hetzelfde als a = a + b;.

Waarden zijn de resultaten van uitdrukkingen. Uitdrukkingen zijn dingen als variabele referenties (reversed), constanten (""), methode-oproepen (myStr.charAt(0)) en bewerkingen (a + b). Waarden kunnen aan de rechterkant van een opdracht staan.

Ik weet niet zeker waarom het je het juiste antwoord geeft, omdat de code helemaal niet mag worden uitgevoerd als je zo’n compileerfout hebt.

Other episodes