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

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

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

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

Q&A

解決済

4回答

987閲覧

Javaの計算式について

退会済みユーザー

退会済みユーザー

総合スコア0

Java

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

0グッド

0クリップ

投稿2020/09/25 14:35

編集2020/09/29 01:38

Java

1package test; 2 3import java.util.HashMap; 4import java.util.Map; 5 public class Num { 6 public String Num01(String in){ 7 char[] out = in.toString().toCharArray(); 8 char[] newOut = new char[10]; 9 10 newOut[0] =out[2]; 11 newOut[1] =out[3]; 12 newOut[2] =out[4]; 13 newOut[3] =out[5]; 14 newOut[4] =out[6]; 15 newOut[5] =out[7]; 16 newOut[6] =out[8]; 17 newOut[7] =out[9]; 18 newOut[8] =out[0]; 19 newOut[9] =out[1]; 20 21 22 int total = 0; 23 int value01 = Integer.parseInt(in.substring(i, i + 1)); 24 switch(newOut){ 25 case newOut[0]: 26 case newOut[7]: 27 total += value01 * 2; 28 break; 29 case newOut[2]: 30 case newOut[5]: 31 case newOut[8]: 32 total += value01 * 5; 33 break; 34 case newOut[1]: 35 case newOut[3]: 36 case newOut[4]: 37 total += value01 * 9; 38 break; 39 case newOut[6]: 40 case newOut[5]: 41 case newOut[9]: 42 total += value01 * 7; 43 break; 44 default: 45 break; 46 } 47 48 return new String(newOut); 49} 50}

1234567890の引数をうけ、
1桁目と7桁目の値にはx2をして、2桁目と5桁目と8桁目の値にはx5をして、
1桁目と3桁目と4桁目の値にはx9をして、6桁目と5桁目と9桁目の値にはx7をしたいです。
10桁目以降はなし。
1234567890 →  2076526030としたい。かけた値の1桁目のみ表示させたい。

実行したら、配列型をswitchでデータの受け渡しはできないとエラーがでました。
どのようにしたら、1234567890の桁数に対して計算ができるようになるのか教えていただきたいです。

修正後  +1ができない。。

java

1package test; 2 public class nouNum { 3 public String Num01(String in){ 4 int num = Integer.valueOf(in); 5 int num01=(num+1); 6 String numStr = String.valueOf(num01); 7 for(int i = 0; i < numStr.length(); ++i) { 8 String digit = numStr.substring(i, i+1); 9 System.out.printf("%2d桁目は%dです。\n", i+1, Integer.valueOf(digit)); 10} 11return numStr; 12 13} 14} 15 16public class main { 17 public static void main(String[] args) { 18 nouNum test01 =new nouNum(); 19 System.out.println(test01.Num01("9876543210")); 20 21 } 22 23} 24

実行したらエラーが出てしまいました。
Exception in thread "main" java.lang.NumberFormatException: For input string: "9876543210"
at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.base/java.lang.Integer.parseInt(Integer.java:652)
at java.base/java.lang.Integer.valueOf(Integer.java:983)
at kakeibo.java/test.nouNum.Num01(nouNum.java:5)
at kakeibo.java/kakeibo.java.main.main(main.java:12)

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

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

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

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

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

momon-ga

2020/09/25 15:13 編集

1桁目と、5桁目は、他の条件と重複するのですが、 1桁目は18倍(2×9)、5桁目は35倍(5×7)ということでしょうか。 8桁目の8は5倍すると40なのですが、5にならないですけど・・・条件が違うか。 2076524530っていう結果が違うのか・・・
guest

回答4

0

ベストアンサー

10桁目以降は変更しないのですか?
1桁目は x2 するのか、それとも x9 なのですか?
5桁目は x5 するのか、それとも x7 なのですか?

1桁目は x2、5桁目は x5 とすると、

Java

1class nouNum { 2 public String Num01(String in){ 3 char[] out = in.toCharArray(); 4 int[] mul = { 2, 5, 9, 9, 5, 7, 2, 5, 7 }; 5 int n = Math.min(out.length, 9); 6 for (int i = 0; i < n; i++) 7 out[i] = (char)((out[i] - '0') * mul[i] % 10 + '0'); 8 return new String(out); 9 } 10} 11 12class main { 13 public static void main(String[] args) { 14 nouNum test01 = new nouNum(); 15 System.out.println(test01.Num01("1234567890")); 16 System.out.println(test01.Num01("9876543210")); 17 System.out.println(test01.Num01("753")); 18 System.out.println(test01.Num01("3141592653589793238")); 19 } 20}

実行結果

text

12076524030 28034586070 3457 46569534053589793238

投稿2020/09/26 04:32

kazuma-s

総合スコア8224

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

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

退会済みユーザー

退会済みユーザー

2020/09/26 10:02

実行できました!
kazuma-s

2020/09/26 10:06

質問に答えてください。 また、実行できましただけでなく、理解できたかどうかを書いてください。
退会済みユーザー

退会済みユーザー

2020/09/26 10:09

すいません、今理解しようとデバッグ実行してます。
退会済みユーザー

退会済みユーザー

2020/09/26 10:18

out[i] = (char)((out[i] - '0') * mul[i] % 10 + '0');→ - '0'と+ '0'はどういうことをしているのかわからないのですが、教えていただきたいです。。
kazuma-s

2020/09/26 13:32 編集

out[i] は char で '0'~'9' です。例えば '3' だったとすると、'3' - '0' で 3 になります。 つまり char の '3' を int の 3 に変換したということです。 それに mul[i] を掛けて 10 で割った余りは、int で 1桁の数値 0~9 です。 これに '0' を加えると、char の '0'~'9' の値になります。 ただし、型はまだ int なので、(char) でキャストして char にします。
kazuma-s

2020/09/26 13:38

10桁目以降は変更しないのですか? 1桁目は x2 するのか、それとも x9 なのですか? 5桁目は x5 するのか、それとも x7 なのですか? 元の質問を編集して説明を追加してください。
退会済みユーザー

退会済みユーザー

2020/09/26 13:44

すいません、1桁目は x2 、5桁目は x5 。10桁目以降はなしです。 '3' - '0' で 3 になります。つまり char の '3' を int の 3 に変換したということです。→このコードでint変換が出来ているとは思いませんでした。。
momon-ga

2020/09/26 23:18

横から失礼します。 ryuujinさんは、 「元の質問を編集して説明を追加してください。」というのが、 読めないのですか? それとも意味がわからないのですか?
guest

0

LouiS0616さんが、各桁の取り方を書いているので、

かけた値の1桁目のみ表示させたい。

について、

1桁目の意味が、1234567890の一桁目と、計算結果の一桁目と異なっているので、
意識した方がよいです。

1の位を取得したいなら10で割った余りを求めればよいです。

java

1int num = 4; 2System.out.println((num * 4) % 10); // 6

投稿2020/09/25 15:24

編集2020/09/25 15:28
momon-ga

総合スコア4820

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

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

退会済みユーザー

退会済みユーザー

2020/09/26 00:46

ありがとうございます!
guest

0

10進数の桁ごとに値を取り出したい、というのが本質的な問題だと思いました。
例えば次のような方法があります。

Java

1int num = 1234567890; 2 3String numStr = String.valueOf(num); 4for(int i = 0; i < numStr.length(); ++i) { 5 String digit = numStr.substring(i, i+1); 6 System.out.printf("%2d桁目は%dです。\n", i+1, Integer.valueOf(digit)); 7}

実行結果 Wandbox

1桁目は1です。 2桁目は2です。 3桁目は3です。 4桁目は4です。 5桁目は5です。 6桁目は6です。 7桁目は7です。 8桁目は8です。 9桁目は9です。 10桁目は0です。

追記

だいぶ外している気がしてきたのでもう少し具体的に追記します。
switchは次のように活用できるでしょう。

Java

1for(int i = 0; i < newOutの桁数; ++i) { 2 switch(i+1) { 3 ... 4 } 5}

投稿2020/09/25 14:44

編集2020/09/25 15:00
LouiS0616

総合スコア35660

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

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

LouiS0616

2020/09/25 14:57

良く見たら同じようなコードを既に書いているようですね。 そうなるとswitch文の用途があまり分かっていない感じでしょうか...? 端的に言えばswitchはifの仲間なので、繰り返す効力はありません。
退会済みユーザー

退会済みユーザー

2020/09/26 00:45

ありがとうございます。すいませんが、値に+1ができなく困っておりまして、どのようにしたらいいでしょうか?
LouiS0616

2020/09/26 03:29

Integer.valueOfの代わりにLong.valueOfを使うとどうなりますか? オーバーフローしているように見えます。
退会済みユーザー

退会済みユーザー

2020/09/26 10:00

Long.valueOfだとえらーが出てしまいました。
LouiS0616

2020/09/26 10:32

どのようなエラーですか。
guest

0

発生しているエラーは、int num = Integer.valueOf(in);の部分で起きています。
理由は、”9876543210”をintに変換しようとしていますが、intの最大値である2147483647を超えた値になるからです。num を long に変えて、long num = Long.valueOf(in);とし、numに関連して処理する部分で、これまではintで扱っていた部分もlongで扱うようにしましょう。

投稿2020/09/26 03:34

ironya

総合スコア454

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

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

退会済みユーザー

退会済みユーザー

2020/09/29 01:39

ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問