2017-12-18 10 views
0

に個々の行に表示されていない私は私のコースで、別のプログラムに取り組んでいます、そして、私たちはのArrayListのに複数の機能を実行するプログラムを作成することになりました。整数(すなわち、クラスのマーク)。私の問題は、 "マーク" arraylistの値を昇順で出力しようとすると、各値がそれ自身の行にあり、最後に入力された値だけが表示されるということです。例えばJavaのNetbeansの8.0 JFrameのGUIプログラム - 配列リストの各インデックス値はJTextAreaの

、I入力25、次に54と、私は、「並べ替え」ボタンをクリックすると、唯一の54はJTextAreaに表示されます。私のコードを以下に示します。問題はsortButtonActionPerformedメソッドの中にあることに注意してください。

import java.util.*; 
public class MarksGUI extends javax.swing.JFrame { 

    ArrayList <Integer> marks = new ArrayList(); 
    ArrayList <Integer> marksSorted = new ArrayList(); 

    int numlvlR=0; 
    int numlvl1=0; 
    int numlvl2=0; 
    int numlvl3=0; 
    int numlvl4=0; 


    public MarksGUI() { 

     initComponents(); 
    } 

    /** 
    * This method is called from within the constructor to initialize the form. 
    * WARNING: Do NOT modify this code. The content of this method is always 
    * regenerated by the Form Editor. 
    */ 
    @SuppressWarnings("unchecked") 
    // <editor-fold defaultstate="collapsed" desc="Generated Code">       
    private void initComponents() { 

     titleLabel = new javax.swing.JLabel(); 
     markLabel = new javax.swing.JLabel(); 
     markInput = new javax.swing.JTextField(); 
     addButton = new javax.swing.JButton(); 
     jScrollPane1 = new javax.swing.JScrollPane(); 
     analyzeField = new javax.swing.JTextArea(); 
     jScrollPane2 = new javax.swing.JScrollPane(); 
     classmarksField = new javax.swing.JTextArea(); 
     sortButton = new javax.swing.JButton(); 
     analyzeButton = new javax.swing.JButton(); 

     setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 

     titleLabel.setFont(new java.awt.Font("Tahoma", 1, 24)); // NOI18N 
     titleLabel.setForeground(new java.awt.Color(0, 0, 204)); 
     titleLabel.setText("Marks Program"); 

     markLabel.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N 
     markLabel.setText("Student Mark:"); 

     addButton.setText("Add"); 
     addButton.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       addButtonActionPerformed(evt); 
      } 
     }); 

     analyzeField.setEditable(false); 
     analyzeField.setColumns(20); 
     analyzeField.setRows(5); 
     jScrollPane1.setViewportView(analyzeField); 

     classmarksField.setEditable(false); 
     classmarksField.setColumns(20); 
     classmarksField.setRows(5); 
     jScrollPane2.setViewportView(classmarksField); 

     sortButton.setText("Sort"); 
     sortButton.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       sortButtonActionPerformed(evt); 
      } 
     }); 

     analyzeButton.setText("Analyze"); 
     analyzeButton.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       analyzeButtonActionPerformed(evt); 
      } 
     }); 

     javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 
     getContentPane().setLayout(layout); 
     layout.setHorizontalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() 
       .addGap(0, 32, Short.MAX_VALUE) 
       .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addGap(18, 18, 18) 
       .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addGap(42, 42, 42)) 
      .addGroup(layout.createSequentialGroup() 
       .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
        .addGroup(layout.createSequentialGroup() 
         .addGap(107, 107, 107) 
         .addComponent(titleLabel)) 
        .addGroup(layout.createSequentialGroup() 
         .addGap(75, 75, 75) 
         .addComponent(markLabel) 
         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
         .addComponent(markInput, javax.swing.GroupLayout.PREFERRED_SIZE, 58, javax.swing.GroupLayout.PREFERRED_SIZE) 
         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
         .addComponent(addButton))) 
       .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) 
      .addGroup(layout.createSequentialGroup() 
       .addGap(86, 86, 86) 
       .addComponent(sortButton) 
       .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
       .addComponent(analyzeButton) 
       .addGap(90, 90, 90)) 
     ); 
     layout.setVerticalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(layout.createSequentialGroup() 
       .addContainerGap() 
       .addComponent(titleLabel) 
       .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) 
       .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 
        .addComponent(markInput, javax.swing.GroupLayout.PREFERRED_SIZE, 22, javax.swing.GroupLayout.PREFERRED_SIZE) 
        .addComponent(markLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
        .addComponent(addButton)) 
       .addGap(18, 18, 18) 
       .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) 
        .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 245, Short.MAX_VALUE) 
        .addComponent(jScrollPane1)) 
       .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
       .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 
        .addComponent(sortButton) 
        .addComponent(analyzeButton)) 
       .addContainerGap(19, Short.MAX_VALUE)) 
     ); 

     pack(); 
    }// </editor-fold>       

    //add method is working///////////// 
    private void addButtonActionPerformed(java.awt.event.ActionEvent evt) {           
     int newMarks; 

     newMarks = Integer.parseInt(markInput.getText()); 

     marks.add(newMarks); 
     System.out.println(marks);//testing purposes 




    }           
    //problem is in sort method////////////// 
    private void sortButtonActionPerformed(java.awt.event.ActionEvent evt) {           

     int biggestMark = largestMark();//YOU WERE HERE/////////////////////////////////////////////////////////////////////////////////////////// 
     for(int k = 0;k<marks.size();k++) 
     { 

      marksSorted.add((marks.get(k))); 
      System.out.println(marksSorted);//testing purposes 

     } 
     for(int x = 0;x<marks.size();x++) 
     { 
      Collections.sort(marksSorted); 
      classmarksField.setText(marksSorted.get(x)+"\n"); 
      System.out.println(marksSorted);//testing purposes 
     } 

    }**           
    //working////////////////////// 
    private void analyzeButtonActionPerformed(java.awt.event.ActionEvent evt) {            
     int maxMark, minMark, mark; 
     analyzeField.setText("Class Average:"+classAverage()+"\n"+"Maximum Mark:"+largestMark()+"\n"+"Mininmum Mark:"+smallestMark()+"\n"+"Range of Marks:"+rangeofMarks()+"\n"+"Num at level 4:"+numlvl4+"\n"+"Num at level 3"+numlvl3+"\n"+"Num at level 2:"+numlvl2+"\n"+"Num at level 1:"+numlvl1+"\n"+"Num at level R:"+numlvlR); 









    }            
    public int classAverage(){ 
     int marksTotal, marksAverage; 
     marksTotal = 0; 

     for(int i = 0; i<marks.size();i++){ 
      marksTotal = marksTotal+marks.get(i); 
     } 
     marksAverage = marksTotal/marks.size(); 
     return(marksAverage); 
    } 
    public int smallestMark(){ 
     int smallestmarkValue; 
     smallestmarkValue = 100; 
     for(int y = 0; y<marks.size();y++){ 
      if(marks.get(y)<=smallestmarkValue) 
      { 
       smallestmarkValue = marks.get(y); 
      } 
      else 
      { 
      } 
     } 
     return(smallestmarkValue); 
    } 
    public int largestMark(){ 
     int largestmarkValue; 
     largestmarkValue = 0; 
     for(int z = 0; z<marks.size();z++){ 
      if(marks.get(z)>=largestmarkValue) 
      { 
       largestmarkValue = marks.get(z); 
      } 
      else 
      { 
      } 

     } 
     return(largestmarkValue);  
    } 
    public int rangeofMarks(){ 
     int range; 
     range = largestMark()-smallestMark(); 
     return(range); 
    } 
    public int numwitheachlevel(){ 
     int mark; 
     mark = 0; 

     for(int j = 0; j<marks.size();j++){ 
      mark = marks.get(j); 
      if(mark<50) 
      { 
       numlvlR++; 
      } 
      else if((mark >= 50) && (mark < 60)) 
      { 
       numlvl1++; 
      } 
      else if((mark >= 60) && (mark < 70)) 
      { 
       numlvl2++; 
      } 
      else if((mark >= 70) && (mark < 80)) 
      { 
       numlvl3++; 
      } 
      else if(mark >= 80) 
      { 
       numlvl4++; 
      } 

     //numeachlvl.addAll(numlvlR,numlvl1,numlvl2,numlvl3,numlvl4); 
     //return(numeachlvl);//you were here/////////////////////////////////////////////////////////////////////////////// 

    } 
    //System.out.println("Range:"+rangeofMarks()); 
    System.out.println("Largest mark"+largestMark()); 
    System.out.println("Smallest mark:"+smallestMark()); 
    System.out.println("Number at level R:"+numlvlR); 
    System.out.println("Number at level 1:"+numlvl1); 
    System.out.println("Number at level 2:"+numlvl2); 
    System.out.println("Number at level 3:"+numlvl3); 
    System.out.println("Number at level 4:"+numlvl4); 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String args[]){ 
     /* Set the Nimbus look and feel */ 
     //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "> 
     /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. 
     * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
     */ 
     try { 
      for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { 
       if ("Nimbus".equals(info.getName())) { 
        javax.swing.UIManager.setLookAndFeel(info.getClassName()); 
        break; 
       } 
      } 
     } catch (ClassNotFoundException ex) { 
      java.util.logging.Logger.getLogger(MarksGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (InstantiationException ex) { 
      java.util.logging.Logger.getLogger(MarksGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (IllegalAccessException ex) { 
      java.util.logging.Logger.getLogger(MarksGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (javax.swing.UnsupportedLookAndFeelException ex) { 
      java.util.logging.Logger.getLogger(MarksGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } 
     //</editor-fold> 

     /* Create and display the form */ 
     java.awt.EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       new MarksGUI().setVisible(true); 
      } 
     }); 
    } 


    // Variables declaration - do not modify      
    private javax.swing.JButton addButton; 
    private javax.swing.JButton analyzeButton; 
    private javax.swing.JTextArea analyzeField; 
    private javax.swing.JTextArea classmarksField; 
    private javax.swing.JScrollPane jScrollPane1; 
    private javax.swing.JScrollPane jScrollPane2; 
    private javax.swing.JTextField markInput; 
    private javax.swing.JLabel markLabel; 
    private javax.swing.JButton sortButton; 
    private javax.swing.JLabel titleLabel; 
    // End of variables declaration     
} 
+0

私はそれがしたいともnumwitheachlevel()メソッドが機能していません。マークが特定の範囲内にある場合は、変数の前の値に1の値が追加されます。これは私が "numlvlR ++;"を持っている理由で、ある人がその範囲内にマークを持っているときにその変数に変数が追加されるようにするためです。 – Sandorj

+1

有効な[mcve]を作成して投稿してください。問題が本質的なものにまで蒸留されなければならないときには、無関係なコードを大量に流す必要がありません。私が示唆していることを完全に理解するためのリンクをお読みください。 –

答えて

1

。例えば、私は入力25、次に54であれば、私はなぜあなたは、あなたがデータを取得している場合はループを制御するためにmarks.sizeを使用しているだけで54 JTextAreaの中に表示される

for(int x = 0;x<marks.size();x++) 
{ 
    Collections.sort(marksSorted); 
    classmarksField.setText(marksSorted.get(x)+"\n"); 
    System.out.println(marksSorted);//testing purposes 
} 

、「並べ替え」ボタンをクリックしてくださいmarkssortedリストから。ソートはデータのコピーを作成しません。

は、なぜあなたはリストにループを通るたびに並べ替えるでしょうか?あなたは何を変えることを期待していますか?

なぜあなたはのsetText(...)を使用するのでしょうか?これにより、テキストエリア内のすべてのテキストが置き換えられ、リスト内の最後の値のみが取得されます。

はJTextAreaにのappend(...)メソッドを使用します。

+0

私はそれを修正しました。今は自分のメソッドの1つでArrayListを返そうとしています。それは私にエラー "java.lang.IndexOutOfBoundsException:Index:4、Size:0"を与えます。 – Sandorj

+0

私はすでにあなたに答えを与えました。あなたのループで2つのArrayListsを参照しているのはなぜですか?なぜあなたのArrayListは空ですか?基本的なデバッグが必要です。 – camickr

関連する問題