2013-03-20 2 views
-2

поэтому для этой программы я должен использовать метод, который должен возвращать -1, если первый круг меньше, возвращает 0, если два круга имеют одинаковый размер или возвращают 1, если первый круг больше. Основываясь на возвращаемом значении этого метода, основной метод должен напечатать строку вывода, например: Зеленый круг меньше красного круга.У меня возникли проблемы с пониманием возвращаемых значений

but i dont know how to program it to where 

    if (r1 > r2) 
     return -1; 

    so that the main method prints 

    r1 is bigger then r2 



    BEFORE CHANGES this is what i had when i asked the question 




     import java .awt.*; // for the graphics classs 
     import java .util.*;// for scanner class 
     public class Circles{ 
     public static void main(String[] args){ 
     Scanner input = new Scanner(System.in); //scanner object 
     DrawingPanel panel=new DrawingPanel(400,300); 
     Graphics gObject = panel.getGraphics(); //grahics object 
     // get info on circles 
     System.out.println("please enter your coordnates for the blue circle"); 
     int x1=input.nextInt(); 
     int y1=input.nextInt(); 
     System.out.println("please enter your radius for the blue circle"); 
     int r1=input.nextInt(); 
     System.out.println("please enter your coordnates for the red circle"); 
     int x2=input.nextInt(); 
     int y2=input.nextInt(); 
     System.out.println("please enter your radius for the red circle"); 
     int r2=input.nextInt(); 
     System.out.println("please enter your coordnates for the pink circle"); 
     int x3=input.nextInt(); 
     int y3=input.nextInt(); 
     System.out.println("please enter your radius for the pink circle"); 
     int r3=input.nextInt(); 
     gObject.setColor(Color.BLUE); 
     drawCircle(gObject,x1 ,y1 ,r1); 
     gObject.setColor(Color.RED); 
     drawCircle(gObject,x2,y2,r2); 
     gObject.setColor(Color.PINK); 
     drawCircle(gObject,x3,y3,r3); 
     compare(r1,r2); 
     compare(r1,r3); 
     compare(r2,r3); 

     }//end of main 

     public static void drawCircle(Graphics g, int x1 , int y1 , int r1){ 
     int X1 = (x1-r1); 
     int Y1 = (y1 - r1); 

     g.fillOval(X1 , Y1 , 2*r1 , 2*r1); 
     }//end of drawcircle 
     //start of compare 
     public static void compare(int r1 , int r2){ 
     if (r1<r2){ 
     System.out.println("Second circle is bigger then The First"); 

     } 
     else if (r1 == r2){ 
      System.out.println("the circles are the same"); 

     } 
      else if (r1 > r2){ 
      System.out.println("Second is smaller then First"); 

      } 

     }} 

здесь измененная, что по некоторым причинам увеличился в ошибки

  import java .awt.*; // for the graphics classs 
     import java .util.*;// for scanner class 
     public class Circles{ 
     public static void main(String[] args){ 
     Scanner input = new Scanner(System.in); //scanner object 
     DrawingPanel panel=new DrawingPanel(400,300); 
     Graphics gObject = panel.getGraphics(); //grahics object 
      // get info on circles 
     System.out.println("please enter your coordnates for the blue circle"); 
     int x1=input.nextInt(); 
     int y1=input.nextInt(); 
     System.out.println("please enter your radius for the blue circle"); 
     int r1=input.nextInt(); 
     System.out.println("please enter your coordnates for the red circle"); 
     int x2=input.nextInt(); 
     int y2=input.nextInt(); 
     System.out.println("please enter your radius for the red circle"); 
     int r2=input.nextInt(); 
     System.out.println("please enter your coordnates for the pink circle"); 
     int x3=input.nextInt(); 
     int y3=input.nextInt(); 
     System.out.println("please enter your radius for the pink circle"); 
     int r3=input.nextInt(); 
      gObject.setColor(Color.BLUE); 
      drawCircle(gObject,x1 ,y1 ,r1); 
      gObject.setColor(Color.RED); 
     drawCircle(gObject,x2,y2,r2); 
     gObject.setColor(Color.PINK); 
     drawCircle(gObject,x3,y3,r3); 
     compare(r1,r2); 
      compare(r1,r3); 
     compare(r2,r3); 
     int cmpResult = compare(r1, r2); 
      if (cmpResult == -1) { 
     System.out.println("r1 is smaller then r2"); 
     } else if (cmpResult == 0) { 
     System.out.println("r1 and r2 are the same"); 
      } else { 
      System.out.println("r1 is bigger then r2"); 
     } 
      System.out.println("Second circle is bigger then The First"); 
      }//end of main 

     public static void drawCircle(Graphics g, int x1 , int y1 , int r1){ 
      int X1 = (x1-r1); 
     int Y1 = (y1 - r1); 

      g.fillOval(X1 , Y1 , 2*r1 , 2*r1); 
      }//end of drawcircle 
      //start of compare 
      public static int compare(int r1 , int r2, cmpResult){ 
     if (r1<r2){ 
     return -1; 

      } 
      else if (r1 == r2){ 
      return 0; 

     } 
      else if (r1 > r2){ 
      return 1; 

      } 

      } } 

Heres ошибки его давая мне

 3 errors found: 
    File: J:\CS Projects\Circles.java [line: 49] 
    Error: Syntax error, insert "}" to complete ClassBody 
    File: J:\CS Projects\Circles.java [line: 51] 
    Error: Syntax error on token "cmpResult", VariableDeclaratorId expected after this token 
    File: J:\CS Projects\Circles.java [line: 65] 
    Error: Syntax error on token "}", delete this token 

надеюсь, тот ясно ... если вы, ребята, нужно мне отправьте код i до сих пор я буду

+1

Это не то, что понятно, если честно! Что вы пробовали и с какой проблемой вы столкнулись? –

ответ

3

Ваш гипотетический compareTo метод "enco дез»результат сравнения с (не так) специальным кодом:

  • Когда первый круг меньше, он должен вернуть -1,
  • Когда круги такие же, он должен вернуть 0
  • Когда первый круг больше, ему необходимо вернуть 1.

Это означает, что основной метод должен сделать декодирование одного и того же:

  • , когда он видит -1, он должен напечатать «меньше»,
  • , когда он видит 0, он должен напечатать " то же ", и
  • , когда он видит 1, он должен печатать" больше ".

Все это может быть сделано с последовательностью if - then - else заявления:

int cmpResult = compareTo(r1, r2); 
if (cmpResult == -1) { 
    System.out.println("r1 is smaller then r2"); 
} else if (cmpResult == 0) { 
    System.out.println("r1 and r2 are the same"); 
} else { 
    System.out.println("r1 is bigger then r2"); 
} 
+0

'isBigger' звучит так, будто он вернет' bool'. Я бы переименовал его в «сравнение», если бы я был вами, потому что это более идиоматично для Java-программ. –

+0

, поэтому я разместил этот пример в основном и передал его методу, который собирался использовать его, и я получил эту ошибку. 1 найденная ошибка: Файл: J: \ CS Projects \ Circles.java [строка: 51] Ошибка: Ошибка синтаксиса на токене «cmpResult», VariableDeclaratorId ожидается после этого токена. я пропустил неправильное имя, я сделал что-то еще неправильно – user2172510

+0

@ user2172510 Пожалуйста, обновите свой вопрос с помощью измененного кода, чтобы мы могли обнаружить ошибку или вставить в pastebin.com и опубликовать ссылку. – dasblinkenlight

2

Если a=5; b=6. a>b возвращает boolean значение, так что вы можете написать так:

int compare_radius(int a, int b) 
    { 
     return (a > b ? 1 : (a < b ? -1 : 0)); 
    } 

(condition)? val1 : val2 называется ternary оператором. Если условие равно true, оно возвращает val1 еще val2. В вашем случае, если a > b она возвращает 1 еще это будет проверять a < b, если это верно, то возвращает -1 еще он вернется 0 для a == b

+0

приятно и легко! тем не менее, это может помочь добавить некоторые разъяснения относительно того, что это делает, я не уверен, что он поймет тройного оператора. – ElefantPhace

+0

^^ Правильно не знаю, что это делает – user2172510

+0

его также хорошо положить скобки вокруг вложенных тройных операций, там когда это произойдет, если вы этого не сделаете. поэтому просто измените на '(a> b? 1: (a Serdalis

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