java.awt.Color getRed() returnează „nu poate găsi simbolul” [duplicat] (Programare, Java)

Natalie a intrebat.

Încerc să fac acest exercițiu 3.1.6 din cartea Introducere în programare în java de Sedgewick.

import java.lang.Object;
import java.awt.Color;
import java.util.*;
import java.util.Collections;


public class treetseks{
    public static void main(String[] args){
        List<Color> list;
        list = new ArrayList<Color>();
        Picture pic= new Picture(args[0]);

        int width = pic.width();
        int height = pic.height();

        Picture picr = new Picture(width, height);
        Picture picg = new Picture(width, height);
        Picture picb = new Picture(width, height);

        for (int y = 0; y < height; y++){
            for (int x = 0; x < width; x++){
                Color redpixel = pic.getRed(x, y);
                Color greenpixel = pic.getGreen(x, y);
                Color bluepixel = pic.getBlue(x, y);
                list.add(p);
                picr.set(x, y, redpixel);
                picg.set(x, y, greenpixel);
                picb.set(x, y, bluepixel);
            }
        }

        System.out.println(list);
        pic.show();
        picr.show();
        picg.show();
        picb.show();
    }
}

Când încerc să compilez această bucată de cod primesc mesajul de eroare de compilare „cannot find symbol” punând la metoda getRGB(). Acest lucru îmi dă impresia că trebuie să import o clasă sau ceva de genul acesta. Dar am importat deja java.awt.Color, ceea ce cred că ar trebui să fie suficient.

Imaginea clasei este de pe acest site

http://introcs.cs.princeton.edu/java/stdlib/Picture.java.html

și se află în același dosar cu această clasă.

Dacă schimb metodele getRed() getGreen() getBlue() getBlue() în get(), codul funcționează perfect… Presupun că este din cauză că atunci folosesc metoda get() din imaginea clasei în loc de clasa Color? Am dreptate? Ce am făcut greșit și cum pot folosi metodele getRed() getGreen() și getBlue()?

Comentarii

  • getRGB()” Unde este asta în codul dumneavoastră? –  > Por Andy Turner.
  • btw. acesta este exercițiul:Scrieți un program care primește numele unui fișier imagine ca intrare în linia de comandă și creează și afișează trei obiecte imagine. Unul care conține doar componentele roșii, unul pentru verde și unul pentru albastru. –  > Por Natalie.
  • Verifică fișierul Java la care ai făcut legătura… Unde sunt definite aceste metode? –  > Por OneCricketeer.
  • Clasa de imagine pe care ați legat-o nu conține metoda „getRed()” sau orice altă culoare. Presupun că exercițiul tău este de a furniza aceste metode. –  > Por Januson.
  • Îmi pare rău… Am schimbat getRGB în getRed() getGreen() getBlue() și am uitat să o schimb în întrebare. Totuși, aceeași întrebare și exact aceeași eroare de compilare. Doar în ceea ce privește getRed() getGreen() getBlue(). –  > Por Natalie.
5 răspunsuri
Krzysztof Cichocki

Clasa Picture la care ați făcut referire are doar metoda public Color get(int x, in y); așa că schimbați partea:

            Color redpixel = pic.getRed(x, y);
            Color greenpixel = pic.getGreen(x, y);
            Color bluepixel = pic.getBlue(x, y);

în

        Color pixelColor = pic.get(x, y);
        int red = pixelColor.getRed();
        int green = pixelColor.getGreen();
        int blue = pixelColor.getBlue();
        Color redPixel = new Color(red, 0, 0);
        Color greenPixel = new Color(0, green, 0);
        Color bluePixel = new Color(0, 0, blue);

Deci, ar putea fi:

import java.lang.Object;
import java.awt.Color;
import java.util.*;
import java.util.Collections;


public class treetseks{
    public static void main(String[] args){
        List<Color> list;
        list = new ArrayList<Color>();
        Picture pic= new Picture(args[0]);

        int width = pic.width();
        int height = pic.height();

        Picture picr = new Picture(width, height);
        Picture picg = new Picture(width, height);
        Picture picb = new Picture(width, height);

        for (int y = 0; y < height; y++){
            for (int x = 0; x < width; x++){
                Color pixelColor = pic.get(x, y);
                list.add(pixelColor );
                int red = pixelColor.getRed();
                int green = pixelColor.getGreen();
                int blue = pixelColor.getBlue();
                Color redPixel = new Color(red, 0, 0);
                Color greenPixel = new Color(0, green, 0);
                Color bluePixel = new Color(0, 0, blue);

                picr.set(x, y, redPixel);
                picg.set(x, y, greenPixel);
                picb.set(x, y, bluePixel);
            }
        }

        System.out.println(list);
        pic.show();
        picr.show();
        picg.show();
        picb.show();
    }
}

nick zoum

Metoda: Color getRed(int x, int y), , Color getGreen(int x, int y) și Color getBlue(int x, int y), , pe care încercați să le utilizați, nu există.

Ceea ce există este metoda Color get(int x, int y) și atunci puteți utiliza metoda Color metode int getRed(), , int getGreen(), , int getBlue().

Deci, ar trebui să schimbați o parte din bucla for în ceva de genul următor:

Color color = pic.get(x, y);
int redPixel = color.getRed();
int greenPixel = color.getGreen();
int bluePixel = color.getBlue();

picr.set(x, y, new Color(redPixel, 0, 0);
picg.set(x, y, new Color(0, greenPixel, 0));
picb.set(x, y, new Color(0, 0, bluePixel));

Aș dori, de asemenea, să remarc faptul că ați putea folosi foarte ușor o clasă precum BufferedImage în viitor (nu trebuie să reinventați roata).În cele din urmă, conform convențiile standard de denumire pentru Java, numele valorilor separate ale culorilor ar trebui să fie redPixel, , greenPixel și bluePixel în loc de redpixel, , greenpixel și bluepixel respectiv

Zyndoras

Clasa Picture nu oferă metodele getRed(), getGreen(), getBlue(). singura metodă pe care o pot găsi și care se potrivește problemei tale este get().

get() returnează o instanță a clasei Color.Color are oferă getRed(), getGreen() și getBlue().

Deci, în codul dumneavoastră ar trebui să faceți ceva de genul

Color pixel = picture.get(x, y);
int red = pixel.getRed();
int green = pixel.getGreen();
int blue = pixel.getBlue();

picr.set(x, y, new Color(red, 0, 0));
picg.set(x, y, new Color(0, green, 0));
picb.set(x, y, new Color(0, 0, blue));

Nyakiba

Nu aveți metodele getRed(),getGreen() sau getBlue() în clasa dumneavoastră. Dacă vrei să folosești aceste funcții va trebui să le declari în clasa Picture,altfel rămâi la funcția get(). Pentru a obține culorile individuale, procedați astfel:

Color c = new Color(pic.getRGB());
int redPixel = c.getRed();
int greenPixel = c.getGreen();
int bluePixel = c.getBlue();

picr.set(x, y, new Color(redPixel, 0, 0);
picg.set(x, y, new Color(0, greenPixel, 0));
picb.set(x, y, new Color(0, 0, bluePixel));

OneCricketeer

Cred că ai vrut să folosești funcția getRed(), , etc. din clasa Color din clasa Color. Acea clasă Picture nu are aceste metode.

Iar acele metode nu acceptă parametri și în schimb returnează ints, nu obiecte Color.

final Color rgb = pic.get(x, y);
int redpixel = rgb.getRed();
int greenpixel = rgb.getGreen();
int bluepixel = rgb.getBlue();

Dacă schimb metodele getRed() getGreen() getBlue() getBlue() în get(), codul funcționează perfect.

Nu ar trebui să funcționeze perfect. Nu ați obținut culorile individuale. Atunci când utilizați mai târziu metoda picr.set metoda, nu aveți doar roșu. Dacă doriți acest lucru, atunci utilizați codul de mai sus, apoi

picr.set(x,y, new Color(redpixel, 0, 0));

Apoi, celelalte

Tags: