また恥を忍んで理解の為動かないソースを載せます。
idexの入力値が1だとしてnの入力値が3の話をします
このソースを実行させると以下の例外が出力されます
java.lang.ArrayIndexOutOfBoundsException
この例外の意味は不正なインデックスを使って配列がアクセスされたときに発生する例外と意味です。
ではなんでjava.lang.ArrayIndexOutOfBoundsException出力されるんですか
メソッド部分のint[] tmp=new int[a.length-n];
for(int i=idex+n; i<a.length; i++){
tmp[i]=a[i];
}
return tmp;
}
はtmpは配列aの長さ分-nですから配列2番目まで入ることはわかっています
で次のカウントアップさせる変数int宣言して i=idex+n;を i<a.length; i++をしていますからidexが1でnが3だったら4で4<6になるんじゃないんですか?
import java.util.Scanner;
public class Ensyuu725 {
/**
* @param args
*/
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int []a=new int[]{1,3,4,7,9,11};
for(int i=0; i<a.length; i++){
System.out.println("配列aの要素は"+"a["+i+"]"+a[i]);
}
System.out.print("削除する a[idx]:");
int idex=sc.nextInt();
System.out.print("a[idex]から何個削除しますか?");
int n=sc.nextInt();
int k[]=arrayRmvOfn(a,idex,n);
for(int i=0; i<k.length; i++){
System.out.println("配列aが消された後の要素は"+"k["+i+"]"+k[i]);
}
}
/**
* @param a
* @param idex
* @param n
* @return tmp
*/
private static int[] arrayRmvOfn(int[] a, int idex, int n) {
int[] tmp=new int[a.length-n];
for(int i=idex+n; i<a.length; i++){
tmp[i]=a[i];
}
return tmp;
}
}
ご指導お願いします。
No.3
- 回答日時:
> for(int i=idex+n; i<a.length; i++){
> int[] tmp=new int[a.length-n];
と宣言しているのだから、 tmpで使える添字は
tmp[0] から tmp[a.length-n-1] までですよね?
> for(int i=idex+n; i<a.length; i++){
> tmp[i]=a[i];
ということは、このforループでは
tmp[idex+n] = a[idex+n] ;
tmp[idex+n+1] = a[idex+n+1] ;
...
tmp[a.length-1] = a[a.length-1] ;
を実行しようとする。
nが1以上なら a.length-n-1< a.length-1 であり、 tmp[a.length-1] が不正なのはあきらか。
「プログラムは思った通りに動かない。書いた通りに動く」という格言があります。
「自分はこう思う」と確信していても、動作が思い通りでないなら、まずは、自分が間違っている、と考えることです。
デバッガを使うなり
for(int i=idex+n; i<a.length; i++){
System.out.println("tmp[" + i + "] = a[" + i + "] =" + a[i]);
tmp[i]=a[i];
}
等と途中経過を出力するなりすれば、あなたの思った通りに動いてないことがすぐわかるはずです
「プログラムは思った通りに動かない。書いた通りに動く」
いい言葉です。自分はこうだと思っても動作が違うなら決めつけないようにします
No.2
- 回答日時:
>int[] tmp=new int[a.length-n];
>for(int i=idex+n; i<a.length; i++){
>tmp[i]=a[i];
>}
tmpで扱える添え字の範囲と、iの値をよく考えてみましょう。
No.1
- 回答日時:
こんにちは
private static int[] arrayRmvOfn(int[] a, int idex, int n) {
int[] tmp=new int[a.length-n];
for(int i=idex+n; i<a.length; i++){
tmp[i]=a[i];
↑
ここがヒント
}
return tmp;
}
配列 tmp と a は、同じ添え字でいいんですか?
ダメですね、質問してわかりました
云われてみれば配列tmpの範囲は0から2まで、iは4~5まですね
そりゃ例外されて当たり前な話でしたね、なんでこんなこと気づかなかったんだろ・・・
逆にa[i]を代入する返す配列tmpのiにn個分まで引いたらいけそうです
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- 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言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- Java Java 配列<選挙> 4 2023/07/31 15:07
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
配列にnullを代入すると、null...
-
プログラミングの問題です。大...
-
問題作成のWebアプリの作り方を...
-
eclipseで作ったプログラムを他...
-
eclipse実行ができない
-
Processingでマウスクリックで...
-
JAの支部?地域の農協のカード...
-
正規表現について質問です。 カ...
-
下記問題の答えが"D"になる意味...
-
JaneStyleのスレッドが見れなく...
-
キー入力について
-
jdk17.06のインストーラーが起...
-
JSFタグのfタグとは
-
えハミルトン路と全域木のちが...
-
CSV出力を画面から選択したデー...
-
ショートカットキーについて
-
list の空は [] ってあわらすのに
-
あんまりお料理しないのに台所...
-
質問です。 配列が100以上の場...
-
次のhtml・cssでspan内の文字を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラミングの問題です。大...
-
マイクラでPythonのプログラミ...
-
配列にnullを代入すると、null...
-
jdk17.06のインストーラーが起...
-
Eclipse 動的プロジェクトで404...
-
list の空は [] ってあわらすのに
-
下記問題の答えが"D"になる意味...
-
JaneStyleのスレッドが見れなく...
-
正規表現について質問です。 カ...
-
eclipseで作ったプログラムを他...
-
改行含むテキストの表示の仕方
-
リレーションエンティティクラ...
-
質問です。 配列が100以上の場...
-
次のhtml・cssでspan内の文字を...
-
キー入力について
-
自作Androidアプリのデータ引き...
-
問題作成のWebアプリの作り方を...
-
eclipse実行ができない
-
変数名とDBカラム名の関係性に...
-
デバッグツールの具体例を教え...
おすすめ情報