Por que não compila?

11 respostas
L
Pessoal estou estudando pelo livro Use a Cabeça Java mas ao chegar neste exemplo apresenta erro.

Os erros são: Syntax error on token ) , : expected

Syntax error on token(s), misplaced construct(s)

O erro apresentado é no método checkYourSelf, na linha 10 ->for (int cell : locationCells){
class SimpleDotCom {
	
	int[] locationCells;
	int numOfHits = 0;
	
	
	String checkYourSelf(String stringGuess){
		int guess = Integer.parseInt(stringGuess);
		String result = "miss";
		for (int cell : locationCells){
			if (guess = cell){
				result = "hit";
				numOfHits++;
				break;
			}
			
		}
		if (numOfHits.equal == locationCells.length){
			result = "kill";
		}
		System.out.println(result);
	}

	void setLocationCells (int[] locs){
		locationCells = locs;
		
	}
	
	
	
}
public class SimpleDotComTestDrive {
	public static void main (String args[]){
		
		SimpleDotCom dot = new SimpleDotCom();
		
		int [] locations = {2,3,4};
		dot.setLocationCells(locations);
		
		String userGuess = "2";
		
		String result = dot.checkYourSelf(userGuess);
	}
}

11 Respostas

fabiozoroastro

Olá leleca. Bem vinda ao GUJ.
Não encontrei erro no seu for, mas em compensação, encontrei no seu if.

if (guess = cell){

Faltou mais um sinal de igual. :wink: Coloque o “==” e veja se compila.
Abraço.

L

ok, obrigada por encontrar este erro (referente ao ==) porém o erro antigo continua lá firme e forte!

fabiozoroastro

leleka, estou sem a jvm 5.0 aqui.
Mas acho que vc precisa fazer forEach usando objeto.

for( Integer cell : locationCells )

Mas eu não tenho certeza. Questão de prova isso hein. :slight_smile:
Abraço.

CarlosEduardoDantas
<blockquote><div class="quote-author">leleca:</div>Pessoal estou estudando pelo livro Use a Cabeça Java mas ao chegar neste exemplo apresenta erro.

Os erros são: Syntax error on token “)” , : expected

Syntax error on token(s), misplaced construct(s)

O erro apresentado é no método checkYourSelf, na linha 10 ->for (int cell : locationCells){
class SimpleDotCom {
	
	int[] locationCells;
	int numOfHits = 0;
	
	
	String checkYourSelf(String stringGuess){
		int guess = Integer.parseInt(stringGuess);
		String result = "miss";
		for (int cell : locationCells){
			if (guess = cell){
				result = "hit";
				numOfHits++;
				break;
			}
			
		}
		if (numOfHits.equal == locationCells.length){
			result = "kill";
		}
		System.out.println(result);
	}

	void setLocationCells (int[] locs){
		locationCells = locs;
		
	}
	
	
	
}
public class SimpleDotComTestDrive {
	public static void main (String args[]){
		
		SimpleDotCom dot = new SimpleDotCom();
		
		int [] locations = {2,3,4};
		dot.setLocationCells(locations);
		
		String userGuess = "2";
		
		String result = dot.checkYourSelf(userGuess);
	}
}

olá

seu codigo apresenta alguns problemas…

1 - numOfHits é uma variável de instância de tipo primitivo, portando não possui o atributo equals … o correto é:

if (numOfHits == locationCells.length) {

2 - Ainda vai existir um erro já que o método checkYourSelf() precisa retornar uma String. Portanto basta colocar na última linha do método um

return result;
L

Enquanto vocês respondiam dei mais uma olhada e até tinha consertado estes 2 últimos erros que Cadu disse mas continuo sem sucesso... :cry: Já conferi linha por linha e está idêntico ao livro, porém não dá certo.
Depois dos acertos ficou assim:

public class SimpleDotCom {
	
	int[] locationCells;
	int numOfHits = 0;
	
	public void setLocationCells (int[] locs){
		locationCells = locs;
	}
	
	public String checkYourSelf(String stringGuess){
		int guess = Integer.parseInt(stringGuess);
		String result = "miss";
		for (int cell : locationCells) {
			if (guess == cell){
				result = "hit";
				numOfHits++;
				break;
			}
		}

		if (numOfHits == locationCells.length){
			result = "kill";
		}
		System.out.println(result);
		return result;
	}
}
public class SimpleDotComTestDrive {
	public static void main (String args[]){
		
		SimpleDotCom dot = new SimpleDotCom();
		
		int [] locations = {2,3,4};
		dot.setLocationCells(locations);
		
		String userGuess = "2";
		
		String result = dot.checkYourSelf(userGuess);
		
	}
}
edilson_x

Copiei as classes, compilei e rodou certinho, retornou “hit”

uso java 1.5, tem certeza que tambem esta usando?

Andre_Brito

Olha, eu sou muito mais iniciante que você… mas se eu me deparasse com um problema desses, primeiramente eu tentaria tirar o for each e fazer com o for primitivo ( for (int i = 0; i < x; i++) ). Se mesmo assim não funcionasse eu tentaria definir o tamanho fixo do vetor. Mas quem sou eu pra falar isso né :stuck_out_tongue:

L

Dede é isso mesmo, o Carlos me disse que o problema era justamente por eu estar usando o java 1.4, troquei o for each pelo for antigo e deu certo. Agradeço a todos pela ajuda.

Andre_Brito

Mas por que você não atualiza para o 1.5?
O for each é muito bem aceito quando não se sabe o tamanho do array ou da coleção eu acho.
Em todo caso, que bom que conseguiu arrumar!

LPJava

so uma pergunta kd o return no metodo ja que ele é do tipo String?

Andre_Brito

JPJava,

Acho que tá lá sim cara.

“return result;”, vigésima quinta linha.

Abraço!

Criado 12 de outubro de 2007
Ultima resposta 14 de out. de 2007
Respostas 11
Participantes 6