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

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

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

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

Q&A

解決済

2回答

886閲覧

思ったようにプログラムが動いてくれますが、かならず固まります。プログラムに問題があるのでしょうか?

talabagani

総合スコア50

Java

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

0グッド

0クリップ

投稿2021/06/27 22:09

#[環境]
Java version 16.0.1
VS Code
Mac OS Big Surの環境です。
java -version
java version "16.0.1" 2021-04-20
Java(TM) SE Runtime Environment (build 16.0.1+9-24)
Java HotSpot(TM) 64-Bit Server VM (build 16.0.1+9-24, mixed mode, sharing)
MacBook:09_MinutesToYearsandDayCalculator $
#[エラー]
エラーメッセージは出てきていません。
[学習状況]
progateを3巡、ドットインストール1巡、スッキリJavaの本を8割読みました。現在、UdemyのJava Programming Masterclass for Software Developersというコースで演習問題に取り組んでいます
この問題はUdemyでの演習22番目なので、まったくの初めてというわけではありません。
まだまだ初心者ですが真面目に取り組んでいるので、何卒、よろしくお願いします。

#[演習問題の内容]
数字を文字にするプログラムを書く演習をやりました。
(607)→(Six Zero Seven)

そのためにメソッドを3つ用意しています。
##numberToWords
数字を文字にしています。他の2つのメソッドを組み合わせて使います。

##getDigitCount
100を逆にすると001→1になってしまうので、桁数を確認しています。

##reverse
数字を逆にします。
(123)→(321)

#[わからない事]
プログラムは思ったように動いてくれすのですが、その後必ず固まります。
再起動を2回しましたが、同じでした。
プログラムになにか問題があるのでしょうか?

#[やってみたこと]
3つあるメソッドをそれぞれ別のファイルに書いてテストしました。
それぞれ、問題なく動きました。

#[自分コード]

java

1public class NumberToWords{ 2 public static void NumberToWords(int number){ 3 if(number<0){ 4 System.out.println("Invalid Value"); 5 } 6 int r_number=reverse(number); 7 int a =getDigitCount(number)-getDigitCount(r_number); 8 9 for(int i=0; i<a ; i++){ 10 System.out.println("Zero"); 11 } 12 13 14 int digit; 15 int stored = r_number; 16 while(true){ 17 if(stored>0){ 18 digit = stored % 10 ; 19 stored = stored / 10; 20 switch(digit){ 21 case 0: 22 System.out.println("Zero"); 23 break; 24 case 1: 25 System.out.println("One"); 26 break; 27 case 2: 28 System.out.println("Two"); 29 break; 30 case 3: 31 System.out.println("Three"); 32 break; 33 case 4: 34 System.out.println("Four"); 35 break; 36 case 5: 37 System.out.println("Five"); 38 break; 39 case 6: 40 System.out.println("Six"); 41 break; 42 case 7: 43 System.out.println("Seven"); 44 break; 45 case 8: 46 System.out.println("Eight"); 47 break; 48 case 9: 49 System.out.println("Nine"); 50 break; 51 } 52 } 53 } 54 } 55 56 57 public static int reverse(int n3){ 58 int reverse_n = 0; 59 int digit = 0; 60 while(n3 != 0){ 61 digit = n3 % 10; 62 reverse_n = (reverse_n * 10) + digit; 63 n3 /= 10; 64 } 65 return reverse_n; 66 } 67 public static int getDigitCount(int n4){ 68 int count=0; 69 while(n4 != 0){ 70 count++; 71 n4 /= 10; 72 } 73 return count; 74 } 75 76} 77 78 79

java

1public class Main { 2 public static void main(String[] args) { 3 4 NumberToWords.NumberToWords(607); 5 6 } 7 8}

イメージ説明
#[メソッドごとに分解してテストしたコード]

java

1public class NumberToWords_test{ 2 public static void NumberToWords(int n2){ 3 if(n2<0){ 4 System.out.println("Invalid Value"); 5 } 6 int digit; 7 int stored = n2; 8 while(true){ 9 if(stored>0){ 10 digit = stored % 10 ; 11 stored = stored / 10; 12 switch(digit){ 13 case 0: 14 System.out.println("Zero"); 15 break; 16 case 1: 17 System.out.println("One"); 18 break; 19 case 2: 20 System.out.println("Two"); 21 break; 22 case 3: 23 System.out.println("Three"); 24 break; 25 case 4: 26 System.out.println("Four"); 27 break; 28 case 5: 29 System.out.println("Five"); 30 break; 31 case 6: 32 System.out.println("Six"); 33 break; 34 case 7: 35 System.out.println("Seven"); 36 break; 37 case 8: 38 System.out.println("Eight"); 39 break; 40 case 9: 41 System.out.println("Nine"); 42 break; 43 } 44 } 45 } 46 } 47}

java

1public class NumberToWords_test2{ 2 3 public static void reverse(int n3){ 4 int reverse_n = 0; 5 int digit = 0; 6 while(n3 != 0){ 7 digit = n3 % 10; 8 reverse_n = (reverse_n * 10) + digit; 9 n3 /= 10; 10 } 11 System.out.println(reverse_n); 12 } 13 14} 15

java

1public class NumberToWords_test3{ 2 3 4 public static int getDigitCount(int n4){ 5 int count=0; 6 while(n4 != 0){ 7 count++; 8 n4 /= 10; 9 } 10 return count; 11 } 12}

#ネットにあった模範回答

java

1public static void numberToWords(int number) { 2 3 if (number < 0) { 4 System.out.println("Invalid Value"); 5 } 6 7 int reverseNumber = reverse(number); 8 for (int i = 0; i < getDigitCount(number); i++) { 9 10 switch (reverseNumber % 10) { 11 case 0: 12 System.out.print("Zero "); 13 break; 14 case 1: 15 System.out.print("One "); 16 break; 17 case 2: 18 System.out.print("Two "); 19 break; 20 case 3: 21 System.out.print("Three "); 22 break; 23 case 4: 24 System.out.print("Four "); 25 break; 26 case 5: 27 System.out.print("Five "); 28 break; 29 case 6: 30 System.out.print("Six "); 31 break; 32 case 7: 33 System.out.print("Seven "); 34 break; 35 case 8: 36 System.out.print("Eight "); 37 break; 38 case 9: 39 System.out.print("Nine "); 40 break; 41 default: 42 break; 43 } 44 reverseNumber /= 10; 45 } 46 47 System.out.println(); 48} 49 50public static int reverse(int number) { 51 52 int reverseNumber = 0; 53 54 while (number != 0) { 55 reverseNumber = (reverseNumber * 10) + (number % 10); 56 number /= 10; 57 } 58 return reverseNumber; 59} 60 61public static int getDigitCount(int number) { 62 63 if (number < 0) { 64 return -1; 65 } 66 67 int counter = 1; 68 while (number > 9) { 69 number /= 10; 70 counter++; 71 } 72 return counter; 73}

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

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

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

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

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

hentaiman

2021/06/27 23:15

処理がひとつひとつ出来ているか目視できるようにする為にSystem.out.printlnを至る所に書いてみてはどうでしょうか?
K_3578

2021/06/27 23:59

デバッグのやり方に慣れてないならhentaimanさんの方法で段階毎に出力するのもいいですね。
guest

回答2

0

ベストアンサー

NumberToWordsってメソッドのwhileループの終了条件がないだけに見える。
理解してやってるならともかく、無闇にwhile(true)みたいな無限ループをさせるのはやめた方が良い

投稿2021/06/27 22:22

編集2021/06/27 23:22
gentaro

総合スコア8947

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

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

talabagani

2021/06/28 03:30

なるほど、、、 ありがとうございます。
guest

0

ブレークポイント設定してそこで実行止めて、変数のナカミをチェックします。
そして、ワンステップづつ実行させて、コードの流れがどうなってるのかを見ていこう。

投稿2021/06/27 22:13

y_waiwai

総合スコア88051

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

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

m.ts10806

2021/06/27 22:50

デバッグが適切じゃないだけにも見えるので+
talabagani

2021/06/28 08:35

最近、VScodeのでバグ機能を覚えたので使ってみようと思います。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問