■掲示板に戻る■ 全部 1- 101- 201- 301- 401- 501- 601- 701- 801- 901- 最新50

レス数が 900 を超えています。1000を超えると表示できなくなるよ。

【サービス】奴隷ども【低賃金】

1 :ねこ : 2008/09/02 18:09
>>1のために働け!



859 :アヌス : 2009/01/20 18:34
とりあえず1を一つにすると

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class diagramCalc {
public static void main(String[] args) {

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = br.readLine();
System.out.println(s);

String hour = s.substring(0, 2);
String minute = s.substring(2, 4);
System.out.println(hour + minute);

int hour = Integer.parseInt(hourStr);
int minute = Integer.parseInt(minuteStr);

int sum = hour * 6 + minute;
System.out.println(sum);
}
}

こうなるのかな・・・

んで2を続けて書くと・・・

あれ、ちょっとまてよ。
String hourStr = "07"; // この2つの変数を文字列型(String型)から整数型に(int型)に,型変換するよ
String minuteStr = "30"; // 整数型に型変換しないと,文字列型のままじゃ計算できないんだ

// String型からint型へ型変換
int hour = Integer.parseInt(hourStr);
int minute = Integer.parseInt(minuteStr);

ここだけど、hourに07、 minuteに30がはいってるんだよね、キーボード入力して分割したから。
だから本来、String hourStr = "07"と初期化はしないから、hourStrは定義してないことになるよね。そうなると
int hour = Integer.parseInt(hourStr);このカッコの中のhourStrは使えないから、hourに変えて、int hourのhourを例えばhourIntみたいに帰るのかな。
つまり

int hourInt = Integer.parseInt(hour);
int minuteInt = Integer.parseInt(minute);


860 :アヌス : 2009/01/20 18:56
キーボード入力は、

Scanner stdIn = new Scanner(System.in);
System.out.print("xの値:");
int x = stdIn.nextInt();

.
.
.

こんな感じでもいいのかな。てかこれとかざっさんの方法との違いはなんなのでしょうか・・・?


861 :アヌス : 2009/01/20 18:46
一つのプログラムに書けば

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class diagramCalc {
public static void main(String[] args) {

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("time of train A:");
String s = br.readLine();

String hour = s.substring(0, 2);
String minute = s.substring(2, 4);

int hourInt = Integer.parseInt(hour);
int minuteInt = Integer.parseInt(minute);

int sum = hourInt * 6 + minuteInt;
.
.
.
電車Bの発射時刻入力
時間差の計算
結果出力
}
}

この2を続けてプログラムするのよね?これで動くかな・・・
ダメなとこあったら指摘してくらさい


862 :アヌス : 2009/01/20 18:49
3と4は普通の計算だよね。ifは使うと思うけど。JAVAでだとCと同じようにプログラムしていいのかな・・・
1のプログラムで3、4もこんがらがってきた・・・

1.1では、あとで文字列分解するから、キーボード入力はintじゃなくstringで定義してるのかな?

あとでもう一つのプログラムの質問もすると思います・・・お世話になるです・・・ペコリ


863 :アヌス : 2009/01/20 18:55
てか今かざっさん仕事かな・・・忙しいのにすまんです・・・


864 :大和 : 2009/01/20 22:59
>>859
ごめんね。動作確認しないでコード載せちゃったから間違えあったー
「1.1. ユーザが入力した「0730」を取得する」のコード正解はこうでした。



正解
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class DiagramCalc extends IOException {
    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String s = br.readLine();
        System.out.println(s);
    }
}

間違えー
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class DiagramCalc {
    public static void main(String[] args) {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String s = br.readLine();
        System.out.println(s);
    }
}



> とりあえず1を一つにすると
>
> import java.io.BufferedReader;
> import java.io.InputStreamReader;
>
> public class diagramCalc {
> public static void main(String[] args) {
>
> BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
> String s = br.readLine();
> System.out.println(s);
>
> String hour = s.substring(0, 2);
> String minute = s.substring(2, 4);
> System.out.println(hour + minute);
>
> int hour = Integer.parseInt(hourStr);
> int minute = Integer.parseInt(minuteStr);
>
> int sum = hour * 6 + minute;
> System.out.println(sum);
> }
> }
>
> こうなるのかな・・・

ヴォーすげー!!考え方はまさにその通りです。
さすが!



> んで2を続けて書くと・・・
>
> あれ、ちょっとまてよ。
> String hourStr = "07"; // この2つの変数を文字列型(String型)から整数型に(int型)に,型変換するよ
> String minuteStr = "30"; // 整数型に型変換しないと,文字列型のままじゃ計算できないんだ
>
> // String型からint型へ型変換
> int hour = Integer.parseInt(hourStr);
> int minute = Integer.parseInt(minuteStr);
>
> ここだけど、hourに07、 minuteに30がはいってるんだよね、キーボード入力して分割したから。
> だから本来、String hourStr = "07"と初期化はしないから、hourStrは定義してないことになるよね。そうなると
> int hour = Integer.parseInt(hourStr);このカッコの中のhourStrは使えないから、hourに変えて、int hourのhourを例えばhourIntみたいに帰るのかな。

そうそうその通り!
これじゃ「hourStr」と「minuteStr」が初期化されてないから,コンパイル時にエラーになっちゃうねー。



// String型からint型へ型変換
int hour = Integer.parseInt(hourStr);
int minute = Integer.parseInt(minuteStr);

この「hourStr」と「minuteStr」は初期化されてないから,コンパイルできないね。
↓正しくはこうだったね。



String hourStr = s.substring(0, 2);
String minuteStr = s.substring(2, 4);
System.out.println(hourStr + minuteStr);

int hour = Integer.parseInt(hourStr);
int minute = Integer.parseInt(minuteStr);

> つまり
>
> int hourInt = Integer.parseInt(hour);
> int minuteInt = Integer.parseInt(minute);

そうそう!!これでもオッケー!こっちでもオッケーだよー。
さすがCを理解してるから応用が早いねー。


865 :大和 : 2009/01/20 23:46
>>860
> キーボード入力は、
>
> Scanner stdIn = new Scanner(System.in);
> System.out.print("xの値:");
> int x = stdIn.nextInt();
>
> .
> .
> .
>
> こんな感じでもいいのかな。てかこれとかざっさんの方法との違いはなんなのでしょうか・・・?

!!?!
すごい。この方法を初めて知ったよ。
これでもキーボード入力を取得できるね。

Scanner クラスと BufferedReader クラス。それぞれ持ってる機能にちょっと違いがあるみたいだけど,
「キーボード入力を取得できる」って機能は,両者とも持っているみたいだね。
この機能に限って言えば,違いはまったくないねー。

あ,話しは変わって。
↑のコードだと,キーボード入力の「値」を
「int型」で受け取っちゃうね。
文字切り取りは「String型」じゃないと出来ないんだー。

↓ということは,



Scanner stdIn = new Scanner(System.in);
String x = stdIn.next();
System.out.print("xの値:" + x);

うん。これで「String型」で値を取得できたね。
「int x = stdIn.nextInt();」を「String x = stdIn.next();」に修正してみたよ。

Scanner クラスのほうがコードスッキリしていいねー。
以後はこっちを使ってみましょうか。


866 :大和 : 2009/01/20 23:28
>>861
> 一つのプログラムに書けば
>
> import java.io.BufferedReader;
> import java.io.InputStreamReader;
>
> public class diagramCalc {
> public static void main(String[] args) {
>
> BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
> System.out.println("time of train A:");
> String s = br.readLine();
>
> String hour = s.substring(0, 2);
> String minute = s.substring(2, 4);
>
> int hourInt = Integer.parseInt(hour);
> int minuteInt = Integer.parseInt(minute);
>
> int sum = hourInt * 6 + minuteInt;
> .
> .
> .
> 電車Bの発射時刻入力
> 時間差の計算
> 結果出力
> }
> }
>
> この2を続けてプログラムするのよね?これで動くかな・・・
> ダメなとこあったら指摘してくらさい



import java.util.Scanner;

public class DiagramCalc {
    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);
        String trainA = scan.next();

        String hour = trainA.substring(0, 2);
        String minute = trainA.substring(2, 4);

        int hourInt = Integer.parseInt(hour);
        int minuteInt = Integer.parseInt(minute);

        int sum = hourInt * 6 + minuteInt;

        電車Bの発射時刻入力
        時間差の計算
        結果出力
    }
}

ごめんねごめんね。私が最初書いたコードは間違えがありました。
なのでみさきっさんの教えてくれた Scanner クラス使ってコード新しくしました。

みさきっさんの教えてくれた Scanner クラス使ったら↑こんな感じです。

うん。この続きに「2.」をコード書いていきます。
ダメなところないです。書き方この通りでとてもおっけーです。


867 :大和 : 2009/01/20 23:35
>>862
> 3と4は普通の計算だよね。ifは使うと思うけど。JAVAでだとCと同じようにプログラムしていいのかな・・・
> 1のプログラムで3、4もこんがらがってきた・・・

そうそう!「3.」は if 使って計算。「4.」は普通に計算。その通りです。
CとJavaほとんど似てるね。Cみたいな感じでコード書いちゃっていいよ〜。

> 1.1では、あとで文字列分解するから、キーボード入力はintじゃなくstringで定義してるのかな?

そうそう。文字切り取りは「String型」じゃないとできないから「String型」で定義してるんだー。

> あとでもう一つのプログラムの質問もすると思います・・・お世話になるです・・・ペコリ

いえいえ。まだ現場にも出れてない研修生ごときがお役に立ててよかった。
また手が借りたくなったら書き込みしてください。



>>863
大丈夫。まだ研修生で週3日会社行ってるだけで,
他の日はニートもどきの暇人です。
遠慮なくまたどしどし書き込んでねー。


868 :大和 : 2009/01/20 23:38
返信は以上です。

うおー文字数がすごいことになってしまった。
読みづらいようだったら,↓こっちからどうぞ!
http://dky.pecori.jp/mt/test/read.cgi/8810/1220346564/l50


869 :アヌス : 2009/01/21 12:06
うお!すごいっすよ!かざったん! ちょっとまとめて組んでみます!


870 :アヌス : 2009/01/21 12:21
もう一つなんだけど、

英単語を5つキーボード入力して、その後に数字を5つ入力して初めに入力した5つの英単語のなかに隠れている単語を表示するというプログラムなんだけど、

たとえば、

Enter five words: cheap energy can cause problems
Enter five integer: 4 2 1 0 5
Secret message: peace

となります。これはつまり、
単語の最初の文字を0番目の文字として、最初の4はcheapの4番目の文字p、次の2はenergyのe、次の1はcanのa、次の0はcauseのc、 最後の5はproblemsのeですね。

簡単な例を書けば、
String aString = "abcde";
System.outprintln("Secret message: " +aString.charAt(0) + aString.charAt(3));

出力→ Secret message: ad

となるはずですよね。
しかし今回はキーボードから5つの単語をスペース付きで入力し、かつ次に5つの数字をスペース付きで入力して、最初の単語と最初の数字をマッチさせないといけないんだよね・・・
最初の例でいえば、4はcheapの4番目の文字a、 2はenergyの2番目の文字e・・・と
これはどうやればいいんでしょうか・・・


871 :大和 : 2009/01/21 18:14
うん。
調べてみたらこの要件だと StringTokenizer なんかがいいみたいー。
どういう動きするかは↓を見てみてね!



String words = "cheap energy can cause problems";
StringTokenizer st = new StringTokenizer(words, " ");

while(st.hasMoreTokens()) {
    System.out.println(st.nextToken());
}



結果は,
cheap
energy
can
cause
problems

がprintされます。
一単語ずつ切り取れてるね。これを使ってみましょう。


872 :大和 : 2009/01/21 18:39
1. words を1つずつに分解する。
 1.1. ユーザが入力した「cheap energy can cause problems」を取得する。
 1.2. 「1.1.」を1つ1つに分解する。

2. integer を1つずつに分解する。
 2.1. ユーザが入力した「4 2 1 0 5」を取得する。
 2.2. 「2.1.」を1つ1つに分解する。

3. 指定したインデックスの一文字を切り取る
 3.1. 「1.1.」の1番目の文字「cheap」をindex「4」の値を切り取る
 3.2. 「1.1.」の2番目の文字「energy」を(ry
 3.3. 「1.1.」の3番目の(ry
 3.4. 「1.1.」の4番目の(ry
 3.5. 「1.1.」の5番目の(ry

4. 「5個の文字」を結合して「peace」を出力する

作り始めたらちょっと処理の流れすこし変わってくるかもだけど,
全体の流れはこんな感じじゃないかな(’’


873 :アヌス : 2009/01/21 18:33
nextLine() だとスペースを含めた1行分の文字列を入力できるんだよね


874 :大和 : 2009/01/21 18:37
あ!ごめんねちょっと夕飯とってきます。
またレスしたり書き込むね。


875 :アヌス : 2009/01/21 18:43
スペースが入ってる文字列を分解するっていうのが

String words = "cheap energy can cause problems";
StringTokenizer st = new StringTokenizer(words, " ");

while(st.hasMoreTokens()) {
System.out.println(st.nextToken());
}

これですか?それともこれは単にスペース付きの文字列を取得してるだけ?

StringTokenizer これはじめてみたYO。てかJAVAはじめたばっかで新しいのがでまくりですな・・・
while(st.hasMoreTokens()) これはどういう意味なん?なにをループしてるん?


876 :アヌス : 2009/01/21 18:44
おお。ゆっくり食べてきてくらさーい


877 :アヌス : 2009/01/21 18:44
しかしやはり組み方がわからん・・・ショボン


878 :大和 : 2009/01/21 19:28
戻りました。
レス書いてます。ちょっと待ってねー。

>>877
今はやりはじめたばかりだからそんなもんだよね!
むしろやりはじめたばかりなのに,こんな出来て驚きです。
気にしないでくれておkっす!


879 :アヌス : 2009/01/21 19:40
やべ。明日中にできるかがわからなくなってきた・・・

cheap energy can cause problems
4    2    1   0    5

と、単語と数字をマッチさせねばならないわけだから・・・しかし文字列も数字も一度にタイプするんだよな・・・


880 :大和 : 2009/01/21 21:05
>>875
ちょっといっぺんにコード書きすぎちゃったねごめんね。
↓でひとつひとつに分けてコードを紹介するね。



1.1. ユーザが入力した「cheap energy can cause problems」を取得する。

import java.util.Scanner;

public class FiveWords {
    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);

        // ユーザがキーボード入力で「cheap energy can cause problems」をタイプした,とする。
        // すると,変数 words には「cheap energy can cause problems」が代入されるよ。
        String words = scan.nextLine();
    }
}



1.2. 「1.1.」を1つ1つに分解する。

import java.util.StringTokenizer;

public class FiveWords {
    public static void main(String[] args) {

        String words = "cheap energy can cause problems";

        // StringTokenizer で,「cheap energy can cause problems」を5つに分割するよ。
        // 変数 st1 に「cheap」「energy」「can」「cause」「problems」の5つの要素が格納されているよ。
        StringTokenizer st1 = new StringTokenizer(words, " ");
    }
}



2.1. ユーザが入力した「4 2 1 0 5」を取得する。
2.2. 「2.1.」を1つ1つに分解する。


import java.util.Scanner;
import java.util.StringTokenizer;

public class FiveWords {
    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);

        // ユーザがキーボード入力で「4 2 1 0 5」をタイプした,とする。
        // すると,変数 index には「4 2 1 0 5」が代入されるよ。
        String index = scan.nextLine();

        // 変数 st2 に「4」「2」「1」「0」「5」の5つの要素が格納されたよ。
        StringTokenizer st2 = new StringTokenizer(index, " ");
    }
}



3.1. 「1.1.」の1番目の文字「cheap」をindex「4」の値を切り取る
3.2. 「1.1.」の2番目の文字「energy」を(ry
3.3. 「1.1.」の3番目の(ry
3.4. 「1.1.」の4番目の(ry
3.5. 「1.1.」の5番目の(ry
4. 「5個の文字」を結合して「peace」を出力する


import java.util.StringTokenizer;

public class FiveWords {
    public static void main(String[] args) {

        String message = "";

        String words = "cheap energy can cause problems";
        StringTokenizer st1 = new StringTokenizer(words, " ");

        String index = "4 2 1 0 5";
        StringTokenizer st2 = new StringTokenizer(index, " ");


        // 変数 st1 の中身(5つの要素)を取り出し終わるまでループを続行
        // 「hasMoreToken()」は変数の中身に,まだ取り出せる要素が入っていたら true を,もうないなら false を返す。
        while(st1.hasMoreTokens()) {
            String word = st1.nextToken();
            // System.out.println(word); // 動作確認したければ一番左の「//」を消してね。
            int indexInt = Integer.parseInt(st2.nextToken());
            // System.out.println(indexInt); // 動作確認したければ一番左の「//」を消してね。

            // 「String oneWord = String.valueOf(word.charAt(indexInt));」でもおk!
            char c = word.charAt(indexInt);
            String oneWord = String.valueOf(c);

            message += oneWord;
        }
        System.out.println(message);
    }
}




ごめんねまだ書き途中だよ。
21時には書き終わるから,もうちょっと待ってね。

>>879
大丈夫大丈夫!
千里の道も一歩から!
一歩ずつ歩いていけば気づいたら1000歩歩いているよ。
一歩ずつ進めていけば大丈夫だよ!


881 :大和 : 2009/01/21 21:07
「3.1.」〜「3.5.」と「4.」は,
言葉では理解しづらいと思うから,
コードを実際に動かしてみて,

動き方を確認してみるといいよ!


882 :大和 : 2009/01/21 21:09
レス終わりだよ。
わからないとこがあったらどんどん聞いてくださいね。

読みづらかったら↓こっちで読んでみてね。
http://dky.pecori.jp/mt/test/read.cgi/8810/1220346564/870-882


883 :アヌス : 2009/01/22 07:19
うお!できたよ!かざっさんはJAVA神様だったんだ!マジでありがとう!!

といっても

while(st1.hasMoreTokens()) {
String word = st1.nextToken();
int indexInt = Integer.parseInt(st2.nextToken());
char c = word.charAt(indexInt);
String oneWord = String.valueOf(c);

今いちこのwhile文がわかりずらい・・・

printとprintlnの違いって、ただ単に文を出力するだけならprintlnで、キーボード入力する時とかはprintにしないといけないの?
print("Enter five words: ");
string x = stdIn.nextLine();

こんな感じに?


884 :アヌス : 2009/01/22 07:20
message += oneWord;

こうするだけで文字列は加えられていくのか・・・Cだと配列使うからこんがらがっちゃった


885 :大和 : 2009/01/22 12:39
>>833
> といっても
>
> while(st1.hasMoreTokens()) {
> String word = st1.nextToken();
> int indexInt = Integer.parseInt(st2.nextToken());
> char c = word.charAt(indexInt);
> String oneWord = String.valueOf(c);
>
> 今いちこのwhile文がわかりずらい・・・

このwhile文の動き方はねー。
各変数・メソッドに入ってる値を言ってみるね。



while(st1.hasMoreTokens()) {
    String word = st1.nextToken();
    int indexInt = Integer.parseInt(st2.nextToken());
    char c = word.charAt(indexInt);
    String oneWord = String.valueOf(c);
    message += oneWord;
}

ループ1回目:
「st1.hasMoreTokens()」の中身:「true」
「String word」の中身:「cheap」
「int indexInt」の中身:「4」
「char c」の中身:「p」
「String oneWord」の中身:「p」
「String message」の中身:「p

ループ2回目:
「st1.hasMoreTokens()」の中身:「true」
「String word」の中身:「energy」
「int indexInt」の中身:「2」
「char c」の中身:「e」
「String oneWord」の中身:「e」
「String message」の中身:「pe

ループ3回目:
「st1.hasMoreTokens()」の中身:「true」
「String word」の中身:「can」
「int indexInt」の中身:「1」
「char c」の中身:「a」
「String oneWord」の中身:「a」
「String message」の中身:「pea

ループ4回目:
「st1.hasMoreTokens()」の中身:「true」
「String word」の中身:「cause」
「int indexInt」の中身:「0」
「char c」の中身:「c」
「String oneWord」の中身:「c」
「String message」の中身:「peac

ループ5回目:
「st1.hasMoreTokens()」の中身:「true」
「String word」の中身:「problems」
「int indexInt」の中身:「5」
「char c」の中身:「e」
「String oneWord」の中身:「e」
「String message」の中身:「peace

ループ6回目:
「st1.hasMoreTokens()」の中身:「false



↑こんな感じ!

print() と println() の違いはねー。
↓を見てみてね。



System.out.println("A");
System.out.println("B");
System.out.println("C");

出力結果:
A
B
C

System.out.print("A");
System.out.print("B");
System.out.print("C");

出力結果:
ABC



print() は出力するだけ。
println() は出力して,かつ改行もするよ
違いはたったこれだけだよ!

>printとprintlnの違いって、ただ単に文を出力するだけならprintlnで、キーボード入力する時とかはprintにしないといけないの?
>print("Enter five words: ");
>string x = stdIn.nextLine();

なもんでこの場合,

System.out.print("Enter five words: ");
string x = stdIn.nextLine();

でも

System.out.println("Enter five words: ");
string x = stdIn.nextLine();

でもどっちでもオーケーだよー。



また12時頃,この書き込みを修正するねー。


886 :大和 : 2009/01/22 12:50
>>884
そうそう!
「message += oneWord;」で,
「p」「pe」「pea」「peac」「peace」
ってループ1回ごとに足されていくんだね。

「message = message + oneWord」でも↑と同じ動きするよー。


887 :大和 : 2009/01/22 12:52
今回のレスはこれで終わりだよ。
コーディング頑張ってみさきっさん!
また何かあったら書き込みしてねー。


888 :アヌス : 2009/01/22 15:09
つまり、char c = word.charAt(indexInt);は、
indexIntの中身が4だったら、charAt(4)ってことで、wordの中身の4つ目のインデックスの文字がcに入るってことなのか・・・

うおー。なんということだ・・・これがcharAtの実力か・・・


889 :アヌス : 2009/01/22 15:09
JAVA神様かざっさん!ありがたう!!!また週末にいくつか新しいプログラムの質問すると思うので、宜しくです!!!


890 :大和 : 2009/01/22 16:07
>>888
そうそう。そのコードの処理の流れはまさにその通りです。
さすが!

プロ野球選手を夢見る小学生が
王貞治にありがとうって言われるのと同じぐらい
の嬉しさがありますね。
ありがとう。なんと良い言葉か。
また週末よろしく!


891 :アヌス : 2009/01/23 01:18
http://uk.youtube.com/watch?v=hQD3668g-Jw&feature=related

http://uk.youtube.com/watch?v=XCKoHbwVZc8&NR=1

ママもこまっちゃうよ


892 :アヌス : 2009/01/23 08:39
僕が昔入院していた頃の話だ。

僕は入院3日目にして見てはいけない様な光景を目にした。

昼間とは違って夜は雰囲気が一転

病院の中は静まりかえり聞こえる音は周りの患者の寝息ばかり

そんな中僕は聞いてしまった。

「うーん…そこイイ」

僕は直感した!!

僕は静かに病室を出て甘い蜜をかぎつけたかお様に

声の聞こえる方に足を進めた

「イイ…気持ちい」

近くずくに連れて声は大きく鮮明に聞こえてくる

そして僕はナースステーションに足を止めた。

そこからはこんな声が聞こえてくる。

「こんなとこ患者さんや婦長に見つかったら怒られちゃうね…」

僕はドキドキしながらもナースステーションの中を覗いた…!!

そこにはナースの上にまたがりもう一人のナースが…!!

・・・マッサージをしていた

つまりサボってた

命の境でもあるこの場でサボってた…

僕は思い切り足音を立て走って病室まで戻りました。


893 :アヌス : 2009/01/23 10:14
>>880
かざっさん!

2.1. ユーザが入力した「4 2 1 0 5」を取得する。
2.2. 「2.1.」を1つ1つに分解する。

import java.util.Scanner;
import java.util.StringTokenizer;

public class FiveWords {
public static void main(String[] args) {

Scanner scan = new Scanner(System.in);

// ユーザがキーボード入力で「4 2 1 0 5」をタイプした,とする。
// すると,変数 index には「4 2 1 0 5」が代入されるよ。
String index = scan.nextLine();

// 変数 st2 に「4」「2」「1」「0」「5」の5つの要素が格納されたよ。
StringTokenizer st2 = new StringTokenizer(index, " ");
}
}

ここで一つ質問が。
String index = scan.nextLine();のようにキーボードからの数字を格納するindexをstringで定義してるけど、これはIntでやっちゃダメなの?
5つの数字を1つ1つに分割するからString? Integerとして定義したら分割できなくなるってこと?


894 :大和 : 2009/01/23 18:10
>>893
String index = scan.nextLine();

なぜ int 型ではなく String 型でキーボード入力を取得しているかと言うとね,
ってもう答えわかってますね!さすがです。

その通りで,
StringTokenizer で文字列分解できる値は「String型」の値だけなんだ。
int 型や double 型や boolean 型とかの,String 型以外の値は StringTokenizer つかえないんだー。

だからちょっと手間だけど,
[1] String型 でキーボード入力を取得して,[2] 「new StrinTokenizer(index, " ")」を実行してるんだね。


895 : : [ここ壊れてます]
[ここ壊れてます]


896 :アヌス : 2009/01/24 06:39
import java.util.Scanner;

public class DiagramCalc {
public static void main(String[] args) {

Scanner scan = new Scanner(System.in);
String trainA = scan.next();

String hour = trainA.substring(0, 2);
String minute = trainA.substring(2, 4);

int hourInt = Integer.parseInt(hour);
int minuteInt = Integer.parseInt(minute);

int sum = hourInt * 6 + minuteInt;

diagramのプログラムでも数字(時間)をstringで取得してるけど、これも4つの数字を分割するからなんだよね。
でもこのプログラムでは StringTokenizerは使ってないよね。

この違いって、substringで分割するかStringTokenizerでやるか、だよね。
この二つの違いは、なんなのでしょうか。調べてもいまいち理解できない
2つのプログラムから察するに、StringTokenizerは、どの文字のところで区切るかがわかってる時に使うのかな。
つまり5つの単語の間には必ずスペースがあるから、スペースのところで区切るってのははじめからわかってるから
StringTokenizer(index, " ")
こうしてるのかな、やっぱ。
substringは「どの文字」ではなく「何番目」で区切るかがわかってる時に使うのかな。
diagramの例では、かならず2つ目の数字(時)と4つ目の数字(分)にわけるってはじめからわかってるから
substring(0, 2) と substring(2, 4)
ってやってるのかな



897 :大和 : 2009/01/24 10:46
>>896
> diagramのプログラムでも数字(時間)をstringで取得してるけど、これも4つの数字を分割するからなんだよね。

そうそうー。

> でもこのプログラムでは StringTokenizerは使ってないよね。

そうそうー。

> この違いって、substringで分割するかStringTokenizerでやるか、だよね。

そうそう!

> この二つの違いは、なんなのでしょうか。調べてもいまいち理解できない
> 2つのプログラムから察するに、StringTokenizerは、どの文字のところで区切るかがわかってる時に使うのかな。
> つまり5つの単語の間には必ずスペースがあるから、スペースのところで区切るってのははじめからわかってるから
> StringTokenizer(index, " ")
> こうしてるのかな、やっぱ。
> substringは「どの文字」ではなく「何番目」で区切るかがわかってる時に使うのかな。
> diagramの例では、かならず2つ目の数字(時)と4つ目の数字(分)にわけるってはじめからわかってるから
> substring(0, 2) と substring(2, 4)
> ってやってるのかな

そうそう!違いは単純で,まさにその通り!
StringTokenizer が 「どの文字」で区切るか判明してる時に,
substringが「何番目」で区切るか判明してる時に使うんだー。
たったそれだけ!



「区切り文字」があるときは「StringTokenizer」
「区切り文字」がないけど,「何番目」で区切るかわかってる時は「substring」


例:
StringTokenizer st = new StringTokenizer("I*am*kakitama", "*");

結果:
「I」「am」「kakitama」の3つの要素が変数 st に格納されました



例:
String year = "20090124".substring(0, 4);
String month = "20090124".substring(4, 6);
String day = "20090124".substring(6, 8);


結果:
変数 year に「2009」,変数 month に「01」,変数 day に「24」の値が格納されました。



その解釈でオッケーだよー。


898 :アヌス : 2009/01/24 20:21
なるほど!!!わかったですよ!!ありがたう!!!!!


899 :大和 : 2009/01/25 01:44
おういえ!


900 :大和 : 2009/01/25 01:44
こりゃ1000までいかなそうだなw


901 :アヌス : 2009/01/25 18:39
うお・・・今簡単(らしい)なエクササイズをやってるんですが・・・
全然・・・ていうかやり方がサッパリわからん・・・
かざっさん!わかるのあったら いくつか 助言お願いします!
多分プログラム自体はシンプル(?)で数行で終わる(?)と思われるのですが・・・

ちょっとまってね。どれがわからんのか まとめてます・・・


902 :アヌス : 2009/01/25 22:04
なんとか今回の分のエクササイズはできた・・・
しかしboolenとかがいまいちわからん・・・

あさってあたりにまた質問するかもしれません!


903 :大和 : 2009/01/25 23:19
りょうかーい(´∀`)。
コード作成お疲れちゃん!一歩一歩,ゆっくり着実に進ませていきましょう!


904 :アヌス : 2009/01/27 05:38
http://parasitestage.net/Page/MediaView.aspx?ID=22207

新アニメ「ヘタリア」が始まったわけですが、どうやらこれに韓国がキレてるようです
ニュースアナウンサーが途中舌打ちやらため息やらwwwニュース本番中にww韓国ロッシュwww


905 :アヌス : 2009/01/27 17:50
かざっさん!ちょっと 質問が!
何文字かのstringを受け取ってその文字列の真ん中2文字だけをreturnで返したいのです。文字が奇数の場合は右よりの2文字です。
例) 
middleTwo("abcd") → "bc"
middleTwo("abcde") → "bc"
文字列は必ず2文字以上あると前提しますです。

それともう一つ。取得した数字が奇数ならfalse偶数ならtrueを返すプログラムです。
例)
isEven (24) → true
isEven (25) → false

で、プログラムを下に貼ります


906 :アヌス : 2009/01/27 18:16
どうやらこれは、2つのメソッド(真ん中の文字プログラムと、奇数偶数プログラム)をクラスTwoMethodsに書いて、
それぞれのメソッドに、テストメソッドをクラスTwoMethodsTestに書く、というものらしいのですが、プログラムを貼ります。
しかいしくつか抜けてるところがあってそれをコンプリートしなきゃいけないみたいです。



907 :アヌス : 2009/01/27 18:33
このクラスは、Stringsといくつかの基本となるタイプを処理するメソッドをテストするための2つのメソッドのテストが記されている(日本語がおかしい・・・汗)

import static org.junit.Assert.*;
import org.junit.Test;

public class TwoMethodsTest {
@Test
public void testMiddleTwo() {

//ここにTwoMethodsオブジェクトが要ります//

TwoMethods myFuns = new TwoMethods();

//middleTwoメソッドをテストするための4つのケース//

assertEquals("bc", myFuns.middleTwo("abcd"));
assertEquals("bc", myFuns.middleTwo("abcde"));
assertEquals("23", myFuns.middleTwo("12345"));
assertEquals("pu", myFuns.middleTwo("Computers"));
assertEquals("to", myFuns.middleTwo("to"));
assertEquals("is", myFuns.middleTwo("antidisestablishmentarianism"));
}
//もう一つのテストメソッドを以下に
}

ここからテストされるメソッドのクラス
public class TwoMethods {
public String middleTwo(String arg) {
return "TBA"; //ここのメソッドを変えなければならないようです。
}
//もうちょっといくつかのメソッドを以下に
}

おそらくエラーが出るそうです。JUnit 4はbuild pathにないからだとか。だからJUnit 4をbuild pathに加えないといかんとかなんとか・・・
JUnit testとして実行する。でもassertionはパスしない(赤いバーになる)。
だからTwoMethods.middleTwo(String)を修正する必要があると・・・

次は奇数か偶数かのメソッド。テストメソッドはTwoMethodsTest.javaへ、isEvenメソッドはTwoMethods.javaへ。そして新しいTwoMethodsを作る必要があります。

public boolean isEven(int number)
@Test
public void testIsEven() {
TwoMethods myFuns = new TwoMethods();
assertTrue(myFuns.isEven(24));

//ここにあといくつかassertionを加えたいのです。
assertFalse(myFuns.isEven(25));
みたいな感じでいいのかな。多分他のケースも加えないといかんのかな。

}
自分でも書いてて理解できん・・・。かざっさん、この意味わかる・・・?


261 KB
新着レスの表示

掲示板に戻る 全部 前100 次100 最新50
名前: E-mail (省略可) :

read.php ver2.4 2005/04/13