プロが教える店舗&オフィスのセキュリティ対策術

JAVAを2週間前に始めたばかりの初心者です。課題をいくつか解いてるのですが、いきづまってしまいました。

String型の数をいくつか1つの変数で受け取り、その中から一番大きい数をreturnで返します。
流れとしては、例えば変数streamに"1.0 -2.0 7.5 -3.0 0.5"を受け取った場合、数字一つ一つに分解しstrに格納。
ここで数字はString型なのでdouble型に変えて大小の比較をしようと考えたのですが、

import java.util.Scanner;
public class ControlFun {

 public double maximInScanner(Scanner stream){

stream = new Scanner(System.in);
String index = stream.nextLine();
StringTokenizer str = new StringTokenizer(index, " "); //strに数字を一つ一つに分解し格納

 while(str.hasMoreTokens()) {
double indexDou = Double.parseDouble(str.nextToken()); //indexDouにそれぞれの数字をdouble型に変更して格納
//ここからどうしたらいいかわかりません。比較したい数字(5つ)が全て同じ変数に格納されてるので、それをどうやったら比較して一番大きい数字(この場合7.5)を返せるのでしょうか?
}
}

それとこれのテストメソッドも作りたいのですが、
import static org.junit.Assert.*;
import org.junit.Test;

public class ControlFunTest {
@Test
public void testmaximInScanner(){
ControlFun myFuns = new ControlFun();

Scanner stream = new Scanner("1.0 -2.0 7.5 -3.0 0.5");
assertEquals(7.5, maximInScanner(stream), 1e-12);
}
}

ここでわからないのはmaximInScannerに赤線のエラーがでることです。
maximInScanner(Scanner)が未定義とでるのですが、定義は上でしてると思うのですが・・・。
わたしのやり方は間違ってますでしょうか?どう組めばプログラムは動きますか?宜しくお願いします。

A 回答 (2件)

こんな具合



public static void main(String args[]){
String index = "1.0 -2.0 7.5 -3.0 0.5";
StringTokenizer str = new StringTokenizer(index, " ");

double resultDbl = Double.parseDouble(str.nextToken());
while(str.hasMoreTokens()) {
double compareDbl = Double.parseDouble(str.nextToken());
if (resultDbl < compareDbl ){
resultDbl = compareDbl;
}
}
System.out.println(resultDbl);
}

>ここでわからないのはmaximInScannerに赤線のエラーがでることです。
>maximInScanner(Scanner)が未定義とでるのですが、定義は上でしてると思うのですが・・・。
>わたしのやり方は間違ってますでしょうか?どう組めばプログラムは動きますか?宜しくお願いします。

どうみてもそんなメソッドないです。

public void testmaximInScanner(){ ←これのこと?

引数よく見てください。

この回答への補足

あーなるほど。double resultDbl = Double.parseDouble(str.nextToken());と このように比較する対象を作るということですか。

ありがとうございます!

補足日時:2009/02/02 15:21
    • good
    • 0

上: 普通は「既にみた要素の中での最大値」を覚えておく変数を作ります. 今は文字列から値を取り出していますが, ここまでしないで「double の配列の中から最大値を見つける」ことはできますか?


下: 定義しているのは testmaximInScanner では?

この回答への補足

早速の回答ありがとうございます。
下は解決しました。

assertEquals(7.5, myFuns.maximInScanner(stream), 1e-12);

とするべきでしたね。

本体のプログラムですが、つまり
stream = new Scanner(System.in);
double index = stream.nextLine();
こう変えるということでしょうか?Stringにした理由は、"1.0 -2.0 7.5 -3.0 0.5"これらの数字を1つ1つに分解しないと比較できないのでString型でないと分解できないのでは、なんて思ったからです
問題にはString型のフロートの数字をScannerで受け取るみたいなことが書いてあるので・・・

変数がいくつかあってそれぞれの変数の大小を比較するなら簡単なんですが、この場合変数が一つしかなく比較したい数字がすべてその変数に入っているので、どのように比較していいのかがわかりません

補足日時:2009/02/02 15:00
    • good
    • 0

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