2ちゃんねるブックマークは2ちゃんねる(2ch.sc)のログをブックマーク出来るビュアーです。読んでる記事を一瞬でブックマーク&次回一発呼び出し。ブックマークしたものがdat落ちしても当サーバー内で保存しておりそのまま継続して読むことが可能。お気に入りのスレッドを記録として残せます。


Java入門・初心者質問スレ Part.3 (900)

SSS

1 デフォルトの名無しさん
2017/04/04(火) 20:41:11.59 ID:y0EcmGB0

Java初心者のためのスレッドです。

※前スレ
Java入門・初心者質問スレ Part.2
http://echo.2ch.net/test/read.cgi/tech/1478863511/

Java入門・初心者質問スレ Part.3



【pc】





スレッドの最初から全部を見る 人気スレッドリスト

外国語アレルギーの方に朗報!
2ちゃブで外国語を楽しく学ぼう!

201 デフォルトの名無しさん
2017/05/04(木) 23:25:17.13 ID:6JYEyXx+

int型配列の最頻値を求めるメソッドは用意されてないのでしょうか?

202 デフォルトの名無しさん
2017/05/04(木) 23:38:27.31 ID:qYtoqfij

>201
標準ライブラリにはないけれども、大丈夫っしょ、余裕っしょ、できるっしょ

203 183
2017/05/04(木) 23:40:33.61 ID:Z6thB1wv

>184
ありがとうございます。
よく見てみたいと思います。

204 デフォルトの名無しさん
2017/05/05(金) 00:12:55.97 ID:YKLEnk0e

>90
ここに書いてある

スッキリわかる Java入門 第2版、2014
まずこの本を3回読んで、オブジェクト指向をみっちりと学ぶ

この本が、すべての言語の基本。
その後、好きな言語を勉強すればいい

205 183
2017/05/05(金) 01:17:39.61 ID:GcsXwLgt

>204
その本悪くないと思うし、あんまりケチつけたくないけど、
Scannerクラスの使い方が詳しく載ってなかった。
(インスタンス化についての記述が無い)
Randomクラスも同様。
過信は禁物か。

206 デフォルトの名無しさん
2017/05/05(金) 01:23:45.78 ID:ecYRcjUo

>205
その辺詳しく書いてある本を知りたいわ
Javaは本多いけど、どのレベルまで書いてあるか全然分からん

207 デフォルトの名無しさん
2017/05/05(金) 01:24:59.61 ID:jRdxjTk1

ここからJavaのほとんどを学んだ
http://www.ne.jp/asahi/hishidama/home/tech/java/index.html

208 デフォルトの名無しさん
2017/05/05(金) 01:30:04.44 ID:yjG7qa8A

>205
>31

209 デフォルトの名無しさん
2017/05/05(金) 02:03:32.40 ID:Pxg1OvaW

>207
こういうサイトがある時何から学べばいいの?
俺みたいなちんぷんかんぷんだと上から全て順に読んで、わからない言葉があると調べて、それでも概念的なものがよくわからなくてとりあえずわかったふりしたまま先に進んで結果あまり頭に入ってなかったっていうのがよくある失敗パターンなのだが

210 スッキリ厨
2017/05/05(金) 02:04:46.46 ID:YKLEnk0e

「たのしいRuby」など普通の本では、オブジェクト指向の説明は、数十ページ

でも「スッキリわかる Java入門」では、250ページもある。
つまり、Javaの本と言うよりも、オブジェクト指向の本なんだよ。
そして、すべての言語の基礎になる

だから、この本は、歴史的な本と言われるわけ。
これ以前には、オブジェクト指向を勉強する、簡単な本は無かった

未だに外国では、この本が無いから、
オブジェクト指向を勉強するのに、四苦八苦している

211 デフォルトの名無しさん
2017/05/05(金) 02:06:41.17 ID:Pxg1OvaW

あと、javaを実行する時とJSPを実行する時、それぞれpublic class{とか<%とか必要だと思うんだけどこれがないとコンピュータが処理であると認識しないっていうこと?

それとprivate class とpublic class の違いもイマイチわからぬ
Privateはそのクラス内でしか呼び出せないっていうけど、そもそも呼び出すってなんぞや

212 デフォルトの名無しさん
2017/05/05(金) 02:21:57.70 ID:Pxg1OvaW

>207
もう一個質問お願いします
extends 抽象クラス
その後に具体的な処理を書くって書いてあるけど抽象クラスを定義する意味ってあるの?
具体的な内容を記述するならそもそも抽象クラスを定義する必要あるのかなって
抽象クラスとかは使い方もわからないしそもそもなんでそういう考え方をするのかも理解ができない
何が言いたいかというと例えば車っていう抽象クラスがあったとしてそれは排気量を記述しなければいけない、メソッドとして走る機能を持つって事として

後で具象化クラスでextends車で抽象クラスを呼び出した時に結局排気量=なんたら、とかを記述しないといけないじゃない
だから、そういう制約的な意味しかないんじゃないかなと
プログラミングにおいて便利にするためにそういう事をしてるはずなのに、その利便性がイマイチ掴めないのだ

今は繰り返し処理とかつかって素数を求めるプログラムを作るっていう事を書いてるレベルだから、もっとゲーム的な方に行くとその意味がはっきりするのかね?

213 デフォルトの名無しさん
2017/05/05(金) 02:36:54.89 ID:Y8XbhYBn

もうはっきり言ってしまうとプログラミング初心者がオブジェクト指向型言語なんてものから始めるべきじゃないんですよ
たかだかHelloWorldやFizzBuzzするためになんでクラスやアクセス修飾子を気にせねばならんのだと
それでもどうしてもJavaから覚えたいなら身の丈に合わない疑問は飲み込んでひたすら前に進むしかないのですよ

214 デフォルトの名無しさん
2017/05/05(金) 02:40:44.53 ID:iQB12R96

つっても、もう世に出てる言語の殆どはLL含めオブジェクト指向言語だろ。

。。。関数型言語の世界へようこそ?

215 デフォルトの名無しさん
2017/05/05(金) 02:44:11.57 ID:jRdxjTk1

>212
例えばその走るって動作には、燃料と空気を供給してエンジンを作動させて動力を生み出すという過程があって、これは二輪でも四輪でも共通である(現実にはエンジンごとに違うがここでは無視)
二輪と四輪のクラスを作るとしてそのベースになる車というインターフェースを定義するとして、両方に同じことを書くことになって、それは無駄だからその部分を抽象クラスとしてまとめてしまおうという考え
間違ってたらスマソ

216 デフォルトの名無しさん
2017/05/05(金) 02:50:09.25 ID:TDjvniVu

>210
>未だに外国では、この本が無いから、
>オブジェクト指向を勉強するのに、四苦八苦している

それはないww
そこまで書くとステマかと思うわ

217 デフォルトの名無しさん
2017/05/05(金) 02:54:03.98 ID:Pxg1OvaW

>212
そういう前提があるっていう事でしょ?でも実際処理で車のエンジンの仕組みは重要じゃなくてどのようにそれらの車が動くかが重要になるのじゃない?
マニュアル車ならクラッチ操作、オートマならレンジチェンジ(でいいんだっけ)などの具体的な操作を個々に記述して行くと思うんだけど共通の仕組みそのものを定義する事は便利さには繋がっていないんじゃないかなって
確かに車はエンジンがないと動かないけど、プログラム上では(ってかユーザーにとっては)エンジンがあるかないかなんて関係が無いんじゃないの?
定義しないといけないっていう具体的な例があったら教えて欲しい

218 デフォルトの名無しさん
2017/05/05(金) 02:59:46.55 ID:Pxg1OvaW

窓はガラスでできている。そのガラスを使って窓を開け作った上でこっちに押したら閉まる、こっちに押したら開くなどのことが出来るようになる
だからまずはガラスでできているという共通前提定義が必要となる。それはわかる
でも実際プログラム上でそれがどう有効なのかがわからない
人間クラスに名前はまず名前、年齢が必要、その上で個々の動作をして行くわけだけど定義してそのクラスを呼び出しても結局年齢とかは手書きで書いて行くわけじゃん

例えばどういう時にオブジェクト指向を使ってるのかとかあったら教えて欲しい、ゲームとかでもいいので

219 デフォルトの名無しさん
2017/05/05(金) 03:13:17.49 ID:jRdxjTk1

確かに個々の動作を書くのには抽象クラスは全く役に立たないよ、ただプログラムを動かすにはその外から見て重要ではない部分が必要なわけで、その部分が共通だとコピペするのは簡単だが後々の修正が大変、だからまとめておくと

220 デフォルトの名無しさん
2017/05/05(金) 03:20:10.72 ID:Pxg1OvaW

>219
具体的にプログラムの世界だと何をまとめるの?実行するための記述以外にプログラムそのものを動かすために必要なものの具体例がわからないのだが

221 デフォルトの名無しさん
2017/05/05(金) 03:37:46.29 ID:jRdxjTk1

JavaにはListって可変長の配列を作るためのインターフェースがあるけど
http://docs.oracle.com/javase/jp/7/api/java/util/List.html
これだけのメソッドを実装しろと要求してくる
そしてこれを使って中身の違う実装を作るときに全部を何度も実装するのは骨が折れる作業だよね
そこでAll系のメソッド等他のメソッド呼び出しで書けるものを抽象クラスに書いておけば実際に実装するときに書かなくてよくなる(効率化したいとかだと書いてもよい)
折角クラスライブラリのソースあるんだしAbstractList辺りのソース見てみるといいよ

222 デフォルトの名無しさん
2017/05/05(金) 03:43:35.59 ID:jRdxjTk1

分かりにくい説明しかできなくてすまんの、多分現実の物体で考えずにプログラムとして直接考えるのが一番の近道じゃないかな

223 デフォルトの名無しさん
2017/05/05(金) 03:50:24.78 ID:TDjvniVu

>220
たとえば共通の手順とか

テンプレートメソッドと呼ばれるパターンの例(HeadFirstデザインパターンより)
http://i.imgur.com/4m0ZWv7.png
コーヒーでも紅茶でも抽象化した手順は同じたし
お湯沸かしたりカップに注ぐ部分は全く同じ

今はJavaでも抽象クラスとは違う方法でも実装できるけど
こういう基礎の理解は必要

224 デフォルトの名無しさん
2017/05/05(金) 04:16:15.80 ID:JPrvtXpw

ゲームのマップを作ろうと考えています。
マップ画像を表示させ、マップ上の任意の部屋をクリックすると、その場所の名前(ロビー、キッチン、ベッドルーム、など)を表示するようにしたいです。
この処理を実装するには、どのような方法がスマートでしょうか?
各部屋の形は四角形ではなく、円や三角形など複雑な形をしているので、単純に四隅の座標を部屋名とともに配列に格納しておき、クリックした座標を内部に含むものをfor文で回して探索する・・・という方法は難しいです。
どうかお力添えください。

225 スッキリ厨
2017/05/05(金) 05:14:23.88 ID:YKLEnk0e

ゲームは、オブジェクト指向の最高峰

キャラクタークラスから、勇者・魔法使いなどを、
モンスタークラスから、スライム・ゾンビなどを派生させる

is-a, has-a とか勉強すれば?
消防車は車の一種。is-a。継承
車はハンドルを持っている。has-a。部品

「スッキリわかる Java入門」では、オブジェクト指向の説明が、250ページもある。
ここ20年間、世界中の中年のCプログラマーが、皆、C++へ移行できずに撃沈している

オブジェクト指向がどれぐらい難しいか、分かるでしょ?
だから、スッキリが日本中に、革命を起こした

226 デフォルトの名無しさん
2017/05/05(金) 05:22:28.10 ID:YKLEnk0e

>224
java.awt.Shape interfaceで定義される、containsメソッドは、
指定された点が、図形の境界の内側にあるか否かを判定する

「java 図形 内側」などで検索!

227 デフォルトの名無しさん
2017/05/05(金) 12:17:52.64 ID:Oxs8iPV6

超単純にやるなら
・種別(矩形、三角形、円)
・パラメータ(最大4つ)
 頂点の絶対座標もしくは円の中心座標&半径

とやって判定時などに種別に応じて処理を分ける

それと一つの部屋?を分割して単純な図形の組み合わせにする
回転が必要なら矩形を2つの三角形に変える

スクロールとか必要ならもっと面倒だけど
プロパティかパラメータを増やせばなんとかなるべ

228 デフォルトの名無しさん
2017/05/05(金) 12:24:15.13 ID:jsHCnOkz

Javaプログラマはオブジェクト指向をよくわかってない人が多い
C#プログラマはみんなよくわかってる
C#マイクロソフト公式の参考書など良書が揃っているからね
Javaはろくな本がない
初心者をごまかしてわかった気にさせるような本ばかりだ

229 デフォルトの名無しさん
2017/05/05(金) 12:42:33.54 ID:8b9qfJY2

それってあなたの感想ですよね?
なんかそういうデータあるんですか?

230 デフォルトの名無しさん
2017/05/05(金) 12:50:52.07 ID:XP+Q0OKG

>229
会社にあります

231 デフォルトの名無しさん
2017/05/05(金) 12:55:46.33 ID:Dvx8ftQc

いちいち部屋分割して図形の頂点座標測ったりとか種別とかやってられないでしょ
元のマップとは別に、それぞれ部屋ごとに色で塗りつぶしたマップを用意して裏で読み込ませといて、クリックした地点のカラーコード読んで色に対応した部屋名を取り出す
ってのを考えたんだけどどうよ

232 デフォルトの名無しさん
2017/05/05(金) 13:14:01.06 ID:8b9qfJY2

>230
それ「宿題家に忘れました」と同レベルじゃないですかー

233 デフォルトの名無しさん
2017/05/05(金) 13:22:43.96 ID:XP+Q0OKG

>232
バカなの?
宿題と同じ感覚で会社のデータ持ち出しちゃうんだ君は

234 デフォルトの名無しさん
2017/05/05(金) 13:28:33.31 ID:8b9qfJY2

>233
説得力が皆無だからそれ以上非論理的な話をするのはやめとけと言っているだけですよ
データを他人に見せられない主張に意味などない
まぁ所詮2ちゃんだし、それでもわめきたければ好きにすれば?

235 デフォルトの名無しさん
2017/05/05(金) 13:29:35.85 ID:Up1lvbHo

まぁポンコツな会社にはポンコツが集まるって言われてるし

236 デフォルトの名無しさん
2017/05/05(金) 13:41:46.76 ID:XP+Q0OKG

>234
そもそも君を説得する必要もないしね
事実は事実として変わらないことだから君がどう思おうと何の影響もない

237 デフォルトの名無しさん
2017/05/05(金) 13:49:41.18 ID:n4hNDFR+

会社にありますはガイジすぎる
そんなん通るならC#プログラマーは全員屑!証拠は俺の会社にある!

238 デフォルトの名無しさん
2017/05/05(金) 14:21:00.68 ID:XP+Q0OKG

というか俺の会社じゃなくてもどの会社にでもある
過去の案件を分析すれば答えは出るよ
Javaがいかに失敗を生み出してきたか数字ではっきりと出てくる
GW明けにでも調べてみるといい

239 デフォルトの名無しさん
2017/05/05(金) 14:28:17.47 ID:xfO5LNpr

今から勉強しようとしてる人向けの話じゃなかったのか?
今から勉強しようとしてるのなんて学生に決まってるんだから会社の資料は見れないでしょ……
まさか社会人にもなってやっとJava勉強しようとしてる意識低い系の話なのか?

240 デフォルトの名無しさん
2017/05/05(金) 14:30:45.16 ID:EB13pOeh

去年調べた結果だと、Javaの方がC#より三倍生産性が良かったよ。
今年は知らんが、多分同じじゃない?

241 デフォルトの名無しさん
2017/05/05(金) 14:35:53.90 ID:XP+Q0OKG

>239
Javaはそういう意識低い人ばかり

242 デフォルトの名無しさん
2017/05/05(金) 16:17:42.92 ID:Pxg1OvaW

public class void String NewClass() {

System.out,.print ("hello");

}

実行しようとしてもエラーが出る 
identifierがありません。
全く持って意味が分からない…

243 デフォルトの名無しさん
2017/05/05(金) 16:28:41.11 ID:8b9qfJY2

おまじないがおかしいよ
ますおまじないをそらで書けるようになってから応用しなさい
あとoutの後ろの,はいらん

244 デフォルトの名無しさん
2017/05/05(金) 16:40:39.14 ID:Pxg1OvaW

>242に関しては自己解決しました。
もう一つ質問だけどとりあえずネット上にあるサンプルを使ってコードを書きまくってみようと思ってるのだけどなにかコードを記述したいって思ったときに
public static void とかprivateとかいろいろあると思うんだけど何を基準に選んだんラいいの?
あと、いまやっとこさこれが書けたんだけどこの言葉から記号一つ一つの意味まで全部把握しておいた方がいい?
public class NewClass{
public static void main(String args[])
{
System.out.print("表示できるか??");
}


}

main このmainっていうのはクラス名?あとどこかでclassは一つのファイルに一つまでしか書けないって書いてあったけどこれにはclassが入ってないけど例えばオブジェクト指向で新しいクラスを作りたいってなった時に
classはファイル名と一緒でなければいけないって書いてあったのだけど、どうやって考えたらいいの?

245 デフォルトの名無しさん
2017/05/05(金) 16:48:22.02 ID:Pxg1OvaW

多重に質問申し訳ない
言葉を覚えての色々な事を質問して回る子供だと思って聞いてほしい
javaの構文を覚えるときは皆一つの熟語として覚えてる?
例えばこういうときは
public static void main(String args[]){  を使うんだ、みたいなものを一つひとつの意味を考えないで丸ごと覚えているイメージ?
あとついでにもう一つ頼む、args[]の[]は配列を表すものだったと思うんだけどよく見るこのコードはなんで配列を指定しているの?

246 デフォルトの名無しさん
2017/05/05(金) 17:03:12.00 ID:Pxg1OvaW

お願いします
今まで出力はコンソール上またはjspをつかってweb上だけに計算結果を出力させてたんだけどより実践的にwebにつながなくてもコンピュータ上だけで処理させるには何が必要になってくるの?
あとテキストボックスとかラジオボタンとか使いたいのだけどその際にはimportとか必要になってくる?

247 デフォルトの名無しさん
2017/05/05(金) 17:06:37.66 ID:UN44kkRF

全てに意味があるんだから全て覚えなさい

「ファイル名 class」
「mainメソッド」
「アクセス修飾子」
「staticメソッド」
「引数」
「戻り値」
「戻り値の型」
「コマンドライン引数」

このあたりで調べなさい
全部まともに答えるには金取らんと割に合わんレベルだよそれ

248 デフォルトの名無しさん
2017/05/05(金) 17:06:41.65 ID:SKOR9dHG

public
static
void
main()
String args[]
{
それぞれの意味を覚えてる

args[]は実行時の引数の格納するから
javac test.javaでコンパイルした場合
実行時にjava test aaaとするとarg[]にaaaも含まれる

コントロールはjava コントロール名とかで調べる

249 デフォルトの名無しさん
2017/05/05(金) 17:14:34.88 ID:Up1lvbHo

とりあえずスッキリJava読んだほうがよくね

250 デフォルトの名無しさん
2017/05/05(金) 17:26:34.34 ID:G0OfeBgr

個人的には最初から1から10まで理解しようとしたら
頭がパンクするだろうから、ある程度は絞ったほうが良い

①public class Tes {
② public static void main(String[] args) {
③ System.out.println("hello java");
}
}

まずは
①:ファイル名とクラス名が同じじゃないと、Javaのプログラムって動かないんだなーぐらいは覚える
②:とりあえず動かすにはこの魔法の呪文が必要なんだぐらいしておく
③:文字列出力するのはこう書くのかー
ぐらいが理解できれば次に進んで良いと思うわ
最終的にはpublic、static、void、stringとかの意味も理解する必要はあるけど
それを利用する(あるいは目的を持って変更する)場面を知ってからじゃないと、結局分からず仕舞いで終わるだろうし

上で書いたソースしか知らない段階でvoid調べて、「何も値を返さない時はvoid型を指定する」とか見ても
理解できるどころか「値を返す、返さないってなんやねん!」ってなって意味が無い

251 デフォルトの名無しさん
2017/05/05(金) 17:43:33.01 ID:RNJ7gaAH

どこから突っ込んでいいのか。。。
ここで質問するより入門書読むなり、入門サイト読むなりした方が良いよ。
分からないことが整理出来てから質問しなさい。
そこまで何も知らない状態で質問されても、入門書くらい読んでからにしろよと呆れられるだけ。

252 デフォルトの名無しさん
2017/05/05(金) 20:46:02.93 ID:Pxg1OvaW

わかりました。
じゃあすっきりJAVA入門ていうの買ってみることにします。
ちなみにこれをやれば基本的な文法は理解できるようになりますか?
自分は今コーディングするたびに~~classにはメソッドがありませんとか型の開始が不正ですとかidentifierがありませんとか
そういうエラーメッセージに苦しめられてる状態ですけどそういった部分も解決できるでしょうか?
それといろいろなコーディングの例ものっていたりするでしょうか?
とりあえず今やりたい事としてはアプリ上にテキストボックスなどを置いてユーザーからの入力に対して対応できるプログラムが出来ればいいなと思ってます
つまり、今は素数一覧判定するプログラムを作ってあるんですけど内部で数値を書いてファイルを実行して初めて表示されるのだけど、コードの内部を知らない人に使ってもらえるようなアプリを作れるようになるかというところです

自分全くの初心者なのでわかりやすさと、どのレベルまで行けるかっていうのを教えてもらえると嬉しいです、それと、第二版と二種類あるみたいだけど安い方を中古で買えば問題ないですか?

253 デフォルトの名無しさん
2017/05/05(金) 20:47:26.36 ID:3kP3AuyS

GWでJava勉強してるやつ、進捗どう?
手遅れ感感じた?

254 デフォルトの名無しさん
2017/05/05(金) 20:50:14.80 ID:jRdxjTk1

>252
メモ帳か何かでコード書いてるのだとしたらIntelliJ使ってみるといいかもな

255 デフォルトの名無しさん
2017/05/05(金) 20:59:16.11 ID:Pxg1OvaW

>254
netbeansでやってますよ

256 デフォルトの名無しさん
2017/05/05(金) 21:07:56.45 ID:MjMW9HuU

この年でJavaとか、他にもっとやることあるだろ

257 デフォルトの名無しさん
2017/05/05(金) 21:22:34.99 ID:RNJ7gaAH

>252
mainメソッドねーよとか、正しいmainメソッドの書き方じゃねーよって怒られてるだけ。

入門すれば何怒られてたのかも分かるから。

258 デフォルトの名無しさん
2017/05/05(金) 21:31:22.44 ID:RNJ7gaAH

入門書は大抵古い面倒な書き方->新しい楽な書き方の順で紹介する。
なので長い目で見たら新しい入門書のが良い。
到達出来るレベルは楽な文法覚えてるだけで何か作れる訳じゃ無い。
どっち読んでも大差はない。

英語覚えたから英語ペラペラか?
言語ってのは使ってナンボ。

入門したら、簡単なので良いからさっさと何か作る。

259 デフォルトの名無しさん
2017/05/05(金) 21:51:52.06 ID:Pxg1OvaW

>258
なるほど

つまり作るための下地は作れると考えて大丈夫?

260 デフォルトの名無しさん
2017/05/05(金) 21:55:05.15 ID:RNJ7gaAH

うむ。
最低限はね。
複雑なのはWebで本家のドキュメント眺めながらとか。
あなたのアイデア次第の部分のが多い。
作り方を思いつけるか。
調べられるか。
知ってるか。

261 デフォルトの名無しさん
2017/05/05(金) 22:15:47.72 ID:Pxg1OvaW

>260
発想の部分は好きだから多分いけると思う
むしろ色々な事をどんどん広げて行きたいと思う
事務職でマクロやってた時も結構複雑な処理をネットで調べたりして実装してた
知ってるか
っていうところがちょっと不安だけど大丈夫かな
でもとりあえず「オブジェクト指向 例 」「メソッドとは」「クラス 定義 必要性」とかわからないままを永遠にループ検索することはとりあえずなくなりそうでよかった
早くAmazonからこないかな

262 デフォルトの名無しさん
2017/05/05(金) 22:48:55.45 ID:G0OfeBgr

しかしJavaで書籍というか入門書無しで勉強する人おるんだな
大体はスッキリの入門、やさしいJava、明解のどれかから手を付けて始める印象が多い

というかせっかく入門書一杯あるんだから利用しない手はないべ

263 デフォルトの名無しさん
2017/05/05(金) 22:49:01.87 ID:RNJ7gaAH

知ってるかは思いつけるかと調べられるかの繰り返しによる積み重ねだから、心配は要らない。

264 デフォルトの名無しさん
2017/05/05(金) 22:49:39.29 ID:+CHRnsuY

エネルギーを2chに使うのをやめないと本読んでも意味ないんじゃないかな

265 デフォルトの名無しさん
2017/05/05(金) 23:14:46.17 ID:GcsXwLgt

配列について質問です。
…{1,2,3};
という表記法と、
…new int[]{1,2,3};
という表記は何か違いがあるのでしょうか?

266 デフォルトの名無しさん
2017/05/05(金) 23:16:03.94 ID:yjG7qa8A

>265
>31

267 デフォルトの名無しさん
2017/05/05(金) 23:39:09.89 ID:GcsXwLgt

>266
アラ探しは止めてもらえます?

268 デフォルトの名無しさん
2017/05/05(金) 23:42:36.40 ID:RNJ7gaAH

newの方が本来の書き方で、newしない方はCからの移行組のために単純に書けるように後から作られたもの。

269 265
2017/05/06(土) 00:35:25.29 ID:gDC1nU6T

>268
そうなんですね。ありがとうございます。

どちらかではOKでどちらかでは駄目という場面とかありますかね?

270 デフォルトの名無しさん
2017/05/06(土) 00:39:00.98 ID:9tv813Aq

無い。
楽な方選ぶ。
(なので大抵newしない方で書かれる)

271 265
2017/05/06(土) 01:34:48.70 ID:gDC1nU6T

>270
分かりました。ありがとうございました。

272 デフォルトの名無しさん
2017/05/06(土) 02:51:48.75 ID:GtACJVEu

インスタンスの同一判定で違いが有るという話を見たこと有るが、
配列のインスタンスを判定する事自体がダメな事だと思ってる。

それより、int result[]=new int[10];
なんて書き方は覚えたての頃に少しした程度で、
今は、int result[]={ 0,1,2,3,4,5,6,7,8,9 };こう書くよなぁ…
C言語は知らなくても慣れてくるとみんなこうならない?

273 デフォルトの名無しさん
2017/05/06(土) 03:07:22.28 ID:9tv813Aq

なる。
実はC++だとnewする、しないはスタックかヒープかの違いがあって、new int[n]とか宣言時に[]内に変数使える、使えないとか、配列作れる限界もnewした方が大きいとか違いがある。
でも、Javaは基本型以外は全部ヒープに置くので配列はヒープにしか置かない。
C形式がまだ無かった初期の入門書には何故配列をnewするのかの解説まであった。

Javaにおいてnewするしないに違いが無いなら、してられっかよ。って誰も書かなくなった。

274 265
2017/05/06(土) 04:21:51.57 ID:gDC1nU6T

と納得したのですが、突っかかる箇所があるのでまた書かせて頂きます。すいません。

今読んでいる書籍の問題で、(必要な個所だけ抜粋します)
public class Player {
int[] hand; // 手札配列
}
の実行用クラス(Exec)を作成しろという問題で、
Player player1 = new Player();
とした後、player1の手札配列に{2,13,26,13,48}をセットしろとのことなんですが、
player1.hand = {2,13,26,13,48};
とするとコンパイルエラーになるんですよね。解答には、
player1.hand = new int[]{2,13,26,13,48};
と書いてあり、そう入力するとエラーは無くなります。
なのでこの二つの表記法に文法的な違いがあるのでは?
と思ったわけです。

改めて皆さんの見識を伺いたいです。
本には違いはほとんど書かれていませんでした。

275 デフォルトの名無しさん
2017/05/06(土) 04:31:13.41 ID:5R6Ql+c4

>274
new を省略できるのは初期化の時だけ。あくまでも初期化の時だけ特別に書くことを省略することが許されている。
(書かれていないだけでやることは同じになる)。

276 デフォルトの名無しさん
2017/05/06(土) 04:34:42.43 ID:feNHzNcv

>player1.hand = {2,13,26,13,48};
>とするとコンパイルエラーになるんですよね。解答には、

そのエラーメッセージで検索すべき!
それでも分からなければ、そのエラーメッセージをここに書いて、質問する

277 デフォルトの名無しさん
2017/05/06(土) 04:44:15.46 ID:feNHzNcv

推測で書くけど、

型 a = {2,13,26,13,48};
これは、配列リテラル。
初期化時の、特別な書き方

たぶん実行文じゃない。この行で実行されるわけではない。
アプリの開始前に、コンパイラが置き換える。
即値、つまり、既に何もせずとも値になってる

型 a = new int[]{2,13,26,13,48};
一方、これは実行文。この行で、newが実行される

278 デフォルトの名無しさん
2017/05/06(土) 08:30:46.24 ID:9tv813Aq

>274
Cだとそもそも宣言時以外はそう言う書き方出来ないんだが、そうか、クラスのフィールドだと宣言と初期化が別れるな。
宣言と同時に初期化する時のみの特別な記述としてnewしない記述は使える。
それ以外はnewしないとダメ。
説明が雑ですまん。
理由は基本型じゃ無いから。
ヒープに置くのは全てnewが必要で、記述上特別扱いは配列の宣言と同時に初期化する時と、文字列のみ。
Cなんて、宣言と初期化が別れたらforで一個一個配列に値を入れるしか無いって言う。。。

279 265
2017/05/06(土) 11:15:43.19 ID:gDC1nU6T

多くのレスありがとうございます。

エクリプスでは「配列定数はイニシャライザにおいてのみ使用可能です」と表示されました。
皆さんの言うように{1,2,3}という表記法は初期化時のみしか使えないということみたいです。
でも>274の場合は初期化に相当しないのかな、と思うのですが…。

280 デフォルトの名無しさん
2017/05/06(土) 12:34:15.65 ID:RxOQwEqu

宣言文の一部分である初期化子やろ

281 デフォルトの名無しさん
2017/05/06(土) 13:07:31.76 ID:3Bn/MS7d

>279
それは初期化であってる。
んで、newしなくて良いのは「宣言と同時に」初期化する場合のみ。
クラスのフィールドでint[] a;ってなってるのが宣言。

282 デフォルトの名無しさん
2017/05/06(土) 13:09:11.36 ID:3Bn/MS7d

x int[] a;
o int[] hand;

人のコードよく読んで無かった。。。

283 デフォルトの名無しさん
2017/05/06(土) 13:44:30.80 ID:jYP/Wf/9

>279
ありがとう。

284 デフォルトの名無しさん
2017/05/06(土) 16:41:50.05 ID:5R6Ql+c4

>277
書き方違うだけでコードは同じように new する形式になっていると思うが。
というのは何れの書き方でも a[1] = 2; みたいに内容を後から変更可能だから。
ただし static の場合は書き換え可能なデータ領域に最初からインスタンスがあって
(つまりコンパイラがそれを含めた形でバイナリを作ってあって)そこへの参照を a に
代入するだけになるかも知れない。
static でない場合は普通に実行人ヒープに領域確保してからリードオンリーの
データ領域(コンスタントプール)から初期値をコピーしていると思う。

285 デフォルトの名無しさん
2017/05/06(土) 16:46:57.57 ID:HAuELHoN

まあどうなってるか見たいならコード書いてコンパイルしてjavap通せ

286 265
2017/05/06(土) 17:14:44.21 ID:gDC1nU6T

>281
そうなんですね、分かりました。

繰り返しになりますが、多くのレスありがとうございました。

287 デフォルトの名無しさん
2017/05/08(月) 17:19:02.28 ID:C0kEGIYB

今日からjavaの本で学習し始めたんだけど

慣れたらpublicなんたらかんたらとか長い分も自分で一からかけるようになるの

288 デフォルトの名無しさん
2017/05/08(月) 17:24:11.64 ID:3+foG7x1

IDEに生成させるもんだろ

289 デフォルトの名無しさん
2017/05/08(月) 18:34:23.43 ID:YdKqfeaH

確かに自動生成されるけど、慣れるといつのまにか暗唱できるようになってる。
という感じ。

290 デフォルトの名無しさん
2017/05/08(月) 18:54:52.71 ID:6xooNmVM

IDEでもテキストエディタでも入力補完機能があるから
わざわざ覚える事でもない

291 デフォルトの名無しさん
2017/05/08(月) 20:55:56.19 ID:epGpOLAg

>287
なる。
1~2秒ぐらいで打てるようになる。

292 デフォルトの名無しさん
2017/05/09(火) 08:36:16.33 ID:wOo51I5g

まぁでも本で勉強してればmainメソッドの成り立ちなんてじっくりねっとり解説されるから嫌でも覚えちゃうよね

293 デフォルトの名無しさん
2017/05/09(火) 12:44:24.36 ID:zagaBJts

画像解析のソフトを使うのにJava Library Pathを追加しないといけないのですがJavaをインストールした後の最初から躓いています(;;)
https://github.com/qupath/qupath/wiki/Working-with-MATLAB
この真ん中あたりに書いてある
Option #2: Control MATLAB from inside QuPath
-- Add MATLAB libraries to QuPath's Java Library Path
で,JVMOptionsをどうやって作ったらいいかわかりません

下記のページの最後「パスの設定は完了」ってところまでやったんですが..
http://techfun.cc/java/windows-jdk-pathset.html

関係ないソフトでてきてごめんなさい

294 デフォルトの名無しさん
2017/05/09(火) 12:49:33.75 ID:zagaBJts

Win7 64bitです

295 デフォルトの名無しさん
2017/05/09(火) 16:18:51.10 ID:iKf74YDS

>293
なにがしたいのかわからん
そのソフト使いたいだけならexe形式のインストーラあるからそれ使えばええやん?

296 デフォルトの名無しさん
2017/05/09(火) 16:45:19.33 ID:dAYvtASF

スッキリわかるjava入門でどこJavaじゃダメだからコマンドプロンプトっていうのを使ってくれって書いてあったんだけど、正直よくわからないからそのままnetbeansぇ続けても大丈夫?

297 デフォルトの名無しさん
2017/05/09(火) 18:01:00.16 ID:xhqm65zv

そんなあなたにpaiza.io

298 デフォルトの名無しさん
2017/05/09(火) 18:28:25.96 ID:zagaBJts

>295
説明不足でごめんなさい
この2つのソフト(コマーシャルのMATLABとオープンのQuPath)はどちらも独立して使えてはいるんですが,片方のソフトからもう片方のソフトを呼び出せる機能があってそのことが書いてあるのが最初に添付したリンクです.
QuPath内にあるQuPath.cfgをJVMOptionに移動させるのが最初のステップなのですがそのJVMOptionが作りかたがわからないのです.

299 デフォルトの名無しさん
2017/05/09(火) 18:42:38.34 ID:wOo51I5g

大丈夫大丈夫
これからも正直よく分からないところはどんどん飛ばしていけ
そうすれば正直よく分からないところで悩む必要無くなるから

300 デフォルトの名無しさん
2017/05/09(火) 19:45:49.93 ID:41He4fJz

>298
そもそもそのページがMATLAB → QuPath(op #1)とQuPath → MATLAB(op #2)の両方書かれてるのは理解してるよな?
op #1はMATLAB側の環境を整えてる
同#2はQuPath側だな

んで問題の箇所は簡単に済ませるならjava.library.pathをQuPath.cfgの中に記述しろって書いてるだろ?
実際のファイル見てないからわからんが、テキストエディタで見れば最低でも[JVMOptions]の行はあるだろうから、その下に追記してやればいい
例で書かれてるのはMAC版みたいだから自分の環境に合わせて書き換えろよ

1 2 3 4 5 6 7 8 9 10 最新200 全部見る 


人気スレッド

No matches! No matches! No matches! No matches!




 

Java入門・初心者質問スレ Part.3 (900)

人気スレ 上位板 ブックマ-ク見る






No matches!
No matches!
No matches!
No matches!