前回も違う質問をさせて頂いたのですが、bubble sortとselection sortを
ボタンを押す事によって順次長方形を左から右に動かしたいのですが、
どのようにしたら良いのか止まってしまいました。
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
import java.util.Random;
import java.io.*;
public class GUI extends Applet
{
public void update(Graphics g)
{
paint(g);
}
Button button = new Button("Sort Me");
Label text = new Label("Pink: Selection Sort" + "\n" + "Green: Inseration Sort");
int[] store = new int[20];
public static int[] findValue(int [] store){
int rand;
for (int i = 0; i < store.length; i ++){
do{
rand = (int)(Math.random()*51)+10;
}
while(doesExists(rand, store, i));
store[i] = rand;
}
return store;
}
private static boolean doesExists(int rand, int[] arr, int i){
if(i != 0){
for(int j =0; j < i; j++){
if(rand == arr[j]){
return true;
}
}
}
return false;
}
int Counter = 0;
int xScale = 0;
public void displayRectangles(Graphics g)
{
if(Counter < 20)
{
xScale += 12;
int x = 80 + xScale;
int H = store[Counter];
g.setColor(Color.pink);
g.fillRect(x, (140 - H), 10, H);
g.setColor(Color.green);
g.fillRect(x, 140, 10, H);
Counter++;
}
}
private void Rectangles(int xScale, int y, int W, int Counter){
this.xScale = xScale;
this.Counter = Counter;
}
public void setxScale(int xScale){
this.xScale = xScale;
}
public void setCounter(int Counter){
this.Counter = Counter;
}
public int getxScale(){
return xScale;
}
public int getCounter(){
return Counter;
}
public void selectionSort(int[] list){
int min,temp;
int n = list.length;
for(int p = 0; p < n-1; p++){
min = p;
for (int i = p+1; i < n; i++){
if (list[i]<list[min])
min = i;
if (p != min){
temp = list[p];
list[p] = list[min];
list[min] = temp;
}
}
}
}
public void insertionSort (int[] list){
int i,temp;
int n = list.length;
for(int k = 1;k < n; k++){
temp = list[k];
i = k;
while (i > 0 && temp < list[i-1]){
list[i] = list[i -1];
i--;
}
list[i] = temp;
}
}
public void init()
{
setSize(500, 350);
setBackground(Color.WHITE);
add(button);
add(text);
button.addActionListener(new buttonHandler());
store = findValue(store);
}
int c = 0;
public void paint(Graphics g)
{
//scrambleRectangles(store); // scrambled array will be newStore[]
c++;
displayRectangles(g);
if(c < 20)
{
repaint();
}
}
int count = 0;
class buttonHandler implements ActionListener{
public void actionPerformed(ActionEvent e){
count ++;
button.setLabel("pass " + count);
if(e.getActionCommand()=="pass")
repaint();
}
}
}
最終形は以下のリンクの様にしたいのですが、どのようにしたら良いのか分かりません。
http://hills.ccsf.cc.ca.us/~cconner/Java/Sorts/S …
どなたかアドバイス頂けますでしょうか?
よろしくお願い致します。
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
前回と同じように、書いたメソッドを呼んでないので、それではもちろん動かないでしょう。
ボタン押したら、sortしたい。で、ボタン押したら呼ばれるコードはbuttonHandlerのactionPerformedメソッド、だけどそのメソッドの中でそれぞれのソートのメソッドを呼んでない。
ただし、今のままではそうしても正しく動作しません。なぜなら、ランダムな数で埋めた配列が1つしかないから。
アルゴリズムの動作を比較するためには同じ数で埋めた配列がアルゴリズムの数だけ必要だけど、今はstoreという一つだけの配列しか作ってないですよね。
そして、それ以外にコメント
0)クラス、変数とメソッドの名前は「意味」があるものにしないと理解しにくいです。
例、GUIなんてgenericな名前ではなくSortDemoAppletみたいな名前にする。
int[] findValue(int[] store)
ではなく
void fillWithRandomValues(int[] store)
か
int[] getRandomValues()
にする。
GUI用のメソッドでx,Hとかなら分かりますけど、cだとかCounterだとか、意味が分からない。
コード書くときは、人に理解できるように書かないと、時間が経ったら書いた自分ですら意味が分からなくなりますよ。
それに、読む人に必要のないことを考えさせてイラつかせて、自分がわざわざ説明しなくてはいけないかもしれないと考えると面倒でしょう(笑)
1)findValueでは "store"の参照を直接変更しているので,そうしたいのなら、"store"を戻す必要がない。
2)コードには全く関係ありませんが、doesExistsではなく、正確にはdoesExistが文法的には正しいです。
そして、今気づいたんですけど、GUIのコードが正しく動作してませんね。まずは、↑のリストを基にコードをキレイに分かりやすいように書き直してください。
そして、具体的にどう正しく動作してないのか、ちゃんと考えてから質問してください。
厳しいこと言うようですが、これくらいの単純なプログラムのことで自分で考えないで「正しく動作しません、アドバイスください」なんて言ってるようだとプログラミング一生上手くなりませんよ。せめて、「多分、これが原因でこの部分が誤作動してると思う」くらいは書けるように、質問する前に考えてみてください。そうすれば、いずれ、質問しなくても直し方が見えてくるようになるでしょう。
ご丁寧なご回答ありがとうございます。
すみませんでした。
友達と一緒に作っていて、assignmentで表示されたクラス名を既に使っていたので、ダミーでクラス名を付けていました。そしておっしゃる様にdoesExistでtypoでした。
Assignment内容をしっかり読めれば良いのですが、読解力不足があり、いまいち分からない部分が多いのも事実です。instructorともやりとりしているのですが、onlineのクラスでメールを送っても返って来るのが数日後になるので、ストップしてしまい、ここで色々質問してしまいました。
そうですね、私自身も分からない状態でやっているのも事実です。日本語のテキストを日本に帰った時に探して再度ちゃんと読み込んで勉強したいと思っています。
今日、学校にtutorが居るので、その人に再度聞いてみます。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- C言語・C++・C# leetcode 155 minstack 1 2022/05/07 16:43
- C言語・C++・C# C 言語の Gauss Jordan 法について 2 2022/12/28 11:16
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
javaでcsvファイル読込時の改行...
-
式の型は配列型で int に解決済...
-
C++からC#のdllを参照する際、...
-
JAVAでCの関数ポインタのような...
-
共有メモリについて
-
「配列定数は、イニシャライザ...
-
コード中の謎のエラー
-
C#での画像ファイルをドラッグ...
-
javaでカレンダー作成
-
ビープ音をなめらかに鳴らしたい
-
java spring でエラーが出て困...
-
java 長さの異なる配列の代入
-
JAVA EOFの検出 (条件文で「...
-
SwingでJtableのヘッダ行が表示...
-
Java 初心者 int型の取り扱い方
-
後置インクリメントの計算過程...
-
二分探索木で例えば1〜10の値を...
-
sin曲線とcos曲線を描くプログ...
-
byte[2] から int へ。
-
intが負の時に投げる例外はあり...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
javaでcsvファイル読込時の改行...
-
java spring でエラーが出て困...
-
DataSet(DataTable)の使い方
-
「配列定数は、イニシャライザ...
-
JUnit4のアノテーションについて
-
C#で実行時にメソッドの返り値...
-
JAVA エラー 式の開始が不正で...
-
JAVAでCの関数ポインタのような...
-
c# デリゲート関連の命名について
-
java streamでenum配列への変換
-
intが負の時に投げる例外はあり...
-
Java 初心者 int型の取り扱い方
-
C++からC#のdllを参照する際、...
-
アンマネージDLLで、ダイアログ...
-
【C#】フォームをなめらかに移動
-
(Swing)JTextFieldを半角のみ入...
-
Javaで簡単なアニメーションを...
-
javaのエラーの意味がわかりま...
-
C#で判断文(三択)の省略形は...
-
共有メモリについて
おすすめ情報