2011-12-15 3 views
4

Я занимаюсь физическим упражнением в книге «Java, как программировать». Я должен сделать приложение, которое имитирует мошенничество. Я должен сделать метод (flip), который случайно возвращает сторону для монеты. Я решил сделать метод возвратом 1 или 2, а в основном методе «преобразовать» значения в одну из сторон монеты. Проблема в том, что я получаю сообщение об ошибке, которое говорит: «Тип mismatch -cannot convert from int to boolean». Я действительно думаю, что я работать только с целыми числами на всем пути, и Канот посмотреть, как булевы приходят вЯ получаю «Тип несоответствия не может преобразовать из int в boolean», несмотря на то, что не используется boolean

код выглядит следующим образом:.

import java.util.Random; 

public class Oppgave629 
{ 

    public static void main(String[] args) 
    { 
     int command = 1; 
     int heads = 0; 
     int tails = 0; 
     while (command != -1) 
     { 
      System.out.print("Press 1 to toss coin, -1 to exit:"); 
      int coinValue = flip(); 
      if (coinValue = 1) {System.out.println("HEADS!"); heads++;} 
      if (coinValue = 2) {System.out.println("TAILS!"); tails++;} 
      System.out.printf("Heads: %d", heads); System.out.printf("Tails: %d", tails); 
     } 
    } 

    static int flip() 
    { 
     int coinValue; 
     Random randomValue = new Random(); 
     coinValue = 1 + randomValue.nextInt(2); 
     return coinValue; 
    } 
} 

ответ

14

Ваш код

if (coinValue = 1) {System.out.println("HEADS!"); heads++;} 
if (coinValue = 2) {System.out.println("TAILS!"); tails++;} 

Должно быть

if (coinValue == 1) {System.out.println("HEADS!"); heads++;} 
if (coinValue == 2) {System.out.println("TAILS!"); tails++;} 

Вы назначаете тип int для coinValue и что оценивается как bool внутри оператора if.

+0

Спасибо, я упускать из виду, что! – user820913

+0

Без проблем, рад, что я мог бы помочь! – b3h47pte

6

Вы используете задание (=), оператор вместо оператора сравнения (равенство ==) в ваших if заявления:

if (coinValue = 1) 

Должно быть

if (coinValue == 1) 

если заявление ожидает boolean expression, вы назначаете от 1 до coinValue, а затем пытаетесь интерпретировать это как логическое для обработки условного.

1

Это один из наиболее распространенных и опасных ошибок программирования, которые разработчики делают. В прежние времена компиляторы (такие как компилятор C) не будут жаловаться на заявление if(coinValue = 1), так как это повлияет на coinValue на 1 и всегда оценивает условие на true, так как оно равно 1 К счастью, компилятор Java ловит эту ошибку и не выполняет позвольте вам сделать это. Как указано в ответах выше, измените if (coinValue = 1) на if (coinValue == 1) и ваша проблема должна быть исправлена.

0

Я столкнулся с этой ошибки б/CI имел I = 4 в для заявления т.е. "для (я = 1, я = 4, я ++) ...."

вы не можете использовать равноправным to "=" в команде for для значения остановки.

-1
if (coinValue == 1) {System.out.println("HEADS!"); heads++;} 
if (coinValue == 2) {System.out.println("TAILS!"); tails++;} 

вместо

if (coinValue = 1) {System.out.println("HEADS!"); heads++;}  
if (coinValue = 2) {System.out.println("TAILS!"); tails++;}  

с 2 одинаковыми знаками

+0

Вы ответили в 2014 году на вопрос, который имел тот же ответ с 2011 года. Патетическая попытка получить ответные очки. – akshaynagpal

Смежные вопросы