AIと戦って、あなたの人生のリスク診断 >>

「5」と入力すると、「1*2*3*4*5=120」(階乗)と表示されるプログラムを組みたいのですが、
例で言うと120という計算結果は出せるのですが式の部分が出せません。
forまたはwhileによって作るんですが誰か式をうまく出すプログラムが分かる人いらっしゃいませんか?

A 回答 (3件)

import java.io.*;



public class kaijyou {
public static void main(String[] args){
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

System.out.print("数字を入力=> ");
int x = Integer.parseInt(in.readLine());
int y=1;

System.out.print("結果は ");
for(int i=1;i<x;i++){

System.out.print(i+"*");
y=i*y;

}
System.out.print(x+"=" +y*x );
}
}
    • good
    • 7
この回答へのお礼

今やってるタイプとおなじ形です!
ありがとうございました。

お礼日時:2007/06/20 15:40

セルA1に計算対象値を入力し、セルB1に計算結果を表示するものとすると、


 エクセルの関数式の場合
  セルB1に[=IF(A1>0,FACT(A1),"")]と記述する。
 エクセルのマクロの場合
  Dim A,B,C
A=RANGE("A1").VALUE
IF A>0 THEN
B=1
FOR C=1 TO A
B=B*C
NEXT C
END IF
RANGE("B1")=B
これでいかがでしょうか
    • good
    • 0

これでどうですか?


public StringBuffer func(int a){
if(a > 0){
StringBuffer f = new StringBuffer("1");
long ans = 1;
int tmp = 1;
while(++tmp <= a){
f.append("*").append(tmp);
ans *= tmp;
}
f.append("=").append(ans);
return f;
}
return null;
}
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qequalsの逆

javaで、文字列の場合は比較演算子の「==」は用いずに

if ((str1.getText()).equals(str2)){
(※…str1,2は文字列)

と書きますよね?
この逆で、文字列str1とstr2は等しくないとき、にはif以下の条件文をどのように書けばよいでしょうか?

Aベストアンサー

>if !((str1.getText()).equals(str2)){

あくまで
if(){
}


!(str1.getText()).equals(str2)
が入っているので
if !((str1.getText()).equals(str2)){
じゃなくて
if (!(str1.getText()).equals(str2)){
こう。

QIOException ってどういうときに起こるのでしょうか?

IOException ってどういうときに起こるのでしょうか?

http://www.atmarkit.co.jp/fjava/rensai2/javaent12/javaent12.html
を見て勉強しています。

  catch ( IOException e) {
    System.out.println( "キーボードが故障しているのかもしれません" );
  }

と書いてあります。
ハード(キーボード)が故障しているのを Java のプログラムのレベル(ソフトウェア)で感知できるというのがよくわかりません。「

NumberFormatException の方はわかるのですが・・・

Aベストアンサー

現実的には、キーボードからの入力でIOExceptionが発生することは、
ほとんどあり得ないと思います。
そもそも、キーボードが故障していたとしても、
IOExceptionは投げられないでしょう。
「キーボードが故障しているのかもしれません」というのは、
その記事の著者が冗談で書いたのだと思います。

ではなぜ、try-catchを書かなくてはいけないのか?
InputStreamやBufferedReaderは、
データ入力を抽象化したものだからです。
実際の入力元はキーボードだったり、ファイルだったり、
ネットワーク接続だったりするわけですけど、
InputStreamは、その入力元の情報を持っていないので、
データを読み取る際は常に
IOExceptionをキャッチするコードを書かなくてはいけません。
たとえ、絶対にIOエラーが発生しないストリームだとしても。

さらに付け加えるなら、
そもそも「標準入力=キーボード」であるとは限りません。
(一般的にはキーボードであることが多いですが。)
Javaでは、
System.setIn(InputStream)
を呼び出して、標準入力を変えてしまうことができますし、
標準入力を指定してプログラムを実行することができるOSもあります。

追伸1:
例外をキャッチしたときは、
スタックトレースをプリントすることをおすすめします。
catch (IOException e) {
e.printStackTrace();
}

追伸2:
そのプログラムでIOExceptionを発生させる最も簡単な方法は、
readLine()を呼び出す前に
標準入力(System.in)を閉じてしまうことです。
System.in.close();

現実的には、キーボードからの入力でIOExceptionが発生することは、
ほとんどあり得ないと思います。
そもそも、キーボードが故障していたとしても、
IOExceptionは投げられないでしょう。
「キーボードが故障しているのかもしれません」というのは、
その記事の著者が冗談で書いたのだと思います。

ではなぜ、try-catchを書かなくてはいけないのか?
InputStreamやBufferedReaderは、
データ入力を抽象化したものだからです。
実際の入力元はキーボードだったり、ファイルだったり、
ネットワーク接...続きを読む

Qシンボルが見つかりませんというエラーが理解できません。

以下のようなじゃんけんゲームのプログラムを書いたのですが、「シンボルが見つかりません。」というエラーが表示されるのですが、エラーの意味が理解できず、解決できません。どこが間違っているのか教えていただけませんか。

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.io.File;

public class janken extends Applet
implements Runnable, ActionListener {
private static final int EXTERNAL_BUFFER_SIZE = 128000;

Image image[] = new Image[3];
Thread t;
int index1 = 0;
int index2 = 0;
String msg = "";
String msg1 = "";

boolean state = false;
Button b1 = new Button("ぐー");
Button b2 = new Button("ちょき");
Button b3 = new Button("ぱー");

public void init(){
for(int i = 0; i<=2; i++){
img[i] = getImage(getDocumentBase(),"hanabi" + (i+1) + ".JPG");
}
add(b1);
add(b2);
add(b3);
b1.addActionListener(this);
b2.addActionListener(this);
b3.addActionListener(this);
msg1 = "結果は・・";

}

public void paint(Graphics g){
g.drawImage(img[index1],350,30,this);
g.drawImage(img[index2],695,30,this);
g.drawString("コンピューター",420,300);
g.drawString("あなた",800,300);
g.drawString(msg,630,320);
g.drawString(msg1,550,320);
}

public void start(){
state = true;
t = new Thread(this);
t.start();

}

public void run(){
while(state){
index1++;
if(index1 == 3){
index1 = 0;
}
index2++;
if(index2 == 3){
index2 = 0;
}
repaint();
try {
Thread.sleep(60);
}catch(InterruptedException e) { }
}
}

public void actionPerformed(ActionEvent e){
if(state == false) {
start();
return;

}
state = false;
if(e.getSource() == b1) {
msg = "ぐー";
index2 = 0;
}

else if(e.getSource() == b2){
msg = "ちょき";
index2 = 1;
}

else if(e.getSource() == b3){
msg = "ぱー";
index2 = 2;
}
check();
repaint();
}

public void check() {
if(index1 == index2) msg ="あいこ";


else if (index1 == 0) {
if(index2 == 2) msg="あなたの勝ち";
else msg ="あなたの負け";
}

else if(index1 == 1) {
if(index2 == 0) msg="あなたの勝ち";
else msg="あなたの負け";
}

else if(index1 == 2) {
if(index2 == 1) msg="あなたの勝ち";
else msg="あなたの負け";
}

}
}

以下のようなじゃんけんゲームのプログラムを書いたのですが、「シンボルが見つかりません。」というエラーが表示されるのですが、エラーの意味が理解できず、解決できません。どこが間違っているのか教えていただけませんか。

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.io.File;

public class janken extends Applet
implements Runnable, ActionListener {
private static final int EXTERNAL_BUFFER_SIZE = 128000;

Image image[] = new Imag...続きを読む

Aベストアンサー

「シンボルを見つけられません。」というエラーの下に何か表示がありませんでしたか?そこにヒントがあると考えられます。
シンボルを見つけられませんといエラーが表示される主な理由は4つあります。
(1)クラス、メソッド、変数などの綴りミスや定義していない変数を使用している可能性がある。
(2)コンストラクタを呼び出すときに、newを忘れている可能性がある。(3)公開されていないメンバーを呼び出している可能性がある。
(4)必要なimport文を記述し忘れている可能性がある。
ここでのあなたのエラーは(1)番ではないでしょうか?上記ではimageとなっている変数がimgになっていますね。
これはエラー表示をよく見ることで意外と簡単に解決できるのです。
ゆっくり丁寧にエラー表示を見るように心がけることが大事ですよ。

Q一定のスペースを空けて端を揃えて表示

一定のスペースを空けて端を揃えて表示

お世話になります。
一定のスペースを空けて文字を表示したとき、縦に綺麗に揃えて表示したいのですがやり方がわかりません。
例えば、

apple ここに15個分のスペース (2,8) (3,6)
orange ここに15個分のスペース (3,7) (9,8) (2,10)
dog ここに15個分のスペース (3,0)
fortunately ここに15個分のスペース (6,6)

このように、各行の左側には英単語1つ、そして15個分のスペースを空けて、右側にその単語の座標を表示します。
この時に、座標を縦にきれいに揃えて表示したいのですが、英単語の長さによってバラバラになってしまいます。
どのようにスペースをあけて表示すればよいのでしょうか?宜しくお願いします。

Aベストアンサー

5分遅れで同じ回答をしてしまった(^^;
ついでなので、もう少し文字種の範囲を広げても大丈夫なものを作成してみた。

public static void main(String[] args) {
String[] word = {"りんご", "おranじ", "犬", "fortunately"};
String[] coord = {"(2,8) (3,6)", "(3,7) (9,8) (2,10)", "(3,0)", "(6,6)"};
java.nio.charset.Charset charset = java.nio.charset.Charset.forName("Shift_JIS");
int width = word[0].getBytes(charset).length + 15;
for (int i = 0; i < word.length; i++) {
String format = "%-" + (width - word[i].getBytes(charset).length + word[i].length()) + "s%s%n";
System.out.printf(format, word[i], coord[i]);
}
}

前提として、
与えられた文字がシフトJISで表せるようなもので、
シフトJISで1バイトコードになるものがいわゆる半角(1桁幅)、
2バイトコードになるものがいわゆる全角(2桁幅)となるのなら、
上のようにすることで対処できる。

要点は文字数でなく文字を構成するコードが何バイトかを数えて、
2バイトなら2桁分のスペースを用意する。
これには、getBytesでStringからバイト配列を得てlengthでバイト数を得る。

今度は書式文字列は各行ごとに変わる可能性がある。
widthはword[0]の文字列幅に15スペース分を加えたもの。
"apple"でなく"りんご"なので21になる。
つまり座標の表示は22桁目からということになる。

各行の書式文字列での、
(width - word[i].getBytes(charset).length + word[i].length())
で、バイト数と文字数との差を求めて表示幅から引くことで、
1文字が2桁になる場合に対処している。

書式は使いどころによって便利なもので、
printfで書式出力するところを、
StringクラスのformatメソッドでStringインスタンスにすることもできたりする。

5分遅れで同じ回答をしてしまった(^^;
ついでなので、もう少し文字種の範囲を広げても大丈夫なものを作成してみた。

public static void main(String[] args) {
String[] word = {"りんご", "おranじ", "犬", "fortunately"};
String[] coord = {"(2,8) (3,6)", "(3,7) (9,8) (2,10)", "(3,0)", "(6,6)"};
java.nio.charset.Charset charset = java.nio.charset.Charset.forName("Shift_JIS");
int width = word[0].getBytes(charset).length + 15;
for (int i = 0; i < word.length; i++) {
String format = "%-...続きを読む

QJava-jspの画面入力値保持について

画面にテキスト、ラジオボタン、リストボックス とボタンがあります。
ボタンを押すと、JAVAで処理を行い、jspのviewで表示します。

1.テキスト、ラジオボタン、リストボックスなどに値が入力、設定されている状態で
ボタンを押して処理後にテキスト、ラジオボタン、リストボックスの値が
変わらないようにしたいのですが、
その場合、たとえば、入力、設定値をセッションになどに格納しておき
jspの所で、セッションから値を設定すると言うような方法になるのでしょうか?

2.ボタン押して処理後、ラジオボタン、リストボックスの選択値も
  変えないようにしたいのですが、
  これはどのように実現するのが、適切なのでしょうか?


以上、よろしくお願いします。

Aベストアンサー

ボタンというのはフォームのサブミットボタンのことですよ?
つまり、画面遷移が起きることを前提とすると(元の同じ画面に戻るのも含みます)

テキスト、ラジオボタン、リストボックスの状態を「要求パラメータ」として
送信し、それを次画面に反映するというのが最も一般的な方法です。

フレームワーク struts のアクションフォーム&JSPカスタムタグを使うと比較的楽に
そういう画面が作れますが、多くのフレームワークでも大差ありません。
簡単な画面なら素のサーブレート+JSPでも十分作れます。

セッションでもできますが、 セッションはログイン情報などの保持など、
限定された範囲で使うのが普通です。また、結局セッションに最新の
テキスト、ラジオボタン、リストボックスの状態を送るには、「要求パラメータ」
を送信する必要があります。

AJAXを使うという方法もあります。この場合、ボタンは AJAX 処理だけを行い
画面遷移を起こさないので、サーバ側で画面のテキスト、ラジオボタン、
リストボックスの状態をもつ必要はありません。

QJavaで改行などが出来ないのです。

 Java の事で質問です。 
 

 System.out.println("このようにしても\n");

 改行できません。
 
 このようにしても\n   

 と表示されてしまいます。どうしてでしょう。ちなみにOSはMacOS9.1です。なにか関係があるのでしょうか?

Aベストアンサー

> class amigo{
> public static void main(String args[]) {
> System.out.print("aaaaaaaa");
> System.getProperty("line.separator");
> System.out.print("bbbbbbbb");
> }
> }
> のような使い方でしょうか?

String line_sep = System.getProperty("line.separator");
System.out.println("あいうえお" + line_sep + "かきくけこ");

こうです。

Qべき乗

javaの演算子でべき乗は用意されていないと聞いたのですが、どうやってやればいいんでしょう?
どなたか教えてください。

Aベストアンサー

Math.pow(x,y)を使います。
例えば
Math.pow(3, 2)とすれば3の2乗が得られますよ。
http://www.sigmath.es.osaka-u.ac.jp/n-funao/java2.html
ここに簡単な説明があるのでご覧になっては?

Q「httpステータス404」というエラーが出ます。

「httpステータス404」というエラーが出ます。

java初心者です、宜しくお願い致します。
EclipseでServletを書いてやりましたが、以下のようなエラーが出ます、
原因はなんでしょうか、宜しくお願い致します。
「httpステータス404-/Servlet%E7%B7%B4%E7%BF%92/ ServOutput」

Aベストアンサー

Not Found
という意味です。
そのファイルが無い。あるいはリンクが間違っています。
詳しくは参考URLをみてください。

参考URL:http://ja.wikipedia.org/wiki/HTTP_404

Q要素数が10の配列で、乱数0~9の値が重複しないようにする方法がわからなくて困っています。

JAVAの練習問題でわからなくて困っています

以下は線形探索のプログラムで、このプログラムを改良して、
要素数が10の配列で、乱数0~9の値が重複しないようにする方法がわからなくて困っています。

以下のような簡単なプログラムでできる方法で行いたいです。
どなたか答えまたはヒントを下さい、お願いします。
------------------------------------------------------------
import java.util.Random;
import java.util.Scanner;

public static void main (String[] args) {
Random rand = new Random();
Scanner stdIn = new Scanner(System.in);

final int n = 10; //要素数
int[] a = new int[n]; //配列を宣言

for (int j = 0; j < n;)
a[j] = rand.nextInt(10);

System.out.print("配列aの全要素の値\n{ ");
for (int j = 0; j < n; j++)
System.out.print(a[j] + " ");
System.out.println("}");

System.out.print("探す数値 : ");
int key = stdIn.nextInt();

int i;
for (i = 0; i < n; i++)
if (a[i] == key)
break;

if (i < n) //探索成功
System.out.println("それはa[" + i + "]にあります。");
else //探索失敗
System.out.println("それはありません。");
}
}

JAVAの練習問題でわからなくて困っています

以下は線形探索のプログラムで、このプログラムを改良して、
要素数が10の配列で、乱数0~9の値が重複しないようにする方法がわからなくて困っています。

以下のような簡単なプログラムでできる方法で行いたいです。
どなたか答えまたはヒントを下さい、お願いします。
------------------------------------------------------------
import java.util.Random;
import java.util.Scanner;

public static void main (String[] args) {
Random rand = new...続きを読む

Aベストアンサー

えぇと, 「0~9 の値が重複しないようにする」ということ? だとしたら, 最初に 0~9 の値を入れておいて, ランダムに交換するというのが簡単ですね.
for (i=0; i < 10; ++i) a[i] = i;
for (i = 10; i > 1; --i) {
int r = rand.nextInt(i);
int t = a[r];
a[r] = a[i];
a[i] = t;
}
という感じ, かな?

Q整数の桁数が取得できません

Javaで整数の桁数を取得するには、以下の方法しかないのでしょうか?

int num = 123;
// の桁数3を取得するには
int keta = Integer.toString(num).length;

Aベストアンサー

No.1の方の回答で取得できます。
ただlogを使うと重くなる(処理が遅くなる)との声もあるようです。(参考URL参照)
ちなみにこんな方法でも取得できます。

while(0<num){
num /= 10;
keta++;
}

ただこの方法ですとループが終わった(桁数が取得できた)後、
numの値が0になっていますので、numの値は必ず別の変数に
保持しておいてください。

ちなみに私はいつもmatchoriさんの方法で桁数取得しています。
それでは!

参考URL:http://www.vc-net.ne.jp/~ytp/bbs/java/bbs6333.html


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング