アプリ版:「スタンプのみでお礼する」機能のリリースについて

javaの配列でn番目に大きな数を表示したいです。
nは任意の値です。

import java.util.Scanner;
public class test {
public static void main(String[] args) {
int a[] = {14,21,1,3,2,5,7,6,13,20} ;
int num1 = 0;
System.out.println("表示したい値は何番目?") ;
Scanner scan = new Scanner(System.in) ;
String x = scan.next() ;
num1 = Integer.parseInt(x) ;
for(int i=0; i<9; i++) {
if(a[i] < a[i+1]) {
int work;
work = a[i];
a[i] = a[i+1];
a[i+1] = work;
}
}
if(num1<1 && num1>10){
System.out.println("1から10の値で入力してください") ;
}else {
System.out.println(x+"番目に大きな数は「"+a[num1]+"」です。") ;
}
}
}

※インデックスがうまく表示されていなかったらすみません
こちらのコードだと、
・配列内の並び替え(降順)
・System.out.println("1から10の値で入力してください") ;
上記二つがうまくいっていないようで、
どのように修正したらよいかご教示いただきたいです。

何卒よろしくお願いいたします。

A 回答 (5件)

import java.util.Scanner;


import java.util.Arrays;
import java.util.Collections;

public class test {
 public static void main(String[] args) {
  Integer[] a = {13, 21, 1, 3, 2, 5, 7, 6, 13, 20};
  System.out.println("表示したい値は何番目?");
  Scanner scan = new Scanner(System.in);
  int x = Integer.parseInt(scan.next());
  Arrays.sort(a, Collections.reverseOrder());
  System.out.println(x + "番目に大きな数は 「" + a[x - 1] + "」です。");
 }
}
    • good
    • 1

>for(int i=0; i<9; i++) {


>if(a[i] < a[i+1]) {
>int work;
>work = a[i];
>a[i] = a[i+1];
>a[i+1] = work;
>}
>}

バブルソートのつもりなんだろうか?
教科書を確認しよう。バブルソートのループは二重だよ。

それと、アルゴリズムの演習なら敢えてバブルソ―卜でも良いけど
もっと速いアルゴリズムが沢山有るので実用では全く使われない
ことは知っておいた方がいい。
    • good
    • 1

その「うまくいっていない」というのは, 具体的には


・どうなると思ったところ
・実際にはどうなった
のかな?
    • good
    • 1

あと、そもそもソートで



> System.out.println("1から10の値で入力してください") ;

何でそんなのが必要なんだろ?
1から10の値を入力させよう、ってのは何のため?
もし、長さに制限付けたいのなら、配列の長さを取得して、それ以上や以下だった場合弾けばいいだけ、だし。
そういう「目的」は仕様としてキチンと書かないとダメですよ。
    • good
    • 1

そんなめんどくさいfor文で回さなくてもソートして


array[n-1]を出力すれば良いだけじゃないの?

Javaはよく知らないけどsort関数くらいありますよね
sort関数を自作したいといのなら話は別ですけど
Cで良ければ自作のsort教えますよ
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!