2014-11-13 4 views
2

Привет всем, меня зовут Fyree, я недавно заканчивал школьное задание и нуждаюсь в некоторой помощи. Во-первых, позвольте мне дать вам вторую половину моего кода, к которому этот вопрос имеющую отношение:Как преобразовать двойной массив в массив int

public class Rate_Graph_Graph extends Rate_Graph1{ 
     double Aa, Bb, Cc, Dd, Ee, Ff; 
     public void anotheractionPerformed(ActionEvent ae) 
     { 
      if (ae.getSource() == calc){ 
      Aa = Double.parseDouble(bv1.getText()); 
      Bb = Double.parseDouble(ev_1.getText()); 
      Cc = Double.parseDouble(ev_2.getText()); 
      Dd = Double.parseDouble(ev_3.getText()); 
      Ee = Double.parseDouble(ev_4.getText()); 
      Ff = Double.parseDouble(ev_5.getText()); 
      } 
     } 
     JLabel graphLabel; 
     double[] data = {Aa, Bb, Cc, Dd, Ee, Ff}; 
     final int finalInt = 50; 
     public void paintGraph(Graphics g){ 
     super.paintComponent(g); 
     Graphics2D g2 = (Graphics2D)g; 

     int w = getWidth(); 
     int h = getHeight(); 

     graphLabel = new JLabel ("<HTML><FONT SIZE =+25>Line Graph showing the Return Rate</FONT>"); 
     add(graphLabel); 

     g2.draw(new Line2D.Double(finalInt, finalInt, finalInt, h-finalInt)); 
     g2.draw(new Line2D.Double(finalInt, h-finalInt, w-finalInt, h-finalInt)); 
     Font font1 = g2.getFont(); 
     FontRenderContext fontRender = g2.getFontRenderContext(); 
     LineMetrics lineMetrics = font1.getLineMetrics("0", fontRender); 
     float ft = lineMetrics.getAscent()+lineMetrics.getDescent(); 
     String str = ""; 

     g.drawString("Aa", 5, 315); 
     g.drawString("Bb", 5, 260); 
     g.drawString("Cc",5,205); 
     g.drawString("Dd",5,150); 
     g.drawString("Ee",5,100); 
     g.drawString("Ff",5,55); 

     g.drawString("Beginning Value",50,335); 
     g.drawString("Yeatr 1 Value",175,335); 
     g.drawString("Year 2 Value",300,335); 
     g.drawString("Year 3 Value",425,335); 
     g.drawString("Year 4 Value",550,335); 
     g.drawString("Year 5 Value",675,335); 

     float ft2 = finalInt + ((h - 2*finalInt) - str.length()*ft)/2 + lineMetrics.getAscent(); 
     for(int i = 0; i < str.length(); i++){ 
     String strLetter = String.valueOf(str.charAt(i)); 
     float ft3 = (float)font1.getStringBounds(strLetter, fontRender).getWidth(); 
     float ft4 = (finalInt - ft3)/2; 
     g2.drawString(strLetter, ft3, ft4); 
     ft2 += ft; 
     } 
     str = "YEARS"; 
     ft2 = h - finalInt + (finalInt - ft)/2 + lineMetrics.getAscent(); 
     float ft3 = (float)font1.getStringBounds(str, fontRender).getWidth(); 
     float ft4 = (w - ft3)/2; 
     g2.drawString(str, ft4, ft2); 
     double xInc = (double)(w - 2*finalInt)/(data.length-1); 
     double scale = (double)(h - 2*finalInt)/getMax(); 
     g2.setPaint(Color.green.darker()); 
     for(int i = 0; i < data.length-1; i++){ 
      double x1 = finalInt + i*xInc; 
      double y1 = h - finalInt - scale*data[i]; 
      double x2 = finalInt + (i+1)*xInc; 
      double y2 = h - finalInt - scale*data[i+1]; 
      g2.draw(new Line2D.Double(x1, y1, x2, y2)); 
     } 
    } 
    private double getMax() 
    { 
    int max = -Integer.MAX_VALUE; 
    final int[] intData = new int[data.length]; 
    for(int i = 0; i < data.length; i++){ 
     if(data[i] > max) 
     max = data[i]; 
    } 
    return max; 
    } 
    public static void main(String[]args) 
    { 
    JFrame f = new JFrame(); 
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    f.add(new GraphingData()); 
    f.setSize(800,400); 
    f.setLocation(200,200); 
    f.setResizable(false); 
    f.setVisible(true); 
    } 
} 

Теперь здесь является то, что мой вопрос, как вы преобразовать двойной массив [] данные, которые я выше в межд массив, так что я могу использовать его в частном двойном методе getMax(), который находится в конце кода (я получаю ошибку: «несовместимые типы: возможно потерять преобразование из double в int», когда я пытаюсь это сделать без преобразования)? Любая помощь приветствуется, так как это назначение должно быть сделано позже сегодня!

ответ

0

ваша ошибка здесь

private double getMax() 
{ 
int max = -Integer.MAX_VALUE; 
final int[] intData = new int[data.length]; 
for(int i = 0; i < data.length; i++){ 
    if(data[i] > max) 
    max = data[i]; 
} 
return max; 

}

Ваш массив дважды, и вы сравниваете его в целое, вы должны сделать так:

private double getMax() 
{ 
double max = Double.MIN_VALUE; 
final int[] intData = new int[data.length]; 
for(int i = 0; i < data.length; i++){ 
    if(data[i] > max) 
    max = data[i]; 
} 
return max; 

}

Btw, что такое intData, он никогда не используется?

+0

В нем говорится, что он не может найти переменную DOUBLE, также мне нужно, чтобы она знакомилась перед ней. – Fyree

+0

Double.MIN_VALUE означает, что вы получаете минимальное значение из double, что не означает 0, это что-то вроде -Infinity, поэтому это будет почти то же самое, что и put -MAX_VALUE. который «DOUBLE»? если вы ссылаетесь на «Double.MIN_VALUE», этот двойник должен быть написан «Double», иначе он будет терпеть неудачу. – Aleksandar

+0

Спасибо, что это сработало, также я знаю, что это не с темой, но я не получаю ошибку для f.add (new Rate_Graph_Graph()); нельзя ссылаться на статический контекст, знаете ли вы, почему это так? Мне нужно сохранить его как public void static main (String [] args) для одного. – Fyree

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