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

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

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

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

Q&A

6回答

2636閲覧

変数が見つけられないと出てしまいます。

OMDM

総合スコア6

Java

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

0グッド

0クリップ

投稿2015/01/24 18:58

編集2015/06/05 08:50

以下のプログラムでコンパイルした時、 }while(r2 == 0); の 変数r2が見つけられないと出てしまいます。恐らく何か初歩的な所でミスを犯していると思うのですが、どなたかミスと対処法を指摘してくれませんか?

import java.io.*;
class 最大公約数計算機
{
public static void main(String[] args) throws IOException
{
System.out.println("整数を2つ入力してください");

BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String ran = br.readLine(); int r0 = Integer.parseInt(ran); String che = br.readLine(); int r1 = Integer.parseInt(che); do{ int k0 = r0/r1; int r2 = r0%r1; if(r2 != 0) r0 = r1; r1 = r2; }while(r2 == 0); System.out.println("最大公約数は" + r1 + "です"); }

}

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

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

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

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

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

guest

回答6

0

最大公約数計算自体は以下でできます

java

1import java.io.*; 2class AG2 3{ 4 public static void main(String[] args) throws IOException 5 { 6 System.out.println("整数を2つ入力してください"); 7 8 BufferedReader br = 9 new BufferedReader(new InputStreamReader(System.in)); 10 11 String ran = br.readLine(); 12 int r0 = Integer.parseInt(ran); 13 14 String che = br.readLine(); 15 int r1 = Integer.parseInt(che); 16 17int m=Math.min(r0,r1); 18 19int c=0; 20int res=0; 21while(c<m){ 22c++; 23if(r0%c==0 && r1%c==0)res=c; 24 } 25 26 System.out.println("最大公約数は" + res + "です"); 27 28 29} 30}

投稿2017/03/10 12:06

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

答えは出てますが、変数スコープですね。

do{
int k0 = r0/r1;
int r2 = r0%r1;

if(r2 != 0) r0 = r1; r1 = r2; }while(r2 == 0);

ようやくすると "{"から"}"で1つのブロック文となりますので
do{文}
while(式);
2行の文で構成されています。

do{ int r2 } ← このブロックに定義された変数なので、doの中でしか使えない変数
while( r2 ) ← この中では r2 て変数が見つからない

public static void main(String[] args) throws IOException
{
int r2;
do{文}
while(r2);
}

このようにするとスコープが変わります。
main関数終了までになります。

投稿2015/06/06 13:56

MasaakiIrie

総合スコア1021

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

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

0

仮にこのコードが正しくコンパイルされたとしても,r0%r1が0でないなら1回割り算しただけで終わるし,
0なら同じ計算を永遠に繰り返す無限ループになり,最大公約数を求めることはできません.
k0も使っていない変数です.
ユークリッドの互除法を正しく行うのなら,おそらくこのようなコードになるでしょう.

lang

1 while(r1 != 0){ 2 int r2 = r0 % r1; 3 r0 = r1; 4 r1 = r2; 5 } 6 System.out.println("最大公約数は" + r0 + "です");

投稿2015/06/06 02:30

swordone

総合スコア20651

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

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

0

開発用のツール (IDE) を使うと、エラーと対処法案がわかります。(ここでは netbeans を使ってみました)
![![イメージ説明]WIDTH:600説明]WIDTH:600説明]WIDTH:600]WIDTH:600
![イメージ説明]WIDTH:600
エラーを解消させてみましたが、それだけでは実行しても正しい値が得られませんでした。
さらに変更して、正しい値が得られるようにしてみました。
![イメージ説明]WIDTH:600

![イメージ説明]WIDTH:600

投稿2015/06/06 01:24

katoy

総合スコア22324

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

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

0

r2のスコープはdo~while文の{}中カッコ内だけなので、whileの判定の時にはr2は既に存在していません。そのために変数が見つけられない、となってしまいます。

lang

1do{ 2 int k0 = r0/r1; 3 int r2 = r0%r1; // ここで宣言したr2は、do ~ while の{}中カッコ内でしかアクセスできません 4 5 if(r2 != 0) 6 r0 = r1; 7 r1 = r2; 8} 9while(r2 == 0);

こういうコードでr2にアクセスする時には、以下のようにしましょう。

lang

1int r2; // 宣言をループの外に出します。 2do{ 3 int k0 = r0/r1; 4 r2 = r0%r1; // 宣言を移したので記述の訂正を忘れずに。 5 6 if(r2 != 0) 7 r0 = r1; 8 r1 = r2; 9} 10while(r2 == 0);

投稿2015/06/05 11:38

haru666

総合スコア1591

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

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

0

質問内容が見つけられませんw

たぶん定義されてないだけだと思うんで、該当エラーで言われてる変数が事前に定義されているかを確認してみてください。
あと、後々内容を追記なさる様であれば、エラー内容を一緒に載せるといいですよ。

投稿2015/01/24 20:08

utun

総合スコア384

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問