Domanda

Quando tento di scrivere un suffisso / prefisso / decremento, seguito da un post / prefisso / decremento, ottengo il seguente errore:. Argomento non valido per il funzionamento ++ / -

Ma, secondo JLS:

PostIncrementExpression:
        PostfixExpression ++

e

PostfixExpression:
        Primary
        ExpressionName
        PostIncrementExpression
        PostDecrementExpression

in modo da scrivere:

PostfixExpression ++ ++

dovrebbe essere possibile ... Qualche idea?

È stato utile?

Soluzione

Si noti che la grammatica grezzo manca qualsiasi semantica. E 'solo la sintassi, e non tutti i programmi sintatticamente valido sarà generalmente valido. Ad esempio, il requisito che le variabili devono essere dichiarate prima dell'uso è in genere non coperti dalla grammatica (si può, ma è ingombrante).

Postfix-incremento produce una rvalue - e proprio come si può letterali non postfix-incremento, non è possibile postfix-incremento frutto di i++

.

Citando i JLS (3 rd ed, pagina 486.):

  

Il risultato dell'espressione suffisso incremento non è una variabile, ma un valore.

Altri suggerimenti

L'errore ti dice la risposta:

unexpected type
required: variable
found   : value
        (i++)++;

Quindi, l'ho ++ restituisce un valore mentre l'operatore richiede una variabile.

È possibile applicare solo ++ o -- ad un'espressione che denota una posizione modificabile (un lvalue). Il risultato di una ++ o -- è il valore della posizione (a rvalue - prima o dopo l'incremento o decremento), e non per sé una posizione modificabile. Quindi non si può dire (a++)++ più di quanto si può dire (a+b)++ -. Non c'è alcuna posizione da modificare

Il problema con questa espressione i = (i ++) ++; è che (i ++) viene risolto per un valore e la definizione di ++ operatore dice che 1. sarà incrementare la variabile specificato e metterà / restituire un valore per questo se si utilizza Postfix o il prefisso. 2. Questo operatore richiede variabile se prefisso o suffisso. Ma cosa sta succedendo qui è (i ++) è restituire un valore e la messa in atto di (i ++) e poi si hanno (valore) ++ e (valore) non il tipo previsto per questo operatore in quanto richiede una variabile al posto del valore.

per esempio in Java se si compila il seguente snippet di codice otterrà errore come illustrata è al frammento:

public class A {     Test public void () {         int i = 0;         i = (i ++) ++;     } }

uscita di compilazione:

A.java:4: tipo inaspettato richiesto: variabile trovati: Valore                 i = (i ++) ++;                       ^ 1 Errore

i ++ è fondamentalmente una scorciatoia per:

(i = i + 1)

E sarebbe alcun senso a scrivere:

(i = i + 1) ++;

giusto? :)

Quale dovrebbe essere il risultato di una tale operazione? Il risultato di i++ è (una copia) il valore corrente di i, e i viene incrementato dopo ( Post ). Quindi, come si fa a immaginare incrementare il risultato di i++ ancora una volta? Se i origine era 1, quello che dovrebbe essere il suo valore dopo i++++, e quale dovrebbe essere il risultato di questa operazione?

Se ci pensate, probabilmente conto che sarebbe stato molto difficile da definire correttamente questo. Dal momento che i progettisti di Java lo scopo di evitare il C / C ++ "undefined" trappole (e dal momento che il valore di una tale affermazione è discutibile nel migliore dei casi), probabilmente deciso di non consentire esplicitamente esso.

devono ricordare: Incremento e decremento (prefisso e suffisso) Operatore sempre lavoro con variabile non Valore

Here i am spiegare questo con un exe:

int i = 0;

int j = (i++)++;

exe sopra.

  

valore di inizializzazione di i con 0 (zero)

     

in (i ++) '++' lavoro con i che è variabile e dopo aver eseguito un'operazione ritorno (1)

     

ora in (1) ++ '++' lavoro con (1), che è il valore non variabile che è di opporsi alle leggi di java è per questo che l'errore di compilazione genera Argomento non valido per operazione ++ / -

Quello che cercando di ottenere da (i ++) ++?

incrementarlo due volte !!

Usa Looping

Incremento all'interno di un ciclo:)

In i ++, ++ è un operatore di postfix, quindi restituisce il valore di I e poi l'incrementa. Quello che si vorrebbe (i ++) ++ fare? Dovrebbe tornare i + 1 in quanto (i ++ == i)? In caso contrario, non sarebbe strano che i ++ = i ma (i ++) ++ = i) prendere in considerazione le seguenti espressioni:

i++  ==  i;   // true
j = i++  // j gets the value of i
j++ == i //  still true since j== i

(i++) ++ ==  j ++    //  what should be the answer here?

Avete preso in considerazione i + = 2?

Perché non basta usare l'operatore di incremento stenografia?

i+=2

.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top