質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

1回答

291閲覧

Javaでコマンド引数で切り替える

退会済みユーザー

退会済みユーザー

総合スコア0

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2023/06/06 16:07

実現したいこと

SortMainにQuicSortを結合してコマンド引数で切り替えれるようにしたいです。

前提

自分なりにSortMainに書いてみましたが下記の様なエラーが起きました。
どのように変更すれば良いのかを教えていただきたいです。

発生している問題・エラーメッセージ

SortMain.java:220: エラー: ';'がありません int[] sort(int[] d) { ^ SortMain.java:220: エラー: ';'がありません int[] sort(int[] d) { ^ エラー2個

###SortMain###

import java.util.Stack; public class SortMain { public static void main(String args[]) { int data[] = {25, 47, 93, 62, 8, 71, 12, 28, 34, 55}; System.out.print("元のデータ"); print_data(data); if (args.length >= 1) { switch (args[0]) { case "BubbleSort": BubbleSort(data); break; case "InsertSort": InsertSort(data); break; case"SelectSort": SelectSort(data); break; case"MergeSort": MergeSort(data); break; case"bubblesort": bubblesort(data); break; case"insertsort": insertsort(data); break; case"selectsort": selectsort(data); break; case"mergesort": mergesort(data); break; default: break; } System.out.print("並び替えたデータ:"); print_data(data); } } static void print_data(int a[]) { System.out.print('['); for (int i = 0; i < a.length; i++) { System.out.print(a[i]); if (i < a.length - 1) System.out.print(','); } System.out.println(']'); } static void BubbleSort(int a[]) { for (int i = 0; i < a.length; i++) { for (int j = a.length - 1; j > i; j--) { if (a[j - 1] > a[j]) { int tmp = a[j - 1]; a[j - 1] = a[j]; a[j] = tmp; } System.out.print(i+"回目"); print_data(a); } } } static void InsertSort(int a[]) { for (int i = 1; i < a.length; i++) { int target = a[i]; int j; for (j = i - 1; j >= 0; j--) { if (a[j] < target) { a[j + 1] = target; break; } else a[j + 1] = a[j]; } if (j < 0) a[0] = target; System.out.print(i+"回目"); print_data(a); } } static int searchMin(int a[],int start) { int mpos = start; / for(int i = start+1; i < a.length; i++) if(a[mpos] > a[i]) mpos = i; return mpos; } static void SelectSort(int a[]) { for(int i = 0; i < a.length; i++) { int mpos = searchMin(a,i); int tmp = a[i]; a[i] = a[mpos]; a[mpos] = tmp; System.out.print(i+"回目"); print_data(a); } } static void MergeSort(int a[]) { if(a.length <= 1) return; int blen,clen; blen = clen =a.length/2; if(a.length % 2 != 0) blen++; int b[] = new int[blen]; int c[] = new int[clen]; for(int i = 0; i < a.length; i++) { if(i<blen) b[i] = a[i]; else c[i-blen] = a[i]; } System.out.print("2つに分割"); print_data("sorting ", a, true); MergeSort(b); MergeSort(c); for(int i = 0,bi = 0,ci = 0; i < a.length; i++) { if(bi < blen && ci < clen) { if(b[bi]<=c[ci]) a[i] = b[bi++]; else a[i] = c[ci++]; } else if(ci >= clen) a[i] = b[bi++]; else a[i] = c[ci++]; } } static void print_data(String s,int a[],boolean flag) { System.out.print(s); print_data(a,flag); } static void print_data(int a[],boolean flag) { System.out.print("["); for(int i = 0; i < a.length; i++) { System.out.print(a[i]); if(i < a.length-1) System.out.print(","); } if(flag) System.out.println("]"); else System.out.println("]"); } static void bubblesort(int a[]) { for(int i = 0; i < a.length; i++) for(int j = a.length-1; j > i; j--) { if(a[j-1] < a[j]) { int tmp = a[j-1]; a[j-1] = a[j]; a[j] = tmp; } System.out.print(i+"回目"); print_data(a); } } static void insertsort(int a[]) { for(int i = 1; i < a.length; i++) { int target = a[i]; int j; for(j = i-1; j >= 0; j--) { if(a[j] > target) { a[j+1] = target; break; } else a[j+1] = a[j]; } if(j<0) a[0] = target; System.out.print(i+"回目"); print_data(a); } } static int Min(int a[],int start) { int mpos = start; for(int i = start+1; i < a.length; i++) if(a[mpos] < a[i]) mpos = i; return mpos; } static void selectsort(int a[]) { for(int i = 0; i < a.length; i++) { int mpos = Min(a,i); int tmp = a[i]; a[i] = a[mpos]; a[mpos] = tmp; System.out.print(i+"回目"); print_data(a); } } static void mergesort(int a[]) { if(a.length <= 1) return; int blen,clen; blen = clen =a.length/2; if(a.length % 2 != 0) blen++; int b[] = new int[blen]; int c[] = new int[clen]; for(int i = 0; i < a.length; i++) { if(i<blen) b[i] = a[i]; else c[i-blen] = a[i]; } System.out.print("2つに分割"); print_data("sorting ", a, true); mergesort(b); mergesort(c); for(int i = 0,bi = 0,ci = 0; i < a.length; i++) { if(bi > blen && ci > clen) { if(b[bi]<=c[ci]) a[i] = b[bi++]; else a[i] = c[ci++]; } else if(ci >= clen) a[i] = b[bi++]; else a[i] = c[ci++]; } } }

###QuicSort###

public class QuicSort { static int[] sort(int[] d) { if(d == null) return null; if(d.length<=1) return d; int pivot = d[0]; MStack a = new MStack(d.length); MStack b = new MStack(d.length); for(int i = 1; i<d.length;i++) { if(d[i]<pivot) a.push(d[i]); else b.push(d[i]); System.out.print(i+"回目"); print_data(d); } MStack ans = new MStack(d.length); ans.push(sort(a.toArray())); ans.push(pivot); ans.push(sort(b.toArray())); return ans.toArray(); } static void print_data(String s,int a[],boolean flag) { System.out.print(s); print_data(a,flag); } static void print_data(int a[],boolean flag) { System.out.print('['); for(int i = 0;i < a.length;i++){ System.out.print(a[i]); if(i < a.length-1) System.out.print(','); } if(flag) System.out.println(']'); else System.out.print(']'); } static void print_data(int a[]) { print_data(a, true); } public static void main(String[] arg) { int data[] = {11,61,31,13,65,64,56,12,25,27,37,93}; System.out.print("元のデータ"); print_data(data); print_data(data); int[] ans = sort(data); print_data(ans); } } class MStack { int[] data; int nItem; MStack(int n) { data = new int[n]; nItem = 0; } void push(int x) { data[nItem] = x; nItem++; } void push(int[] d) { if(d == null) return; for(int i=0;i < d.length;i++) push(d[i]); } int pop() { nItem--; return data[nItem]; } int[] toArray() { if(nItem <= 0) return null; int[] ans = new int[nItem]; for(int i = 0; i < nItem; i++) ans[i] = data[i]; return ans; } }
//ここまでは上のSortMainと同じです static void QuicSort(int a[]){ int[] sort(int[] d) { if(d == null) return null; if(d.length<=1) return d; int pivot = d[0]; MStack a = new MStack(d.length); MStack b = new MStack(d.length); for(int i = 1; i<d.length;i++) { if(d[i]<pivot) a.push(d[i]); else b.push(d[i]); System.out.print(i+"回目"); print_data(d); } MStack ans = new MStack(d.length); ans.push(sort(a.toArray())); ans.push(pivot); ans.push(sort(b.toArray())); return ans.toArray(); } if(flag) System.out.println(']'); else System.out.print(']'); } class MStack { int[] data; int nItem; ) MStack(int n) { data = new int[n]; nItem = 0; } void push(int x) { data[nItem] = x; nItem++; } void push(int[] d) { if(d == null) return; for(int i=0;i < d.length;i++) push(d[i]); } int pop() { nItem--; return data[nItem]; } int[] toArray() { if(nItem <= 0) return null; int[] ans = new int[nItem]; for(int i = 0; i < nItem; i++) ans[i] = data[i]; return ans; } } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jimbe

2023/06/06 16:28 編集

SortMain.java の 220 行目というのはどこでしょうか。 それと、コードの {} の付け方やインデントはしっかり合わせるようにしてください。 コーディングに慣れないうちは {} が省略できる場合でも省略しないほうが良いです。 時にはそれだけで問題が浮き彫りになったり直ったりします。 もしご自身の画面ではインデントは正しいのに teratail に貼ると変になるのであれば、インデントがタブとスペースが混在していないか確認してどちらかに統一してください。
退会済みユーザー

退会済みユーザー

2023/06/06 16:25

3つ目のコードの最初の「static void QuicSort(int a[]){」の下の行からです。
jimbe

2023/06/06 16:30

3つ目のコードは、何でしょう。 SortMain.java 内のコードなら、なぜ1つ目に入っていないのでしょうか。
退会済みユーザー

退会済みユーザー

2023/06/06 16:41

SortMainとは別に自分が書いてみたものが3つ目のコードでエラーは3つ目のプログラムを実行したときに起きたエラーです。 元のSortMainがあった方がよいかと思いQuicSortを結合してみる前のSortMainも載せた結果SortMainが2つ載せられている状態になってしまいました。
jimbe

2023/06/06 16:50

まず必要なのはエラーが発生した状態のコードですので、そのコードの方で省略するくらいなら修正は(ひとまずは)必要ありません。 コード的には >static void QuicSort(int a[]){ >int[] sort(int[] d) { というのは java の構造から逸脱しています。 QuicSort クラス(QuickSort?)の宣言文をむりやりメソッド風にしたところで都合よく動作したりはしません。 メソッド内にメソッドがあるような形になっていますので、 java の構造に沿うように修正して頂くしかありません。 どのように修正するのかは、他人には判断出来ません。
jimbe

2023/06/06 16:52

ついでに、コード上にコピペ時に何か書いて仕舞われたのかゴミがあってコンパイルエラーになります。
m.ts10806

2023/06/06 23:20

せめて解決してから退会して欲しい
guest

回答1

0

ソースレベルで纏める前の SortMain.java , QuicSort.java が動作しており、実はソースレベルで無くても「SortMainにQuicSortを結合」していれば良いようでしたら、 SortMain の switch に以下のように QuicSort.sort メソッドを呼ぶ部分を追加するだけで済みます。

java

1 case"mergesort": 2 mergesort(data); 3 break; 4 case"quicsort": //追加 5 data = QuicSort.sort(data); //追加 6 break; //追加 7 default: 8 break;

投稿2023/06/06 17:10

jimbe

総合スコア12625

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問