Java入門・初心者質問スレ Part.8
レス数が1000を超えています。これ以上書き込みはできません。
下記の3タイプの違いが分かりません。教えてください。
Aのclsは@で生成したインスタンス
BのFqcnは@のFQCNのクラス型
としています。
@ Class<?> cls=Class.forname(FQCN);
A cls.newInstance();
B Fqcn cls=new Fqcn();
@〜Bは、どれもインスタンスを取得するコードということですが
用法の違いというか、使いどころの違いがあったりするのでしょうか?
>>37
遅くなりましたがやはりダメでした
復元とかした方がいいのかもしれませんね 有償化したjavaをこっそり使う事は出来ますか
今さら有償は痛いです >>41
なにか勘違いをしているようですが
・OpenJDKとOracleJDKの統一
・五月雨アップデートから半年毎に定期アップデートへ切り替え
・長期パッチ対応有償サポートの開始
なので自分でJDKのバージョン管理すれば変わらず使えますよ
要すに使用感はUbuntuとかと同じ感じになります 作るものが思いつかず、数ヶ月おきに何か作ってはまたしばらく何も作らないみたいなのの繰り返しで、上達してる気が全くしない
みんな何作ってるの? では君に目標を与えよう。
俺の心を満足させるエロゲを作りなさい。 関連するファイル(.java .txt)をUTF-8(BOMなし)というのに統一しようと思うのだけど何かおもだった弊害はあるでしょうか >>45
全ファイル修正?全部試験し直して検証報告書もお前が書くんだよな?
みたいなことを言い出す存在どころか生きている価値すらないクズPLやゴミ上司。 いえ個人でしかやらないのでそう言うのは一切問題はないです >>47
じゃあ君次第だ。君が変換後の状態を気に入るかどうか。ただそれだけ。 >>46 とか >>48 みたいなのが上司だったらやだなあ UTF-8N(BOMなし)だけを使う。
shift-jis は使わない
パス・ファイル名には、半角英数字だけを使う。
半角空白も使わない oracleによる有償化でもjavaは現状維持すると思いますか
廃れると思いますか 有償化という言葉だけに惑わされすぎじゃねぇの
今までよりやりやすくなると思うけど サーバーはともかくクライアントをアップデートしないまま放置はヤバすぎる
だからこそセキュリティパッチ未適用のJREが蔓延しても大災害にならないようにアプレットとWebStartは削除しといたよテヘペロってことなんだろうけど、
世界トップクラスの企業のやることたしてはあまりにもやり方が杜撰&無責任&悪質すぎる
正真正銘、史上最大規模のランサムウェアだよ >>54
お前のような情弱が居なくなって嬉しいwww 有償化はサーバーサイドにはノーダメージなんですね
これから勉強しようと思う者としてクライアントjavaは逆にやりたく無かったので対象が絞られて助かります >>59
54のリンク先に書いてるよ
> Enterprise wide, term based, Java SE Subscription model which includes cloud deployment, server, and desktop licensing and support.
> Server and Cloud deployments Price $25 per processor per month, Desktop Price $2.50 per user per month, or lower with tiered volume discounts available.
古いバージョンを使い続けたいならデスクトップは$2.5/月・人 OracleはJDK11で完全有償化すると同時に、
いままで泳がせていたOpenJDKを一気に知財争いで一気に駆逐する予測も
あるから、OpenJDKを過信しないほうがいい。 >>61
コミュニティがそんなこと許すわけ無いやろw
現実的に考えろよ >>62
コミュニティが許さないといくら言ったところで、
過去に多様な状況が起こされた場合では、確実にコミュニティ側が公開停止して
数年かけて知財侵害コードの除去作業をして再公開みたいな流れになってるよね
ものによってはそのまま収束したり。
そうならない保証はないというリスクくらいは認識すべきだな。 Blackdown porting projectの悲劇。
涙なしには語れない。 やっぱjreについては書いてないなーと思って公式いったらjre自体がなくなるみたいだ
クライアントjava提供してる側が個別にパッケージして再配布しろってことらしいから使う側は特に意識しなくていいな OpenJDKのサイトもうちょっとやる気出してくれないかね 多次元配列で[][][][][][]と要素数の多すぎるとメモリが足りないみたいなエラーが出るのだけどこれはマシンの性能に依存するのでしょうか
また、(おおよその)目安になる計算みたいなのはあるのでしょうか? ヒープメモリだから実行時のパラメータに依存する
ーXmxで指定できる 指定しなければ8 MB程度として必要に応じて拡張することもできると言う事でしょうか
ありがとうございます androidアプリを開発できるようになるまでに
どんな勉強過程が必要でしょうか?
すっきり分かるjava(基礎、実践、sql、サーブレット)
↓
java魂
↓
...
独学希望です >>77
書籍なんて買うな
一年で使えなくなる
Googleの公式サイトの情報だけでいい
koltin使え スッキリシリーズと、
実践Javaコーディング作法、2014
Java 最強リファレンス、2014
EFFECTIVE 何々 第2版、2014
Kotlin の太郎本、2016
(広告規制で書き込めない) >>79
>>80
ありがとうございます!
公式サイトも推奨書籍も参考にします! 広告規制?じゃあこれが書けたらもう規制されていないってことになるな。
スッキリわかるJava入門 第2版 (スッキリシリーズ)
http://amzn.asia/9g0zliW
スッキリわかる Java入門 実践編 第2版 (スッキリシリーズ)
http://amzn.asia/alqE1va
実践Javaコーディング作法 プロが知るべき、112の規約と21の心得
http://amzn.asia/23rpAka
Java最強リファレンス
http://amzn.asia/3aurJOH
EFFECTIVE JAVA 第2版 (The Java Series)
http://amzn.asia/4YFRoaX
Kotlinスタートブック -新しいAndroidプログラミング
http://amzn.asia/7IfUpj4
Kotlin Webアプリケーション 新しいサーバサイドプログラミング
http://amzn.asia/bD9xF5D 入門的な質問ですいません
スッキリ分かるjava入門のサンプルコードなんですが
外側の繰り返しと書いてあるんですが外側の繰り返し(?)というのはjのことであってますか?どっちが外か入門書に書いてないんですけど…
それと6行目と8行目はどういう原理で5行目に空白と改行を与えてるのかわかりません教えて下さい;
public class Main{
public static void main(String[]args){
for(int i=1;i<10;i++){
for(int j=1;j<10;j++){
System.out.print(i*j);
System.out.print(" ");
}
System.out.println(" ");
}
}
} iが外側ですが、これが入門書に説明がなくて理解できない、という状況が
理解できないので、すいませんがこれ以上は詳しく解説できません。
jが外側と判断したその理由を聞けば、なにをどう勘違いしたらそうなって
しまったのかを説明できるかもしれませんが、Javaというより簡単な
日本語の領分かと思います。 え、プログラミング始めたてのときでもどっちが外か内か飲み込めました?
どっちの値が先に繰り返しされてるかなんて実行結果見ても分からないですし
どちらが外か内か分からなかったです。疑問に持つ所がおかしいんですかね・・・・・・・
教えてくれてありがとうございます >>83
6行目は改行なしで空白のみ出力。
8行目は空白と改行を出力。
まあしかし8行目は System.out.println();だけでも良い筈なんだけどね。 >>82
少し文章を変えると、Rock54 規制に掛からない
漏れは「書籍名、著者名、出版年」を書いていたら、書き込めなかった。
2, 3文字の短い文字列を、偶然に使っても、規制されることもあるし、たまたまなんだろう
MANGO 板で、何回もテストすれば、どの文字列がダメなのか、わかるのだろうが >>83
printf を使って、こうしてみ。
使い方は、printf を参照
for(int i=1;i<4;i++){
for(int j=11;j<14;j++){
System.out.printf("i = %d : j = %d%n", i, j);
}
} >>83
家の中、家の外。鬼は外、福は内。室内、室外。車内、車外。箱の内側、箱の外側。
箱の中の箱、ループの中のループ。
日本語では、先・後 ≠ 内・外 です。
どちらが先に繰り返しされるかではなく、iループのブロックの内側に(中に)
jループのブロックがあるというイメージ。
よってjのループが内側の繰り返し、iのループが外側の繰り返し。
このような構造のループを入れ子になったループ構造、二重構造のループなどという。
6行目はjループの中、8行目はjループの外で実行される。 >>83
追加。
合計、平均値、ソート、探索など簡単なやつでいいのでアルゴリズムも並行して学習
したほうがいいですよ。 配列作成の宣言文はいくつかあるみたいですが
どれ使ってもいいんですか?全て覚えないと後々問題抱えたりはしませんか
int[] s= new int[5]
int[] s =new int[]{1,2,34,4,4,5};
int[]s ={1,2,3,4,5,6,};
とか乗ってますが それぞれ何が省略されているだけなのかと
省略できる仕組みが分かっていれば。 >>92
ありがとうございます
ガベージコレクションの説明項でnewで確保された要素は普通の変数じゃないからブロックが終了しても
変数は寿命を迎えないみたいなこと書いてあるんですけど、宣言文とは関係ないことですか? >>93
宣言文でプリミティブか参照型か決まるから、
関係はあるんじゃないかな。
参照型で宣言してスタックに参照があって実体がヒープに
インスタンスを持つのがGC対象なのでこれはブロックの終了と
必ずしも連動しない。 >>94
すいません全然分からないです。難しすぎて…。
聞きたかったのはブロック内で宣言した変数はブロックが終わったと同時に消滅しますが
newで確保された要素はブロックが終わっても消滅しないみたいなことが入門書に書いてあるので
配列変数の宣言文でnewを使った方がいいのか?って思って質問しました。 >>95
int[] s = new int[]{1,2,3};
int[] s = {1,2,3};
これはどっちも同じだよ
コンパイルしたら↓こうなる
int[] s = new int[3];
s[0] = 1;
s[1] = 2;
s[2] = 3; >>95
それ多分要素に入れる値はブロックから抜けても解放されないって説明じゃないかな? >>97
ありがとうございます
それのことです。配列の宣言の仕方によってはブロックから抜け出しても変数の値は消滅しないのかなと思ってしまったんですが
関係なかったですか >>98
宣言の仕方は関係ない
配列に入れた値は配列自体が参照し続けるので開放されないってことをその本説明したいのだと思う
この辺はJavaのデータがメモリへ値をどう確保するかってのとGCの対象になる値がどういう物か理解する必要がある もし、配列が格納している要素が、primitive じゃないオブジェクトだったら、
配列のスコープを出た所で、配列は消滅するけど、
中に入っていたオブジェクトは消滅しないし、
それらにアクセスする参照だけが無くなっている
つまり、メモリリークか?
それとも、どこからも参照できないから、その後、
各オブジェクトのGC が呼ばれるのか? そんなん仮に参照カウント方式でやってても循環参照がなければ普通に回収されるだろ…… >>100
どこからも参照されないのならGC対象になるよ
{
Integer[] a = new Integer[1];
a[0] = new Integer(1);
}
// ここではaもa[0]もGC対象になる {
Integer[] a = new Integer[1];
a[0] = new Integer(1);
}
と
{
Integer[] a = new Integer[1];
a[0] = 1;
}
は、全く同じコードかそうでないか。答えと理由を述べよ。 👀
Rock54: Caution(BBR-MD5:1341adc37120578f18dba9451e6c8c3b) >>103
a[0] = 1;
はコンパイル時に
a[0] = Integer.valueOf(1);
に変換される
Integerクラスはスタティック変数に
-128〜127までのIntegerオブジェクトをキャッシュしていて
valueOfメソッドは引数がキャッシュの範囲内であればキャッシュしている
オブジェクトを返す。さもなくばnew Integerしたオブジェクトを返す。
new IntegerはJava 9からDeprecatedになっているから
プログラムから直接呼び出さないことが推奨される。
a[0] = new Integer(1)よりも
a[0] = Integer.valueOf(1)やa[0] = 1が
良いコードと言えるでしょう。 したがって
{
Integer[] a = new Integer[1];
a[0] = new Integer(1);
}
と
{
Integer[] a = new Integer[1];
a[0] = 1;
}
は全く同じコードとは言えない。
理由はコンパイル時に異なるバイトコードが生成されるからだ。 今Java環境ってどうなってるか知らんが
それ全部実装依存じゃなくて、言語仕様で決まってるの? 言語仕様で縛るような話じゃないし
言語って結局文法だからね ドキュメントも言語仕様とAPIはわけられてるし
一緒にして良いものではないと思う と思いきや、ボクシングにvalueOfが使われるとは書かれてないけど
-128〜127なら同じオブジェクトになるってことは書かれてる
これはもう全部言語仕様と言って良いでしょう!
5.1.7. Boxing Conversion
https://docs.oracle.com/javase/specs/jls/se10/html/jls-5.html#jls-5.1.7 仮に実装依存だとするならば
実装によって異なる可能性が存在するわけであるから
全く同じコードかという命題は偽になる
ゆえに、実装依存であっても偽になり、
実装依存でなくても偽になるわけであるから
恒偽命題と言って良いでしょう! 恒偽命題とは、他の命題の真偽に依存することなく、常に偽になる命題です。
コードAとコードBが全く同じコードになるかという命題が真であると
仮定した場合、それが実装依存ならば偽となり、実装依存でないならば真となる。
ゆえに、実装依存かという命題は他の命題の真偽に依存するわけであるから恒偽命題とは言えないのです。 あなんかすみません、荒らしてるみたいで
全然そういうことやるつもりは無いんですけど
3連休で休息取りまくった結果、脳がフル活動してるっていうか
そういう状況でいわばしかたがないんです 違うなあ、命題という言葉の使い方を間違えてる
全部見なかったことにして欲しい
ID:EqDA6MfF0 <- NG推奨ID 別ファイルにあるクラスやフィールドやメソッドを参照するにはどうすれば良いのでしょうか?
また、継承できるクラス(ファイル)は1つのみですよね
継承の場合はインスタンス化しなくてもそのまま使えるけど、
別ファイルの場合はインスタンス化してからでないと使えない
という認識で合っていますか? 上1行:importして使えばいい。
下4行:貴方にとって継承はオーバーテクノロジ。いったん忘れろ。 >>117
継承していようが親のフィールドを使う場合は
子でもインスタンス化は必須・・・で合っていますか;
ありがとうございました。 「インスタンス化」と「コンストラクタを書くこと」をごっちゃにしていないか? クラスフィールド弄るのにインスタンスは関係ないし。 ではクラスフィールど以外のフィールドでは大正解なわけですね フィールドを「使う」の使い方次第だけど、
getDeclaredFields()から使うなんてのもありなら
クラスフィールド以外でもインスタンスにしなくても「使える」よ。
「クラスフィールど以外のフィールドでは大正解」
みたいな言葉遊びを始めたら、きりないと思うよ。 >>124
メソッド使うのにもインスタンスいるでしょw
にわかですか? >>125
classリテラルでも使ってください。
貴方が理解できるかどうかは知らんが。 >>126
クラスリテラルを使ったらインスタンス化しなくても継承先のフィールド使えるんどすか、それはステキザマスな インスタンスフィールド使うんやったら
インスタンス化せなあかんやろ 誰やスタティックフィールドのこと言い出したんわ
おしりペンペンや! >>124
言葉遊びしてんのはお前や
ええ加減にせえ! Field[] fields = A.class.getFields();
取り出したFieldの使い方について、
貴方がインスタンス経由で扱うというならそうなんだろう、
としか言いようないな。
使うの定義が狭い貴方なら成り立つ、これでいい? >>133
誰がリフレクションの話してんのや
オブジェクト指向を愚弄するな! ほんまお前らしょうもない揚げ足取りでええ加減なことばかり言いやがって、親の顔が見てみたいわ 親のフィールド使うんやったら
インスタンス化は必須や、ええなこれで 必須かどうかを聞かれたから、必須ではない、合ってないと
教えてあげただけなのに困ったもんだ┐(´д`)┌ヤレヤレ
しかも理解できないときた。 友達のいないキモオタ共がしょうもない知識ひけらかしおって >>137
言葉を切り取るな、文脈を理解せえ
アホなマスコミのようなことやりやがって >>136
貴方が己にそれが必須であるという制約を課すのを止めるつもりはない。
炎上学習法は成功したでしょ、これでclose。 >>140
なんの勉強にもならんかったわ
アホがなんか言うとるで言うて
俺の教室盛り上がっとるでw
やっぱ5chはこんなクズしかおらんわ言うて リフレクションとかアホやろ
スタティックフィールドはバカや
インスタンスフィールドは賢い 落ち着けw
まぁ人間的に言えば文脈から察しろだし
プログラマ的に言えば正確に言わないのはNGってことでいいじゃないか
仕事場でそんな質問されたら俺は突っ返すけど あれ?誰かがキレたの?
暑いからな。体には気を付けないとな。
水分取るの忘れずにな。 ID:Op5duy3qM ひさびさの究極のキチガイって感じだなw
生きている価値のない究極のゴミクズw 言ってることは普通なのになんでこんなバカっぽく見えるんだろう? 入門書の例文なんですが5行目はなぜ書かないとエラーになるんですか?
あとこの行は添字にiを代入してるですか?
public class Main{
public static int[] makeArray(int size){
int[] newArray = new int[size];
for(int i = 0;i < newArray.length;i++){
newArray[i] =i;
}
return newArray;
}
public static void main(String args[]){
int array[]=makeArray(3);
for(int i : array){
System.out.println(i);
}
}
} >>148
5行目って newArray[i] =i; でしょ
実行すればわかるけど5行目がなくてもエラーにはならない
配列のi番目に値を代入している 後スッキリ分かるjava入門6章の複数クラスによる開発って所は
JDKっていうのダウンロードしないと学習できないですか?dokojavaだとエラーがでます・・ >>149
ありがとうございます。
要素に代入してたんですね。もっかい5行目消して実行したら000で出来ました。すいません
配列変数は初期化しなくてもいいんですね >>150
どういうプログラムでなんてエラーが出るのかしら? public class CalcLogic{
public static int tasu(int a,int b){
return (a+b);
}
public static int hiku(int a,int b){
return (a-b);
}
}
public class Calc{
public static void main(String[]args){
int a =10;int b =2;
int total = tasu(a,b);
int delta = hiku(a,b);
System.out.println("足すと"+total+"引くと"+hiku);
}
}
クラスCalcLogicはpublicであり、ファイルCalcLogic.javaで宣言する必要があります
Main.java(1行目)
クラスCalcはpublicであり、ファイルCalc.javaで宣言する必要があります
Main.java(10行目)
シンボルを見つけられません シンボル: メソッド tasu(int,int) 場所: クラス Calc
Main.java(13行目)
シンボルを見つけられません シンボル: メソッド hiku(int,int) 場所: クラス Calc
Main.java(14行目)
シンボルを見つけられません シンボル: 変数 hiku 場所: クラス Calc って出ますね…他のコードも同じようなエラーで出来ないですね。
JDKって物をダウンロードしないと6章は飛ばすしかないんですかね CalcLogicをCalcLogic.javaで宣言すればいんじゃないかな
dokojavaのタブのところを押すとクラスファイル作れるっしょ
そこでCalcLogic.javaを作ればいい
Eclipseとか使った方が良いと思うけどね
本持ってないから6章を飛ばしたが良いかはわからん さすがにもうeclipseとかいう糞は忘れていい
IntelliJかVSCodeを使おう クラス名・ファイル名を合わせないといけないとか、
パッケージを作ったら、それをフォルダ階層と合わせないといけないとか、
パッケージ化について、色々なルールがある >>156
VSCでインクリメンタルコンパイラ使えるん? >>159
インクリメンタルコンパイルなんかeclipseもIntelliJもやってないぞ
Javaコンパイラにそんな機能はない
.class単位のインクリメンタルビルドのことならVSCodeも当然やってる
デバッグ実行中のエディットコンティニューすら可能 ここに書いておいた
https://paiza.io/projects/5G9gtFuq0b7Uu2vL667kfw
paiza.io では、ファイル名はMain.java、クラス名はMain にしないと動かない。
また、同一ファイルに、複数のpublic クラスを置けない。
CalcLogic.tasu のように関数名の前に、クラス名も必要
paiza.io では、別ファイルのクラスは、エラーになって読み込めない >>162
eclipseなら文字入力するとリアルタイムにコンパイルエラーがわかるんよ、超便利、超素敵、VSCでもそうなのかなって思っただけ コンパイラの機能じゃないかも
アナライザが動いてんのかな
VSCでも型が間違ってたらすぐエラーがでる?
スペルチェックみたいな感じで
それができたら良いよね eclipseを使ってると、プログラムの3分の1はeclipseに書いてもらうって感じだな。
インスタンス名の次にピリオドを入力するととメソッドの一覧が出るので、そこから選ぶだけだし。
自分がものすごくものぐさになった気がするわ。 >>155,>>161
dokojavaのクラス変更のタブいじってみましたがダミでした
使うコンパイラによってもルールが違うんですね・
やはりJDKというのをインストールしないとだめみたいですね・・・
サンプルコードまで・・・ありがとうございます APIで提供されてるクラス名とかもな
3文字位打って候補出しちゃうわ >>167
paiza.io, codepad などで、ブラウザを使って、プログラミングすれば?
それに一々、動かさなくても理解できれば、検索して何とかなるから十分
一々、動かして確認していると、時間を食う。
最初に、スッキリを3回読んでから、動かした方が手っ取り早い
読むだけなら、20時間で読める。
2回目は5時間、3回目は2時間で読める https://devnote.jp/jdk_windows/index.html
の説明を詠みながらJDKを導入しようとしましたが失敗しました
setx /M Path "%JAVA_HOME%\bin;%Path%"
を入力すると エラー)構文が無効です。既定のオプションは2回より多く使えないみたいなエラーと
javac -version
といれると操作可能なプログラムまたはバッチファイルとして認識されていませんみたいなエラーが出ます
何回かやり直しましたが同じエラーが出て駄目でした
他にもう少し簡単に環境導入できて似たような機能が使えるお勧めのものはないでしょうか? >>169
プログラミング言語入門で・・・今までいじったこともないので見ただけで覚えるってのはちとハードル高いです
APIとか複数クラスは後回しにしてもいいんですかね。アドバイスはありがとうございます >>170
GUIで設定すれば?
start C:\Windows\system32\rundll32.exe sysdm.cpl, EditEnvironmentVariables >>173
>(他の環境変数のパス) ;C:\Program Files\Java\jdk1.8.0_101\bin
複数のパスがつながっている場合は、前のパスの後ろに、区切り文字 ; が必要!
PowerShell を起動して、以下を入力して、パスを表示してみ。
ひょっとしたら、前のパスとつながっているかも
$env:Path.split(";")
他には、ファイルパス・ユーザー名など、
システムに半角英数字以外を使っていて、誤動作しているとか?
OS のバージョン・ビット数、エラーメッセージも書いて。
まず正確なエラーメッセージで、検索するのが速い >>173
コントロールパネル開けた?新しい Windows 10 (バージョン 1803) だとスタートの所で右クリックしても
コントールパネルは出てこないわけだが。(メニューの中の「Windows システムツール」の中にある)。 JDK10をMacにインストールしようとしたんですが
Oracleのダウンロードページが全て404 not foundになっています
どこかにミラーはないのでしょうか?
Dmgファイルを探してみましたがファイルサイトだと
怪しいアドウェアしかないようです >>174
https://devnote.jp/jdk_windows/index.html
ここの3-3の3を実行すると
”エラー:構文が無効です。既定のオプションは'2'回より多く使用することはできません
と出ます。
また3-5のjavac -versionを入力すると"avac'は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチファイルとして認識されていません。"と出ます。
他は説明どおりに出来てるんですが・・・
初めてこういうものを導入するのでPowerShellとかよくわからないです… >>178
構文が間違ってるんだと思うよ
"とか省略してない?
リンク先のそのまま貼り付けるんやで >>180
一応サイトの方からコピーで全て張ってましたけど駄目でしたね・・・
これがないと読んでる入門書の複数クラス・APIの章が実行できないんですが
飛ばしてオブジェクト指向の章に飛んでも後々支障ないですかね・・・ >>181
もっかいやってみたら?
コマンドの構文エラーくらい解決できるっしょ >>178
旗の(スタート)ボタンを右クリックすれば、PowerShell・PowerShell(管理者用)がある。
普通の(管理者用ではない)PowerShellを起動して、以下を入力して、
JAVA_HOME など、関係のある部分を書いて!
すべての環境変数を表示する。JAVA_HOME を探して書いて。
ls env:
すべての環境変数PATH を表示する。
$env:Path.split(";")
3-3.1 では、普通のコマンドラインプロンプト(cmd)ではなく、管理者用のcmdで設定している。
だから、普通のcmdではエラーになる
3-3.2, 3 では、setx /M と、/M が付いているから、
ユーザー環境変数じゃなくて、システム環境変数に設定している
念の為に、システム環境変数を設定した後に、PC を再起動して。
それと、書き込む時は、名前欄に最初に質問した時の、レス番号を書いて 3-3.2, 3 では、setx /M と、/M が付いているから、
ユーザー環境変数じゃなくて、システム環境変数に設定している
コマンドではなく、画面操作でも設定できる
エクスプローラーで、PC を右クリックして、プロパティー選択。
システムの詳細設定 > 環境変数
3-3.2 では、システム環境変数に、JAVA_HOME があるかどうかを確認する。
そして「C:\Program Files\Java\jdk-何々」と、
jdk をインストールしたフォルダを正しく、追加か修正すればよい
3-3.3 では、システム環境変数Path を修正して、「%JAVA_HOME%」を追加すればよい。
こうすれば、3-3.2で、JAVA_HOMEに設定した値が、Pathにも設定される
【Windows版】初心者のための!環境変数の基礎とPathの設定方法
https://yukiwet.com/setpath/ 細かくありがとうございます
powershellからやったら3-3の3,setx /M Path "%JAVA_HOME%\bin;%Path%"入力で
指定した値は保存できましたが
javac -versionと入力すると>>178と同じエラーです
システムから環境変数を覗いたら以下全てありましたが・・・
足りないものはないと思いますが何故でしょうか
C:\ProgramFiles\Java\jdk-10.0.2\
C:\Program Files\Java\jdk-10.0.2\bin
%JAVA_HOME%\bin;%Path% >>185
Windowsの画面のメニュのところを右クリックして
ファイル名を指定して実行で
cmdを実行するっしょ
その画面で
dir "C:\Program Files\Java\jdk-10.0.2\bin"
を実行してjavacが表示されなかったらパスが間違ってる
表示されるならパスが反映されてないだけだから
新たにcmdを実行すればよい Program Files(x86)にインストールされたとかじゃね? >>185
>C:\ProgramFiles\Java\jdk-10.0.2\
>C:\Program Files\Java\jdk-10.0.2\bin
ProgramFiles
Program Files
半角空白が片方にしかないじゃん。両方に必要
>%JAVA_HOME%\bin;%Path%
setx /M Path "%JAVA_HOME%\bin;%Path%"を入力したら、
「%JAVA_HOME%\bin」と表示されているだろ?
後ろに、%Path% は付かないだろ。
%Path%は、すべての環境変数PATH の文字列の事だから、
%JAVA_HOME%\bin を、それらの前に追加したという意味
PowerShellを起動して、以下の2つを入力して、
JAVA_HOME など、関係のある部分を書いて!
すべての環境変数を表示する。JAVA_HOME を探して書いて。
ls env:
すべての環境変数PATH を表示する。
$env:Path.split(";")
>>184
間違って書いたので、修正します。
>3-3.3 では、システム環境変数Path を修正して、「%JAVA_HOME%」を追加すればよい
「%JAVA_HOME%」ではなく「%JAVA_HOME%\bin」です
システム環境変数Path の画面で、直接書いた方が速いかも
最終的に、システム環境変数に、%JAVA_HOME% と、
システム環境変数Pathに、%JAVA_HOME%\bin 、1つずつがあるはず インストールが失敗してるのか何度試しても同じ結果でした…
別のpcでまた今度試してみます。ありがとうございました(´Д`)
161さんが挙げてくれたコード使えばブラウザ上でも実行できたのでこれで代用してみます ラジオボタンやチェックボックス、テキストビューなどをデザインしなおすというか
カッコいい見た目に作り直したいのですが、どのような勉強をすればいいのでしょか?
参考書やサイトなど教えてくださいませ、よろしくお願いします。 >>190
普通にcss
まさかとは思うが今時SwingやJavaFXなんか使ってないよね Swingみたいにawtから継承して色々なのを作れなくはない。
ようするに絵を描いてしまえば良いだけなので。
まあしかし自作するのは面倒くさいのと、そのソフト配布する時に必ずそのライブラリも付加しなければいけなくなり、それにバクがあったらまた自分で配布するとか、色々と面倒なので作る人は少ない。 そもそも醜悪なSwingの見た目を良くしようと思ったらIntelliJレベルまでフルカスタマイズする必要があるから、
どうしてもJavaクライアントでやるなら最初から見た目は諦めるのが一般的だね >>191
ありがとうござます。
javaでcssを使えるようになりたいのですが、おすすめサイトや本を教えてくださいませんか? CSS は、JavaScript のjQuery か、Ruby のNokogiri
Selenium WebDriver なら、数言語から使える >>199
javaでgui作りたいのにjsやrubyが必要なのか? >>200
違うやろ、お前が本当にやりたいのはRubyや! 昨今は、Java, Ruby, Go など、どの言語でも、
画面は、HTML, CSS, JavaScript になる 皆様ありがとうございました。
ジャバのビューをcssでデザインしようとしたら
レイアウトでCSSタグを使えばいいのでしょうか?
そういうサンプルが豊富なテキストとかありませんでしょうか? JavaFXはスタイルシートっぽいの使えた気がするが現在微妙な立ち位置… Javaに書いたhtmlだとformタグの子要素からeventを取得すると思いますが、どのようにしますか? >>205
> Javaに書いたhtmlだと
これはどういう状態の事を言っているのかがわからない。 >>206
Jlabelのインスタンス宣言時に、引数にhtmlを含んだStringを渡した時のことです 二ヶ月前に初めて、やっとJAVAと一緒に、JSP、SQL等つかえるようになってきたものです。
ただここから何作ればいいかわからず、途方にくれています。
JAVA覚えたてになにかいいプロジェクトなどありますか? >>208
そこまでできれば最底辺奴隷PGとしては十分だから、普通にとりあえずどっかのブラック企業に就職して現場に投入してもらえばいい
仕事でやるつもりじゃないんならJavaは無用
NodeやRailsにでも行ったほうがいい JavaのWebシステムって基本的に金のために作るのがわけだからオープンソースプロジェクトなんかほとんど無いし、
独学で習得できるノウハウも極めて限られてる
仕事して覚えるのが一番手っ取り早いよ
独学で頑張ったところで人材としての世間の評価は「未経験」だから、はっきり言って時間の無駄 不条理だよな
実務経験あってC++とかほかの手続き型言語の経験あったら
JavaやらC#やらごときできないわけないだろ!
そのへんのフレームワークも
業務経験でそこまで変わるとおもえん
趣味で使えるなら業務だからってそんな難しくなるか? むしろ趣味でやってるやつの方が洗練されたプログラムを書く <209-210
そうなんですね。。
自分の前職の内容洗い出してなにか作れないか考え直してみます。
面談受って早く現場いきたいなぁ・・ >>213
暇ならインフラやれば?
サンプルをAWS上に立てたサーバーへデプロイするくらいまでやってみたらいい
インフラに強いと一山いくらのPGの中ではかなりの差別化になるよ >>208
2か月でそんなできるようになるなんて凄いです
勉強方法を教えてもらえませんか? >>216
うちも実務でできるようになったぞ
まあ、GUI絡むと死ぬけど いきなり実務って無理じゃないですか?
実務に入る前に前提知識を身に付けるとしたらどんな学習方法があるのでしょうか? >>218
言語がだいたいわかってれば十分いきなり実務できるよ
心配しなくても未経験の最低単価のPGなんて使う方も大した期待はしていない
業務の開発なんてほとんどコピペだから、似たような処理をコピペしてきてちょっと弄るくらいできれば上出来 ついでにいうと、低級のPGに限らず、SI案件の実務なんて君が想像してるほどレベル高くないよ
初心者に毛が生えた程度の人達がひたすら右から左へデータを書き写す単純作業をしてるだけ 失敬な
上流の人にゴマすったり
他人のコードにケチつけたり
書類の誤植をひたすらなおしたり
いっぱいやることはあるぞ! 「スッキリわかる Java入門 第2版」で、オブジェクト指向を学んだのなら、
「たのしいRuby 第5版、2016」を読んで、
無料のRails チュートリアルをやれば?
これをやれば、すべてのフレームワークに応用できるし、製品の全工程がわかる。
作品も、Railsで作るのが楽
その後、掌田津耶乃のフレームワークの本を読めば?
Spring Framework 4 プログラミング入門、2014
Spring Boot プログラミング入門、2016
Node.js超入門、2017
Python Django 超入門、2018
それか、Java 土方になるか。
土方の欠点は、製品の一部分しか作らないから、全工程がわからない事。
土方なら、以下の本
実践Javaコーディング作法 プロが知るべき、112の規約と21の心得、2014
Java 最強リファレンス、2014
EFFECTIVE JAVA 第2版、2014 +=
これと
=
の使い分けが分からないので教えてほしいです
a +=2
a = 2 >>223
「a +=2」 == 「a = a + 2」 >>224
ありがとうございます
それが同じ意味だとは分かるのですが、使い分け方が分かりません
全く同じ意味なんですか?+=と=は a +=2は「aの元の値に2を足してaに代入」
a = 2は「aの元の値が何であろうが2を代入」だ
全然違う >>227
ごめんなさい;
理解できました。ありがとうございます >>219
自分は本業は違う業界なのでPGは独学です
有料のネット学習も考えてみましたがどうなのでしょう?
完璧に使えるようになるまで実務では使わないという事にすると一生実務で使わない事になりかねないと思う。
言語そのものはすぐに覚えられるだろうが、あらゆる分野のあらゆるライブラリが次々と湧いて出てきて尚且つその一つ一つが日々バージョンアップして行くわけで、そんなの全部覚えられるわけがない。 業務システムに必要な技術要素はこれだけ
・画面に情報を表示する&ユーザーの入力を取得する
・現在の状態を更新または取得する
・作ったものをユーザーが使える状態にする
あとはそれぞれについて一つ道具を覚えたら一通りモノは作れる
できる奴は本当にこれだけでできるし、できない奴はどれだけ独学で頑張っても仕事しない限り無理 >>229
プロゲートで、Ruby をやって、
無料のRails チュートリアルをやるのが定番
YouTube で、セレブエンジニアの小松和貴という人が、
フリーエンジニアになる方法など、よく転職動画を挙げている >>232
javaを身に付けたいのですが、rubyから入った方がいいのでしょうか?
今はスッキリjavaを呼んで、androidアプリ開発の教科書(斎藤)を読み終えようとしてるところです。 >>233
辞めたほうがいい
JavaからRubyやるならわかるが、RubyからJavaはいろんな意味で混乱するぞ たのしいRuby 第5版、2016
時間効率では、この本を3回読んでも20時間で、得られるものも多い。
Rubyでしばらく遊んで、正規表現・配列のメソッドを覚えれば、
JavaScript, jQuery へ移行できる
JavaScript, Kotlin などは、Rubyに似せてくるから、
Rubyのプログラミングのやり方の多くが使える
それに、ファイル・テキスト処理では無敵だし、
他の言語の基礎になるから、やって損はしないのでお勧め! >>235
ありがとうございます。
初学者なので教えていただけると嬉しいのですが
RubyとPythonは同じような位置づけの印象がありますが
PythonよりRubyの方がいいのでしょうか? これを一番の参考にすべきでしょう。
プログラマー年収ランキング2017!言語別、第1位はScalaの626万円
https://jp.stanby.com/media/programming_ranking2017/ できれば、個人的にandoroidアプリを開発できるようになりたいと考えてます
その場合の学習進路として、、java→SQL→サーバーサイドって感じになりますか? プログラムは、順次、選択、繰返しで実装できることがわかってるんだから
if文とwhile文がわかったら十分
SQLもサーバサイドも必要になってから調べれば良い
androidの開発がしたいならandroidの実装の仕方を勉強しないと 論理演算子の または〜って縦棒と変換して使うとエラー出るんですけど
なんて変換すればいいですか?
かつ(&&)は出るんですけど・・・ すみません。逆でした
且(&&)はエラーでないんですけど
または(‖)と打つとエラーが出ます。 >>244
ありがとうございます。
コピーしたら使えるんですけど、なんて変換したら出るか教えて下さい
自分のパソコンだと’縦’で変換しても同じのが出ません><; >>246
キー配列がJapaneseなら
Shift+\
で出るよ >>247
おかげさまでいけました!
ありがとうございます。 >>241
Androidアプリ一個もリリースしたことなさそう なんで記号を変換で打ってるんだろ?
そのもののキーあるのに スマホならわかるがPCは滅多に触らないので勝手がわからないのかも知れない プログラミングの勉強について
制御や配列などの基本的な部分を理解したら
・ 深く考えずサンプルプログラムを打ちまくる
・ 時間をかけてサンプルプログラムをしっかり理解しながら進める
どっちが正解なのでしょうか?
javaの勉強の進め方は
クラスやオブジェクトを総覧しておいて
何を作るにはどのクラス、メソッドを組み合わせるか
という視点を中心として進めればいいのでしょうか? >>253
> ・ 時間をかけてサンプルプログラムをしっかり理解しながら進める
こっちだろうなやはり。
> javaの勉強の進め方は
> クラスやオブジェクトを総覧しておいて
> 何を作るにはどのクラス、メソッドを組み合わせるか
> という視点を中心として進めればいいのでしょうか?
そうだな。
それと逆引き辞典みたいな本があるといいかも。ネットで検索してもいいけどね。 インスタンスの取得に関してなのですが、
自分で作成したクラスや、Overrideしたクラスは、インスタンスをnewで取得し
importして使うクラスに関しては、戻り値でインスタンスを取得するという感じなのでしょうか? >>257
いやそれはどういう設計なのかによる。
まあしかしだいたいは new してインスタンス作ると思ってて良い。 そうなのですね、ありがとうございます。
newしていないのに戻り値でオブジェクトが返されたりすると
コードを読んでいて混乱してきてしまってます
newされていない時に、リファレンスで戻り値を確認しながら読んでいきます。
いつもありがとうございます。 >>249
話は変わるけど服部栄養専門学校の服部先生は調理師免許持ってないんだって >>261
え?俺は情報関係の資格一つも持たずに学校でC言語教えてたよ。
もちろん学校って言っても大学なので教員免許みたいなものもなしだよ。 <<250
BUFFALOの安いキーボードだと'め'と\がどっちもスラッシュで印刷されてて・・・
全く気づきませんでした 旧石器時代に作られたjavaのコードを調べてたら、
javax.swingみたいな組み込みのパッケージに直接オリジナルのクラスを追加している(そしてそのせいで最大にバグを引き起こしている)実装を見たんだけども、
こういう手法ってかつては一般的だったの?
どう考えてもアンチパターンな気がするんだけども >>263
よくわからんが日本語キーボードは「め」が「/」で「ろ」が「\」ではないか? 日本語変換でコード打つなら欧米人はどうやって打つんだろうか?
基本プログラミング時は日本語変換はOFFだ
コメントや出力文字列で使うくらい >>264
いや、普通の思考ならパッケージ分けると思う
ズボラし過ぎだろう >>267
だよね。最終更新が2001年らしいから、その時代には普通だったのかもしれないと思った。
そうじゃないなら遠慮なく怒れるわ。ふざけんなナメた実装してんじゃねえよ無能。 ちなみにおそらく意図としてはpackage privateなクラスやプロパティを直接触りたかったんだろうな、と。
publicになってないものを直接触らなくちゃいけなくなった時点で根本的に設計間違えてるって気づけよ、、 >>236
たのしいRuby 第5版、2016
みんなのPython 第4版、2017
この2冊は双子。
ただし、Pythonの方が難しいから、先にたのしいを3回読むこと。
たのしいをみっちり勉強すると、みんなのがスラスラ読める
Pythonで考えて、Rubyに変換するよりも、
Rubyで考えて、Pythonに変換する方が簡単
「たのしいRuby」「スッキリわかる Java入門 第2版」
この2冊をみっちり勉強すると、基礎体力が付いているから、太郎本も読める
Kotlinスタートブック -新しいAndroidプログラミング、長澤 太郎、2016
ただし、Android の勉強のほとんどは、フレームワークの勉強。
言語じゃないから、言語を勉強しても、何も作れない!
だから、Rails などのフレームワークをやっていない人は、大変。
製品を作る全過程がわからないから
Java 土方は、製品の一部分しか作らないから、全体像を知らない とすると、推奨本をしっかり読みこんだのち
Railsを学ぶといいということでしょか? 明確な目標があるなら普通にそれをやるべき
勉強本マニアになったところでしょうがない ありがとうございます!
とりあえず、2冊テキストを読んだので、アプリ作れるか試してみます! フレームワークを勉強する定番は、
無料のRails チュートリアル 16進数について教えて下さい
2進数は入門サイト等見てなんとなく分かってきましたが、16進数が分かりません
0x000FF1
これは10進数にするといくらなんでしょうか?解読の仕方も教えてほしいです >>277
n進数というのは一桁でn個の値を使えるということで、16進数なら1桁の中は16種類の文字を数値ということにして扱う。
一般的な10進数だと 0 〜 9 までしかなくて足りないので A 〜 F も一桁の数を表す事にして1桁で16段階を表せるようにする。
1桁で 0 〜 F が10進数の 0 〜 15 に相当する。一つ上の桁の 10 は10進数だと16になる(16^1ということ)。
もう後は算数の問題なのでわかるよな。 0x000ff1 は 15 * 16^2 + 15 * 16 + 1 = 4081 だ。 >>278
すいません、ありがとうございます。
0x00FFF1だったら
15*16^3 + 15*16^2 + 15*16 +1
こういう感じで合ってますか?理解できたかもです>< 16進すうを、2しん数に直してみれば?
0xAF → 0b1010_1111
A=10, F=15
(NG ワードで書き込めないから、変な文章になった) 2進数で説明しようとすると、なぜかNGワードになるな・・・ >>277
2進を理解しているのなら、16進を2進に変換すると足し算だけで出来る
16進:00 0F F1
2進:1111 1111 0001
2進はただの2^nのフラグなんで、
(2048 + 1024 + 512 + 256) + (128+64+32+16) + (1)
=4081
将来的にbit演算でANDとかORとか右シフトとか左シフトとかする時は、2進で考えた方が楽 まぁ2進数も16進数もあまり10進数に変換したりはしないよな そうだな。むしろ10進のままだと分かり辛くて16進に変換する方が多いかな。 昔は0からFまでビットパターンがすっと出てきたが、もうすっかり忘れてしまった。 case0と4と8のrandがエラーになります
アドバイスください
https://ideone.com/2uM5q1 >>287
aとbが0から3で、かつ同じ数字でないという条件なら
switch (a+b)
case (1) return 2 ;
case (2) return 1;
case (3) return 0; >>287
言語は何?Javaではないよね?見た感じCのようだが。
C言語の質問はC言語のスレでするように。ここは Java のスレだ。
まあだいたいの Java プログラマはCもわかるとは思うがここに書いたらスレチだ。
Javaの情報を求めるものにはノイズにしかならない。 >>271
ファイルのダウンロードについて教えてください
CSVファイルを動的に作成してそれをダウンロードする機能を
作成しているのですが、サーバのメモリが少なくてメモリに
出力するとメモリーオーバーフローのエラーが発生します
そこでCSVファイルを一旦HDDに出力してそれをレスポンスとして
返そうと思うのですが、ダウンロードの途中に中断されたとか
ネットワークエラーが起こったときに一時ファイルがサーバに残ってしまい
いずれストレージを圧迫するのではないかと危惧しています
このようなときはどのように実装すれば良いのでしょうか?
一時ファイルのクリーニングをどうやれば良いのか教えて欲しいです
他に良いやり方をご存知でしたら教えて欲しいです
どうぞよろしくお願いいたします >>294
CSVファイルを特定のディレクトリ以下に毎回新しいファイル名で作る事にして、
新しいファイルを実際に作り始める直前にそのディレクトリ以下の古いファイルを
削除する、なんてのどう?
時間で制限すると短時間に沢山リクエストが来た時にまずいという場合は更に
ファイル数でも制限して新しいファイルが100個以上残らないようにするとかね。
あと、ファイルの内容が同じなら古いファイルのタイムスタンプを更新して新たに
作ったことにして実際に新たに作った方はすぐ削除するとかね。同じ内容の
CSVになる事が事前に与えられたパラメータからわかるのであれば最初から
作らないっていう手もある。 >>296
CSVを作成し始めた時点でテーブルにファイル名等々を保存、レスポンスを返したらそのレコードに正常終了のフラグを立てて、ファイル本体は削除
任意のタイミングでそのテーブルを舐めて、正常終了にならないまま時間が経ってるCSVはファイル削除してデータ上は失敗ステータスに更新
という実装をしたことがある。メリットとしてはどういうCSVがいつ失敗したのか把握しやすい >>287
俺が Kotlin で大幅に書き換えてやったから参考にしなさい。
無駄な処理はガバッと削除したので小さくなった。
https://paiza.io/projects/so9F6hmbk2mnHO_KKsg85Q // ドアが3つならどのドアをオープンしたかは
// 求める必要がないので省略。
これだめだろ
そんなこと言ったら変更ありなしで固定確率の結果返せばいいじゃん >>301
最初は馬鹿正直に作ったのだがオーブンするドアを求めても表示しないのなら無駄になることに気づいたんだよ。
ということは処理そのものが無駄だと。
ということで人力で超最適化。 println("[$i] You=$you, Open=$opn,${if (change) " You2=${changeDoor(you, opn)}," else ""} Ans=$ans, $wlstr")
エレガント?なコードがちょっと要件に沿うよういっただけで一瞬でエディタもバグる超スパゲッティに
てかkotlinきめえw >>307
${} を入れ子にしたからな。外にも出せるよ。Java と同じ String の連結で + も使える。 >>307
そりゃわざとキモくなるような書き方してるからだろw この夏java極めようと思っていたのですがもうオワコンなんですか…?
Androidエンジニアになりたいです そんなあなたに Kotlin
結局は Java 覚える事になりそうだけどなw kotlinってjava覚える必要ある?
結局はインスタンスやメソッドの取り扱い方を覚えるだけでしょ
java→kotlinといより
kotlin→場合によってjava調べる的な 他のOO言語の経験があるならあえてJavaやらなくてもサンプルコードくらいはなんとなく読めるだろうから
経験ないならいきなりKotlinはまともな初心者向けの書籍ないから無理 長澤さんのKotlin本はどのくらいのレベルが対象? コメント化ってどんな時に使えばいいんですか?
今やってるプロジェクトで一切コメントを置いてないせいでコードがスパゲッティから毛糸のほつれに進化しかけています。
//と/**/はどっちの方がいいのか、どのタイミングで入れたらいいか等が知りたいです メソッドやクラスにはできるだけJavaDocコメントを付けて、そのメソッドやクラスの説明を書く
そして原則として、メソッドの中にはコメントは極力書かない
説明を一言書きたくなるようなパッと見何やってるか分かりにくい部分は、コメントの代わりに別のメソッドとして切り出してメソッド名で説明する
それを徹底してればprivateメンバなんかはいちいちJavaDocコメント書かなくても問題にはならない >>318
「リーダブルコード」という、素晴らしい名著があるからそれを読んでみることをおすすめする。 クリップボードについて質問です。
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
Transferable object = clipboard.getContents(null);
String s = "Test"; // 保存するテキスト
StringSelection selection = new StringSelection(s);
clipboard.setContents(selection, null);
String str = "";
try {
str = (String)object.getTransferData(DataFlavor.stringFlavor);
} catch(UnsupportedFlavorException e){
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(str);
まずエディタか何かで人力でクリップボードに何かの文字列をコピーします。例えば"ABC"をコピーして、
このコードを走らせると
ABC
と表示されます。そしてそのままもう一度このコードを走らせると、今度は
Test
と表示されます。ABCと表示されるのは何が悪いんでしょうか? >>324
なるほど、完全に理解した
clipboard.setContents(selection, null);
これのあとに
Transferable object = clipboard.getContents(null);
これを書けばおk >>324
そのプログラムだとこうなってるよね。
1. 2行目の getContents() でエディタでコピーした "ABC" が取り出される。
2. setContents() で "Test" がクリップボードにセットされる。
3. 1で取得した object の中身を取り出して出力する。(取り出されるデータは "ABC")。
"ABC" が出力されて当然の作りになっている。
上記の3の所で "Test" を取り出したいなら 2 の直後で 1 の処理をしなければならない。 Listを複数のリストに分割したいのですがやり方がわからず教えていただきたいです
// たとえば要素の数が10のリストがあったとして
List<Integer> list = new ArrayList<>();
for (int i = 0; i < 10; i++) {
list.add(i);
}
// それを4つのリストに要素の数ができるだけ均等になるように分割したいです
List<Integer> list1 = new ArrayList<>(); // <- 要素は0,1,2
List<Integer> list2 = new ArrayList<>(); // <- 要素は3,4,5
List<Integer> list3 = new ArrayList<>(); // <- 要素は6,7
List<Integer> list4 = new ArrayList<>(); // <- 要素は8,9
どうぞよろしくお願いいたします >>327
自己解決しました、もう良いです
返信しないでください >>325
ありがとうございます。それはうまく行きました。しかしごめんなさい。どうも私が問題をちゃんと把握出来ていなかったようです。
try {
Thread.sleep(7000);
} catch (InterruptedException e1) {
// TODO 自動生成された catch ブロック
e1.printStackTrace();
}
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
Transferable object = clipboard.getContents(null);
String str = "";
try {
str = (String)object.getTransferData(DataFlavor.stringFlavor);
} catch(UnsupportedFlavorException e){
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(str);
どうもJTextField が関係しているらしいです。このプログラムにはテキストフィールドがいくつかあるのですが、
そこに"ABC"と入力し、それを選択、Ctrl+C でコピーします。
そしてこのコードを走らせ、スリープしている7秒の間に別のエディタで Test をクリップボードにコピーします。
すると出力が ABC となります。7秒の間にエディタ上でペーストするとちゃんとTestがペーストされます。
ABCをコピー、続けてTestをコピーしてからこのコードを走らせるとちゃんとTestとでます。
ABCをエディタでコピーした時はこの症状は出ません。 public static void main()って
メソッドなんですか? メソッドです。
Javaで書かれたプログラムはMainクラスのmainメソッドを実行すると決まっています。 なるほどkotlinのmain ()関数のようにエントリポイントになっているんですね
コンストラクタもメソッドですか? >>331
クラス名は Main じゃなくてもいいんだよ。 すいません教えてもらってjdkは何とか導入成功したんですが
eclipseってやつと日本語化のを導入してコードを実行しようとしたら
選択は起動できず最近の起動もありません。とエラーが出て実行できません。何度か再インストールしましたが結果変わらず。
何が原因なのでしょうか?導入で参考になるサイトあれば教えてほしいです
後JDKだけじゃjavaのコードを実行とか出来ませんよね?eclipseってやつを導入して初めて意味があるものって認識で大丈夫ですか・
そこら辺もかなり曖昧なのですが… >>336
間違ってる。JDKが入っていればあとはメモ帳でjavaのプログラムを書いて実行できる。
eclipseはあくまで超高機能なメモ帳だと思ってればいい。
で、そのeclipseなんだけど、そもそも古くて昔から使ってる人以外はもうほとんど誰も使ってない。
理由は今まさに君が直面しているように、自分の期待する動きをさせるのがとても大変だから。あと重い。
今からプログラムを始めるならIntelliJ IDEAの無料版か、Android Studio (無料)を使うことをお勧めする。
どちらも基本的には同じメーカーが作ってるほぼ同じものだけど、ただjavaを書くだけならIntelliJの方が余計なものが入ってなくていいかもしれない。 >>337
レスありがとうございます
メモ帳でもプログラムの実行って出来るんですか。テキストドキュメントですよね?
コンパイルとかも勝手にしてくれるなら一番軽くて楽そうですね
>>今からプログラムを始めるならIntelliJ IDEAの無料版か、Android Studio (無料)を使うことをお勧めする
こちらの方も特性まで教えていただきありがとうございます。調べてみます
後、C++やろうと想ってvisualstudio入れてあるんですけど、これはjavaでは使えないですよね https://gyazo.com/e3fe0cd9ac22553f62241cbe9285f1d1
手順IntelliJ IDEAの構成のここまで出来たんですが説明にある(Project name)のついたフォルダの横にある▶を押して見ましょう。
というのが見当たらず詰みました;どこにあるのでしょうか >>340
それのプロジェクト名は untitled だからそれの左横。
ていうかプロジェクト名を自分で入力しないで先に進んじゃったようだね。 >>341
おかげさまで見つかりました。ありがとうございます!
フォントもdokojavaよりかっこよくモチベーション上がりそうです
Run押したら下に結果表示されたので全て導入うまくいってそうです
本当にありがとうございます うまくできたようで良かった。
IntelliJは本当に素晴らしくて、入力補完も神がかってるから勉強にはちょうど良いと思う。 aかbかどちらか値が入ってる方を使いたく
defaultIfEmptyという便利なものを見つけたのですが
aもbもどちらも初期値というわけではないんですよね
初期値設定以外で使うのは変ですか? 言語そのものじゃない質問ですが、IDE(Android Studio とか IntelliJ IDEA)使ってても、ビルドツールって必要なんでしょうか?
もしくは有用なんでしょうか? 今まで Eclipse からしかプログラムを走らせたことがなかったのですが、昨日プログラムをエクスポートしてノートPCに持って行ったら、
A JNI error has occurred, please check your installation and try again
というエラーが出ました。色々試行錯誤しているうちに、「実行環境JREの使用」の問題らしいと分かりました。
JavaSE-9だとエラーになって、JavaSE-1.8だと大丈夫です。
他の人にプログラムを使ってもらう時とか、どうすればいいんでしょうか?
プロジェクト固有のJREの使用という項目もありますが、このあたりは何を意味してるんでしょうか? >>346
スタックトレースを見ないとエラーの原因がわからないよ
原因がわからないと解決策もわからないよ
コマンドから実行したらスタックトレースが出力されると思うから
それを教えてちょんまげ JREが9ならJDKも9
でコンパイルしなければね >>347
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.UnsupportedClassVersionError: handymanPackage/HandymanBMain has been compiled by a more recent
version of the Java Runtime (class file version 53.0), this version of the Java Runtime only recognizes class file versions up to 52.0
ノートPCがwindowsアップデートでクラッシュし、再インストールという惨事に見舞われてしまってレスが遅くなってしまいました。
JREは昨日初めてインストールしたのに、何でこんなことになるんでしょうか?最新版じゃないんでしょうか? >>349
翻訳
| handymanPackage / HandymanBMainはJava Runtime(クラスファイルバージョン53.0)
| のより新しいバージョンでコンパイルされていますが、このバージョンのJava Runtimeは
| クラスファイルバージョンを52.0までしか認識しません
バージョン53.0はJava9
バージョン52.0はJava8
Java9以上のJDKでコンパイルしたものを
Java8のJREで実行しようとしてるんじゃないかな
対応策は、実行環境にJava9を入れるか
もしくは、Java8でコンパイルするかってところ
他の人にプログラムを作ってもらう時は実行環境のバージョンと
同じかそれよりも古いバージョンでコンパイルしてもらえば良い >>350
だいたい分かりましたが、よく分からないのが1.8の次が何で9なんでしょうか?
1.9とか2なら分かるんですが、何でいきなり9になるんでしょうか? >>351
Java9からバージョンの形式が変わったんだよ
変えられた理由は
・メジャーアップデート
・マイナーアップデート
・セキュリティアップデート
を区別しやすくするため ソースコード読むときにインスタンスなのかメソッドなのかがすぐに分からないんだけど、
ソースコードを読むときのコツみたいなものってありますか? VSCode などでマウスホバーすれば、宣言が表示されるのでは? java本格入門って本を勧められたのですが読んだことある方います?感想が聞きたいです すいませんスッキリわかるjava入門をやってるのですがファイルの分割の項が
環境が本と違うので分かりません;
intelli IDEAを使ってるのですがどのようにすればいいのでしょうか? 今までずっと閉じるを使って来たので保存方法も分かりません
ググっても自動保存をオフにするとかそういう記事しか出てきません;
どこをいじればいいのでしょうか
https://gyazo.com/62228b87ec37fdce11d0b0ebfae7626d Javaはビルド周りが腐っててファイルの配置やパスの設定に対してかなりセンシティブなんだよ
そのへんで嵌るとJavaに慣れてる人でも結構厄介だから、諦めて本の通りの環境を用意したほうが結果的に時間の節約になる
今の君の経験値で取り組むべき優先度の高い問題ではないし、ましてファイルの保存方法すら類推できないレベルでは、
今目の前の問題だけ付け焼き刃で解決できたところで今後同様の問題にぶち当たったときに自分で解決できるとは思えない 多分自己解決しました
save allを押したのにPCから何も応答がないので出来てないのかと思ってました 普通に左側にProjectペインを出してファイルを作りたい場所の上で右クリックするだけでしょ。
そもそもパソコンをあまり使ったことがない? いえ、3年使ってます
ただゲームくらいでしか使ってなかったのであまり分かりません; ああ、まあそれじゃあしょうがない
とりあえず大抵のことをやっても壊れはしないから、調べたり聞いたりする前に適当にいじってみるのも大事だよ
それで勘みたいなものを覚えていくものだから スッキリ分かるjava入門の多態性の説明がよくわからないんですが
親クラス型の配列を作って派生先クラスのインスタンスを代入して配列を回して一気に似たような処理を簡単に記述する
のが多態性って認識であってますか?
もうちょっと分かりやすく説明してる所あったらお願い致します >>366
ま、配列に入れて使うとは限らないが親クラスまたはインターフェースの型でインスタンスを扱えるって事だよ。
こういうのは実装を隠したい時にも使える。 >>367
ありがとうございます
abstract,interfaceのクラス型でインスタンスを作れないから、このやり方を使って
インスタンスを扱えるようにするってことですかね?
親の所にないメソッドは使えないみたいなので利便性がよくわかりませんが・・ cat.cry
dog.cry
猫は猫のように鳴き、犬は犬のように鳴く。
親は親のように泣き、子は子のように泣く
自動的に実体に応じた、動作をする >>368
そこが最大の利点でだな
同じ親を持つ個別のクラスを比較して比較したりとか
ファイルのオープン/クローズとデータベースのオープン/クローズを使う側は同じ処理で使えるようにするとかが出来る >>370
ありがとうございます
この本自体があまり計算問題を使って解説してないのでメリットがパッとしませんが
とりあえず何となくで覚えとこうと思います >>371
それはJavaというかオブジェクト指向の特徴なんだけど、いずれもうちょっと複雑なことをするようになれば自然にメリットがわかるよ。
今はそんなもんか程度の理解でいい。 すいませんフィールドにnullなんて入れてないのにnullって表示されるんですけど
どこ直せば正常に名前が呼び出されますか?
https://ideone.com/lfTf9n
やっぱりあまり理解できてなかったかもです; >>373
これの見方がよくわからんのだけど何がnullになってるの? 自分もjava勉強中なので試しに作ってみた
これで動いたよ
違うところだけ書いてみる
public class Hero extends Caractor {
Hero(String name){
this.name = name;
}
public void attack(Caractor m){
System.out.println(this.name + "のこうげき!");
System.out.println(m.name + "に10のダメージを与えた!");
m.hp -=10;
}
}
public class Slime extends Caractor {
Slime(String name, int hp){
this.name = name;
this.hp = hp;
}
public void run(){
System.out.println(this.name+"は逃げ出した!");
}
}
あとはだいたい同じです。 あ、あとキャラクターのフィールドがprivateになってるからprotectedにしたら動いたよ
これが綺麗なコードかはわからないけどとりあえずどうでしょうか >>373
継承先のクラスで同じ名前でフィールドを定義しても別のフィールドになる
attackメソッドにSlimeのインスタンスを入れているけど
Monsterクラスのnameを見てるのでSlimeに設定したnameは表示されないでnullが表示される 子クラスで、親クラスと同じ名前のフィールドを定義したら、ダメ!
オブジェクト指向としては、明らかな間違い!
同名のメソッドは、上書き(オーバーライド)するけど、フィールドはしない for (Character c : list) { c.attack( ); }
list に、モンスターや勇者などを混ぜて入れて、
その親クラスのCharacter として、抽象化して扱えば、
if 文で、モンスターや勇者の処理を、場合分けせずにすむ
モンスターや勇者は、それぞれ実体に基づき、自動的に攻撃する。
見かけの型は親クラスだが、攻撃は子クラスのメソッドを呼ぶ
つまり、抽象化する事によって、型による分岐がなくなる!
逆に言えば、型によって分岐していたら、オブジェクト指向ではない
if モンスター型なら
if プレイヤー型なら >>379
オブジェクト指向ではポリモーフィズムが大事なんだって考えだね 時代遅れな考えだよね
最近は関数型の影響によって型による分岐が市民権を得つつある
C#もついにパターンマッチを導入して型による分岐を積極的に推奨するようになった
Javaも10年くらいしたらそうなるよ 推奨はしてない
ポリモーより型スイッチの方が書きやすい場合も存在するよね
全否定しないでそういうのもサポートしていこうよってだけ
型スイッチがポリモーを置き換えるかというと全くそんなことはなくて
せいぜいデータドリブンのアプローチで書かれた僅かな部分の記述が綺麗になる程度 >>379
のやり方では、新たにモンスターを追加しても、ソースコードを修正しなくてよい
もし型によって分岐していたら、大変。
すべての分岐箇所を修正して、テストしないといけない!
項目が追加された際の、分岐箇所の修正をなくすために、オブジェクト指向が作られた >>375
ありがとうございます。いけました
この本該当ページにHeroクラスしか書いてないから
コンパイル失敗したら手詰まりで;
attack(Caractor m){ ←ここがattack(Monster m)だったから動かなかったんですかね?
Slimeと同じ親持ってないと出来ないんですね。本はMonsterとなってたので本が間違えてるんですね >>385
その理解だと危ない
Slimeクラスフィールドの定義と使い方の問題だからスコープやらOrverrideをちゃんと理解したほうがいい
教本によくある「親は子を使えない」の典型例だぞ まぁとはいえ細かい部分の理解は後で修正は効くから先に進んでも別に良い >>377-378
フィールドはオーバーライドしないんですね。408-409ページにて普通に継承先で同じフィールドを定義してたので
いいのかなって思ってました。
同じフィールドを使いたい場合は親にあるメンバを使えばいいんですね。タメになります
ありがとうございます >>386
フィールド直したら仮引数がMonsterの元々あったコードでもいけました
SlimeとHeroが同じ親だとis-aの関係がおかしいと思ってたので助かりました
ありがとうございます
…もっかい読み直してみます^^; 文字列比較containsで正規表現は使えますか?
とあるサイトで使えるとあったので試してみましたが使えませんでした Kotlinは使えた気がするから、そのサイトはKotlinと混同してるのかもね Kotlin の場合は Regex のインスタンス渡すやつがあるからそれで使える。
Regex ではなく String のインスタンス渡した場合は Java と同じ動作。 サイトの質問で申し訳ないんですが
paizaって入力を受け付ける関数とかは使えないんですか?
int abc=new java.util.Scanner(System.in)nextInt();って打っても実行はできるんですが
入力まち画面は出ません 出力が標準出力で、入力は標準入力。
入力の所に書けば?
ファイルから読み込みたいのなら、
ファイル名の右横にある、+ を押して、入力ファイルを作る >>396
了解しました
実行の下にあるのに全然気づきませんでした(@@;)
ありがとうございます EntityクラスにDBのデータを入れて加工してDAOクラスに突っ込んでViewに投げるという処理を流れ作業としてやっているのですが、クエリで絞っていきなりDAOに入れたら早いかもと感じています。Entityクラスを省くのはjava開発的にどうなのでしょうか。
もう別の新しい概念があるのかもしれませんが DAOに突っ込むってどういう意味?ViewってDBのViewなのかMVCのViewなのかどっち?
java開発的にどうとか以前に曖昧な言葉遣いに注意せよ こちらで質問していいのか分かりませんが…
プログラミングは全く勉強したことがありません。
仕事でジェノグラム(家族図的なもの)をよく作成するので、家族歴(結婚、離婚、出生、死亡)の時間軸に合わせてその時期にどんな家族状況だったかを図示できるようなプログラミングを作ってみたいなと思ってます。
こういうものを作るのに最適なアプリケーションってどんなものなんでしょうか。
エクセルが好きで関数いじったりするのは苦になりません。
よろしくお願いします。 >>400
Excel好きなんだったらExcelでいいよ
VBAちょっと齧れば十分やりたいことはできるはず
本格的なプログラミングは本業にして金稼がない限り習得コストや手間の割に合わんよ >>400
やっぱそれってExcelのマクロでやっちゃった方が良いんじゃないかなあ。
いやもしかするとマクロも要らんかも知れないよね。グラフ出せたりするし。
Excelの事は良くわからないけど。 最近クラスとメソッドを覚えたような素人で言葉が足らずすみません
Entityクラスを作らずDAOクラスから直接DTOクラスを作ってしまうのは良くない事なのかご意見を聞きたかった次第です >>403
Javaドカタワールドで一般的にいうentityってのはDBとアプリケーションコードとの間のデータの受け渡しに使われるDTOの一種にすぎない
最終的にViewに渡すものと同じなら省略するなり好きにしたらいい
エンティティは本来ドメインモデル上の登場人物であり、ビジネスロジックで主役として振る舞うべきもので、
DAOの中でデータアクセスのためだけにEntityを使うってのは本来はおかしな話 プログラム(Java) ←→ entity ←→ DB
Rails が、migration で自動的に作るのを、手作業で作っているだけだろ >>404
DAOのEntityとドメイン駆動のEntityを混同してないですか?
javaドカの世界はオレオレ理解が星の数ほどありそうで怖いです >>405
Entityぶち込みの概念はRailsのが後じゃ [DB] -- DTO(399の会社ではentity) -- [DAO(ドメインモデルではrepository)] -- DTO(ドメインモデルではentity) -- [サービス/ユースケース/トランザクション(たぶん399の会社にはない)] -- [コントローラ] -- DTO/ViewBag -- [ビュー]
こうか? 書いてて思ったけど、一番左のDTOはDTOというよりActive Recordかなあ
そこらへんはDAOを主軸にして見るならあくまでDAOの実装の詳細だからアーキテクチャ的にはどうでもよい部分
DAOの中でSQL書いて左から2番目のDTOに直接詰めるのももちろんアリ、というかORM使わないなら普通はそうする >>409
クエリ書ける軽量ORMとかならEntityクラスなんて要らねーよという雰囲気ですかね
でも、お作法としてEntityクラス作るのもありかなと
DBのリプレースに強そうなんで つかEntityとDTOを分けない所多いんですか?
未経験で世界が狭いので興味あります DBの詳細を吸収するのは一般的にはDAOの仕事
更にドメイン寄りの論理的な型とシリアライズ用の型を区別したいんなら、
(DDDでいう)エンティティを返すリポジトリクラスがあって、
リポジトリが中でDAOを使ってDBからデータ引っ張ってきて行オブジェクトをエンティティに変換するのが今風だと思う javaを勉強中の学生です。
画像の問題が全くわからなく、空欄の答えとできればその理由を簡単にでいいので教えて頂きたいです、、
どうかよろしくお願いします。
https://i.imgur.com/TAKEWJX.jpg >>413
String.format()を駆使する >>413
「Java String 空白埋め」とかでググろう ヒントありがとうございます!
自分なりに考えた結果
String.format(‘‘%.’’+i+‘‘f’’,i)
で合ってますかね?
帰って打ち込めば分かる話なのですがw それにしても問題のための問題という感じだな。
解ける人向けのなぞなぞみたいなもんで、出題者に意味や知性を感じられない。 >>417
そんな感じ
空白の書式と数値の書式が必要になりそう Utilクラスをstaticにしない意味って何かあるのでしょうか?
今の現場の仕様がUtilのメソッドをいちいちnewしなきゃならなくて
とてもいらつくのですが… 実際formatの書式なんて覚えてる必要ないんだけどな
うろ覚えであーでもないこーでもないとやってる暇があったら、そんなことに時間使わずに即ググって欲しい >>417
引数の側のiは (double) i という具合にキャストする必要がある。
しかしそれでは完全に一致する出力にならない。0だけスペースが一つ多くなる。
もうほとんど出題ミスのような感じがしてならないのだが、更に捻ると全てが完全一致する出力を作れる。 あ、ごめん。まだ左側スペース入れるformatになってなかったか。
ま、やってる内にどういうことかわかる。 for (int i = 0; i < 4; i++) {
System.out.println(String.format("%" + ((i == 0) ? 5 : 6) + "." + i + "f", (float)i));
} こんなのソラで書けても実務ではほぼ無意味だ
この問題が本当に問題のための問題だな でも >>426 が言ってる方が自然かもね
for (int i = 0; i < 4; i++) {
System.out.println(String.format("%" + (4 - i) + "s%." + i + "f", "", (float)i));
} 出題ミスか引っかけ問題かな。
またはミスと気づいたけど引っかけ問題として丁度良いからミスではなかったことにして放置か。
しかし初心者に出すにはどうかという感じもする。実際にこんなのが必要とされることもなさそうだし。
もはやパズルだよなあ。 もう古いと言われてるデザインパターンを何度も身につけようとしては挫折
写経だけじゃ理解するのは難しいですか? >>431
写経して図を描いて
図を見ながら写経して
図を見ながらプログラム書いて
プログラムと図を相互に変換できるようになったら
理解したと言っていいと思う
イメージすること人間の計算能力 デザインパターンはもう古いんじゃ無くて今のフレームワークに織り込まれてるんじゃないの
フレームワークに合わせるとデザインパターン強制される的な スマホのSDKとか基本的にTemplate Methodよな 言語機能の進化でそもそも不要になるパターンもあるな
例えばkotlinだとbuilderパターンなんて必要ないし GoFのデザインパターンの大部分を占める、オブジェクト指向言語の機能で高階関数をエミュレートしてみた系は、Lambdaがある今では不要 初心者です。
eclipseを導入したのですが、コンソールで接続語のみ文字化けします。
ソースコードなどは問題なく、例えばSystem.out.print(a + "と" + b + ("では") + c + "の方が大きい"))と入力して実行すると「a□b□□c□方が大きい」となります。
「eclipse 文字化け」等で調べた内容は試しましたが改善しませんでした。
どなたか助けてください。 すいません、ソースコードの()忘れまくってました
System.out.print(a + ("と") + b + ("では") + c + ("の方が大きい")) 等と入力した時です >>438
eclipseのフォルダにeclipse.iniというファイルがあるので
その中の
-vmargs
の下に↓これを追加でおk
-Dfile.encoding=utf-8 >>440
それも試しましたが改善しませんでした。
何回か立ち上げ直すと文字化けしない時もありましたが、少しするとまた文字化けします。
>>441
()めんどくさいなと思ってました・・・
ありがとうございます。 コンソールで、文字コードの設定は出来ないの?
まあ日本語は、UTF-8, shift-jis のどちらかだろうけど、
プログラミングはすべて、BOMなしUTF-8(UTF-8N)に統一すればよい
その代わり、Windows のExplorer では、文字列検索できなくなるので、
WSL・Ubuntu を入れて、Linux 側からgrep する
shift-jis とか、文字コードの自動判定などは、使わない。
自動判定は間違う場合もあるから、面倒 出た、今必要のない余計な情報を付け加えまくって初心者を混乱される大先生 VSCode でも、文字コードを自動判定にしていると、
判定を間違えて、文字化けする >>452
しかし、NTFSやFAT32は UTF-16LE だったりするし、いわゆるシステムコール(win32api)には UTF16用とShift-JIS 用の両方が準備されている >>438
の件、1日経ったら改善していました。
失礼しました。 たぶん1日経ったことではなく再起動したことが大きいと思う 色々試しているうちに何が効いたのかわからない状態かもな 寝ている時に猫がキーボードの上を歩き更にマウスにじゃれたりして、それによって偶然実行された何かによって
いや、なんでもない。忘れてくれ。 一通り試した後、何回か再起動して直らなかったんですよね
それから勉強する分には支障ないしいいや、と思って放置してたら直ってた
システムの環境変数?だかも何回か設定し直さないと反映されなかったし、パソコンが原因かも 現在java入門書を読み終える段階です。
あるまとめでjava入門書の後にRudyやPython等の入門書を読んでからjava実践編を読むのがおすすめ、というのを見たのですが
どういった意図があるのでしょうか?
また、皆さん個人の意見として上記のような学習方法はおすすめできますか? >>462
たぶん早いうちに色々なスタイルの言語に触れて、そしてその中から自分の好きなものを選べという意図があると思う。
ただし俺は反対。javaの入門書を読んだならそのままjavaをもう少し深く理解したほうが良いと思う。
その後で他の言語を見たほうがjavaとの違いなどが理解できるようになる。 >>462
一つの言語だけだと「そういうもんか」としか思えないだろうけど、
他の言語を知ることで表面的な仕様の裏にある意図や思想が見えてくるようになる
そして、言語の各機能の意図や思想がわかればその正しい使い方がわかる
個人的には賛成だけど、今更Rubyはやめとけ >>462
人にもよると思うが、混乱しそうな感じがするのであまりおすすめしない。
ある程度 Java が使えるようになってから他の言語に取り組んだ方が良いのではないか? ソフトウェアエンジニアになりたいのかJava土方になりたいのかによるかな
後者なら変な知恵がついてる奴より余計な疑問を持たずに周りのやり方に合わせてコピペできる奴の方が使いやすい
Javaのプロの人は後者になるための教育を受けてきてる(or後者を生産・使役する)人が多いからそういう人の話は注意して聞いたほうがいい まずこの本で、オブジェクト指向を学ぶ
スッキリわかる Java入門 第2版、2014
その後、この2冊をこの順に読む
たのしいRuby 第5版、2016
みんなのPython 第4版、2017
みんなのは、数学系とか仕事で必要なら読めば?
Ruby は、テキスト処理・コマンド・1-liner とかできるから、Linux では重宝。
PowerShell・シェルスクリプト・awk・sed・perl の代わりになる
Rubyをやっておけば、PowerShell, JavaScript, jQuery, Kotlin なども良くわかる。
メソッドチェーン・関数型の書き方だから。
Rubyで、プログラミングの基礎体力が向上する!
早くにやって損はない。
後で、別の言語の勉強がはかどる
Pythonは、その辺と文法が違うから、手軽にはいかない 自分で触ったことがあるならPythonは明らかにJavaをリスペクトしてることがわかるんだけどね
Rubyやると>>468みたいな基地外になるよ 1つだけ言えるのは、>>468は完全に無視していい 本当に0からのスタートなので、まずはJavaをしっかり学ぶことにします。 >>469
自分で触ったことがあるならPythonは明らかにオブジェクト指向に関しては違うことがわかるんだけどね Eclipseで時計を作りましたが表示がおかしいのでアドバイスお願いします
小さなウィンドウに数字で時刻が表示されるだけの簡単なものです
モニタを2枚使っているのですが、
メインの方ではウィンドウの中に表示されるはずの時刻が一切表示されません
なぜかサブの方にドラッグして持っていくと表示されます
Eclipseが起動してる状態だとメインのほうでも表示されます
repaintメソッドを使って1秒ごとに表示させているのですが
paintメソッドの中身を軽くしないとダメとかありますか?
Swing導入しています
これだけでは伝わらないと思いますがエスパーの方いらっしゃったらよろしくお願いします 完全な当てずっぽうだけど、えくりぷすを起動している時だけ設定される環境変数が影響してるとか? >>474
eclipse閉じていてもサブモニタのほうだと表示されるのがよくわからないんですよね
同じ症状がでる範囲内でいろいろそぎ落としてみました↓ import java.awt.Graphics;
import javax.swing.JFrame;
public class myClock extends JFrame implements Runnable {
static myClock cl = new myClock();
static Thread thrd = new Thread(cl);
public static void main(String[] args) {
cl.setVisible(true);
thrd.start();
}
public void run() {
while(true) {
repaint();
try {
thrd.sleep(1000);
} catch(InterruptedException e) {
}
}
}
public void paint(Graphics g) {
super.paint(g);
g.drawString("test", 80, 40);
}
myClock() {
setSize(240, 70);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
} ちなみにこのサイトの
http://yay.cla.kobe-u.ac.jp/~jm/edu/2008/JE3/20080121-java-gui5.html
上のほうにある 「デジタルクロック(MyDigitalClock.java)」
のコードをコピペして試してみたところ表示されない問題は起きませんでした try {
thrd.sleep(1000);
} catch(InterruptedException e) {
}
例外が起こっても、catch が空文だから、例外を処理していない。
これは例外の握りつぶしと言って、やってはいけない
アプリを終了させるなど、何かエラー処理を書かないといけない
何も書かないと、エラーが起こっているのに、
アプリが存在し続ける、または動き続ける レスありがとうございます
>>478
使い方間違ってるかもしれませんがなんとかそれで行けました
この辺を自分で解決出来ないとだめですね
実はぐぐりまくってる時にpaintComponentは怪しいと思って試して見たんですがあと一歩及んでなかったです
>>479
修正しました
すっきり入門読み終わった段階で作った初めてのプログラムですが
まだまだ知識足りてませんね
import文抜きで修正済貼っておきます
↓ public class myClock extends JFrame implements Runnable {
static myClock cl = new myClock();
static Thread thrd = new Thread(cl);
public static void main(String[] args) {
cl.setVisible(true);
thrd.start();
}
public void run() {
while(true) {
repaint();
try {
thrd.sleep(1000);
} catch(InterruptedException e) {
e.printStackTrace();
}
}
}
class GPanel extends JPanel {
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawString("test", 80, 40);
}
}
myClock() {
setSize(240, 70);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
add(new GPanel(), BorderLayout.CENTER);
}
} GPanelクラスが中にはいっちゃってました
コンストラクタの下、外に出しておきました しゅみましぇん初心者なんですが開発環境でエクリプスってのインストールしたらJDKやJREってのは不要なんですか?教えてエロい人 必要
今月で無償のJDKはサポート終了するからオラクルに金払ってJDK11買ってね ふぇ!?無料と有料両方あるんじゃないんでしゅか?
つーかエクリプスダウンロードしゅごい時間かかるんでしゅね そういやこれまでeclipseで必要か否かに関わらず無条件にJDKインストールしてたからeclipseで必要かどうかなんて考えた事もなかったな。 この前プログラミングスクールの中の人になんでいまだにエクリプスなんて使わせるのか聞いたんだけど、
単純に一線についていけなくなったロートルを講師として安く雇うから、教える側がエクリプスしか使えないらしい >>481
すべての行に、print 1, print 2 ... という感じで、print 文を入れて、
どこまで実行されているのか、確かめる
それか、デバッガーで1行ずつ実行して確かめる
まず、ここまで実行されて、ここは実行されていないという、地点を探す C#ならVisualStudio1択ですけどjavaはEclipse1択では無いんですか? >>489
JetBrain の IntelliJ IDEA ってのもあるよ。 ヒープのサイズとかって、起動用のシェルスクリプトとかでコマンドラインに並べてますが、
Javaのソース中で設定できませんか
Javaソース以外に、起動用のシェルスクリプトも管理対象資材にする必要があるのを
なんとかならないかなと思ってます >>489
Eclipseはもう色々限界でどんどんシュリンクしてる。
今はIntelliJ使う人が多いんじゃないかな。
Web開発しないなら無料版で大丈夫だし、仮に有料版買ったとしても糞みたいなプラグインの依存関係管理とかが消えるだけでも十分価値あるし。 Javaドカはeclipseだよ
膨大な手順書の更新とかライセンス契約とか申請とか面倒臭すぎるからな
どうせコピペ仕事しかしないくせにPGの好みなんかどうでもいい b = a++;
b = ++a;
の違いのような問題がbronzeでの出題頻度が高いということなんですけど、実際こういう書き方はよく使われるんでしょうか。
どうもややこしいので、もっと分かりやすく書けないものかと思うんですが >>495
俺がレビュワーならPGかそんな糞コード書いてきやがったら書き直させる >>495
使わない。何故ならややこしくてバグの元になるから。 やはりそうなんですね
わざわざ条件式のなかで評価をさせたりするのも引っかけ問題的な狙いなんでしょうか…
まあ書かれてるのを読み取る訓練にはなるんでしょうかね 引っ掻けというか、使わなくても読んでわかる必要はあるからなあ。 さすがにその程度でややこしいってのは問題あると思うぞ ま、初心者には難解に見えるのだろう。
やがてわかるのだが使いたくないものになる。 Ruby では、++, -- 演算子はない。
前置・後置で、意味が違うから、ややこしい
自己代入だけ
a += 1
a -= 1 難しいとは思わんけど、>>495みたいなコードかいてたら直せって言うな、俺も for (i=0; i<10; i+=1){}
みたいに書くんかな >>505
それは ++ で良いのでは?
他の変数に代入もしてないし、ポインタで括弧のありなしで違う動きになるわけでもないし。 すまん。ここJavaスレだったね。ポインタ計算はないね。 >>495
そういう使い方はしないけど、引数では使うこともある。
たとえば、JDBCとか。 98....77...120...20
ある問題がわからないのですが
上の文字列のピリオドを
削除して
残った。
98 77 120 20を
それぞれ100以下かどうか調べる方法
ヒントでもいいので下さい。
m(._.)m ありがとうございます
問題はまだ先がありますが
勢いで行けそうです。 98....77...120...20
まず、連続するドットを、1つのドットに変換する。
98.77.120.20
ドットで、split KotlinのString.splitは引数Stringを受け付けないのか。
Javaの方はPatternを受け付けないし。
どっちもオーバーロードで済む話だと思うのに。
無駄にメソッドの数を増やしたくないとかあるのかな。 Tomcatにちょっと毛が生えたのがEJBなんだろうな。 Spring FrameWorkとEJB使ったらどんなイメージなんだ? >>515
KotlinのString#split()は引数がStringのやつとRegexのやつがあって、ただの文字列の一致で分割したい場合はStringのやつを使い正規表現のパターンとの一致で分割したい場合はRegexの方を使う。 Charのやつもあった。
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.text/split.html
しかしJavaのやつを拡張してあって引数が多いのだがデフォルト値がセットされているので呼び出し時の記述に全ての引数は必要ない。
今回上のソースで使用したRegexを受け付けるsplitももう一つlimitが引数として存在しているがデフォルトのままで良いので呼び出す所では省略している。 元ファイルをgzip形式で圧縮したファイルを、更にzipで複数個アーカイブしたファイルを扱ってます
今はzipファイルを全て展開→展開された圧縮ファイルを一つずつgzipで伸長、として処理してるのですが
扱いづらいので改良したいです
zipファイルの全ファイルの内容をbyte[][]に入れるメソッドとか、gzip+zipなアーカイブを
展開してリストにいれてくれるメソッドとか、ありませんか? そんなもんシェルで書いたら一瞬で終わるからな
いちいち手間かけてjavaで書く必要性がまずない LocalDateTimeクラス使ってAPIリファレンスの読み方学んでるんだけど、5ヶ月後をint型で出すには
LocalDateTime.now();で現在月時刻を取得
.getMonth();でMonth型に変換
.plus(5).getValue();でInt型に変換
LocalDateTime.of();で代入
って手順しかないですよね?
getMonthValue() + 5では12月から1月に以降してくれなくて驚き桃の木でした。 >>524
LocalDateTime.now().plusMonths(5).getMonth().getValue() https://ideone.com/T6k33r
コレで普通に5か月後になる
LocalDateTime local_date_time_5 = LocalDateTime.now(ZoneId.of("Asia/Tokyo")).plusMonths(5); >>526
そんな簡単にできたのね…
というか上の方法だと年が変わってくれないか。
ありがとうございます 参照型のキャスト変換とかのあたりめんどくさい……
頭がこんがらがる ZipInputStreamでzipファイルを展開した場合等、複数のファイルを扱う際のclose()の仕方についてどうするとよいか教えてください。
以下の様なソースを作ってます。zipファイルの内容物を展開していくものです。
ZipInputStream zis = null;
FileOutputStream fos = null;
try {
zis = new ZipInputStream(new FileInputStream(zipFileName)); // <-
for (ZipEntry entry = zis.getNextEntry(); entry != null; entry = zis.getNextEntry()){
extFileName = entry.getName();
fos = new FileOutputStream(extFileName); // <-
while ((len = zis.read(zbuff)) != -1){
fos.write(zbuff, 0, len);
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
zis.close();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
このようにソース中で複数のファイルへアクセスする場合、そのclose()はfinally句中でまとめてcloseする書き方でよいのでしょうか。
それとも、上記例でのfosをnewする時点でfos用のtry句を設け、fosのExceptionはそちらで処理すべきでしょうか。
fosのストリーム作成時にIOExceptionが発生したとき、finally句内のfos.close()で更に例外が発生しそうですが
それは仕方ないとすべきか、それともファイルごとにIOExceptionを処理するべきかを知りたいです。 一般論だけど俺だったらファイルごとのループ内でtryブロック書くかな。
その方がエラーが起きた時の後始末(例えばエラーが起きたファイルのリストを表示するとか)がやりやすいし、
finallyの中にさらにtryを書くとコードの見通しが悪いから。
まあ要件次第ではある。 531と同意見
あと try-with-resourcesでググると幸せになれるぞ
open/close理解したいならゴメンだが >>531
>>532
意見ありがとうございます
個別にtryする方向で見直そうと思います
try-with-resourceは良さそうですが、tryするタイミングが違うので、どう使えるかな?と思いつつですが、こちらも調べて考えます すいません、初歩的な質問なんですが
自分の期待では下のコードで
ああああ
あああ
ああ
あ
となるつもりなんですが
どうして
ああああ
ああああ
ああああ
ああああ
ってなってちゃうんでしょうか?
教えて下さい。
for( int mb = 0 ; mb < 5 ; mb++){
for ( int mc = 1 ; mc < 5 ; mc++){
System.out.print("あ");
}
System.out.println("")
};
} 訂正です。
for( int mb = 0 ; mb < 5 ; mb++){
for ( int mc = 1 ; mc < 5 ; mc++){
System.out.print("あ");
}
System.out.println("")
} >>535
毎回mcが1〜4まで繰り返すから
ヒントは
mc = 1なら「ああああ」が4回になる
mc = 2なら「あああ」が4回になる そうか。mc++があるから
mcが1足されてると思ってましたが
毎回、mc=0になってるんですね。
ありがとうございます。 >>534
内側のループは毎回ループする回数が変わる必要があるよな。
最初は4回、2回目はは3回、という具合にループ回数が減っていく必要がある。
ところが今のそのプログラムだと毎回必ず4回ループになる。
これをなんとかして最初は4回、次は3回と言う具合に変化させるようにする。
もうなんとなくわかると思うが、例えば内側のループのforの条件部分を mc < 5 ではなく mc < (5 - mb) にするとできる。
他の方法でもできるが、とにかくループ回数が同じように減りさえすれば良い。 ありがとうございます!
なんとなく見えてきました
がんばってみます! うまくいきました
ありがとうございました!
センスがあったらアドバイスなくても
自分で気がつくんだろうな・・・・ 7以降なら、zip扱う時はnio.FileSystem使えばラク。
6以前なら、apacheからソースとってきてそれパクれば良いw ファイルの内容を読み、byte[]のListで返すメソッドcreateFListを作ったのですが、
戻ってきたリストの中身を順次見ていくと、最後にリストに入れたファイルBの内容しか表示されません。
FileInputStreamで得た結果ではなく、ただのbyte[]の配列をaddすると、期待通り順次内容を参照できてます。
ファイルの内容をListに入れる方法を教えてください。
public static void main(String[] args) {
List<byte[]> fList = new ArrayList<byte[]>();
fList = createFList();
for (Iterator<byte[]> iterator = fList.iterator(); iterator.hasNext();){
byte[] bw = iterator.next();
System.out.printf("%c%c%c\n", bw[0], bw[1], bw[2]); // /ファイルBの先頭3文字が2回表示される
}
}
private static List<byte[]> createFList(){
List<byte[]> fList = new ArrayList<byte[]>();
FileInputStream fis = null;
byte[] fbyte = new byte[1024];
try {
fis = new FileInputStream("ファイルA");
fis.read(fbyte);
fList.add(fbyte); // ファイルAの内容をリストに追加
fis.close();
fis = new FileInputStream("ファイルB");
fis.read(fbyte);
fList.add(fbyte); // ファイルBの内容をリストに追加
fis.close();
} catch (Exception e){
e.printStackTrace();
}
return fList;
} 全部間違ってる
悪いけどモノ作るレベルじゃないからまずはもうちょっと我慢して入門書を読み進めなさい >>542
fbyte は同じやつ使い回してるからだよ。ファイルごとにnewして作らないと同じ所に上書きされてしまうのでダメ。
それとmain()の最初の new ArrayList<byte[]>() は無駄だ。なぜならその直後に fList = createFList() をしていて元の fList への参照は捨てられてしまうからだ。 List Map覚えたての雑魚です
"あ"〜"お"、"か"〜"こ"...を追加した別々のArrayList
"あ行"〜"ん行"を追加したArrayList
を作る
HashMapで関連付ける
あ行キーを指定したら"あ"〜"お"が取得される、というプログラム組もうとしたんだけど、
List<String> aiueo = new ArrayList<>();
List<String> kaiueo = new ArrayList<>();
List<String> lineA_N = new ArrayList<>();
Map<List, List> map = new HashMap<>();
aiueo.add("あ"); ... aiueo.add("お");
kaiueo.add("か"); ... kaiueo.add("こ");
lineA_N.add("あ行"); ... lineA_N.add ("ん行");
map.put(lineA_N.subList(0, 1), aiueo);
map.put(lineA_N.subList(1, 2), kaiueo);
のようにsubList(i, i)を使って関連付ける以外の方法が浮かばなかったのですが、もっと綺麗な方法があったりしますか? コピるより、別変数にするか再初期化する方がええやろ。 >>546
>>551
String型でまとめる手もあるのですね
ただ、後で追加していきたい、という場合はListにした方が扱いやすいですよね? おしえて下さい
String line ="1 2 3 4 g10 6 7";
String[] list = line.split(" |g10");
スペースとg10でlineを分割して配列に入れて
1 2 3 4 6 7
にしたいのですが
1 2 3 4 6 7
みたいに
4と6の間に空白の要素が入ってしまいます。
どうすれば
1 2 3 4 6 7
に出来るか教えて下さい。 すいません訂正です
String line ="1 2 3 4 g10 6 7";
String[] list = line.split(" |g10");
スペースとg10でlineを分割して配列に入れて
1 2 3 4 6 7
にしたいのですが
1 2 3 4 空白要素 6 7
みたいに
4と6の間に空白の要素が入ってしまいます。
どうすれば
1 2 3 4 6 7
に出来るか教えて下さい。 >>552
マップのキーは不変にするのがセオリーだよ
マップに存在するキーを変えちゃうとハッシュ値とかイコールの結果が
変わっちゃうからマップの動作は保証されないっす
キーをコレクションにする必要があるケースってどんなケース? >>554
できた!
String[] list = line.split(" g10 | "); >>556
ありがとうございます!
答えを聞けば
あーそういう事か・・・
て感じですね、 >>555
ほーそうなんですね、勉強になりました
例えばパッケージとクラス、クラスとコンストラクタ、クラスとメソッドでMap作るとしたら、それぞれをListでまとめた方が管理しやすそうだなぁと。 >>558
パッケージとクラスは
1つのパッケージに複数のクラスが存在するっって
関係だからキーをリストにしたい理由がよくわからない
こういうキーのリストが欲しいわけじゃなく?
https://paiza.io/projects/XAUg69Mv_3KueQ9s626nQA?language=java >>559
パッケージをListにする必要はないと思いますが、
パッケージjava.utilとクラス一覧
クラスjava.util.Dateとメソッド一覧
…書いてたら確かにキーはListにする必要なかった。
ありがとうございます。 >>554
こんなのでもできる。これの場合は空白は1文字以上なら何文字でも良い。
String[] list = line.split("\\s+(g10\\s+)?");
ま、正規表現のパターンをどうするかの問題だな。 すっきりシリーズ実践編7章の練習問題なのですが、突然showMemory();というのが出てきて入力してもエラーになります。
ググっても出てこないのですが、これはいったいなんですか? >>563
ググってだめなら
なぜハゲらないんだ? >>563
なんですかと言われてもその本のどこかに書いてあると思う >>521
Linux でのやり方
zip形式の、archive ファイルを解凍する
unzip archive.zip
gunzipコマンドは、gzip形式とcompress形式の、圧縮ファイルを解凍する。
-r で、そのディレクトリ内の、すべての圧縮ファイルを解凍する
gunzip -r ディレクトリ名 >>563
意味のわからない練習問題なんか、無視すれば?
時間の無駄 クラス分割せず変数に代入してってやつしかできない
複数クラスに分けて引数渡してってやつのやり方がわからないよママン
引数がない場合は◯◯を表示するプログラムを作りなさいとかいう練習問題を出されてるんですが
意味がよくわかりません
引数なかったらコンパイルできないじゃないですか よくわかんないけどsetうんたらとかgetうんたらを使えばいいの? >>570
何言ってるのかわかんないから問題全文転載して ◯◯日後の日付と曜日を表示しましょう
引数に◯◯日後の◯◯を設定その日付y/M/dと曜日を表示
100日後なら100を受け渡し?
引数がない場合はシステム日付を出してくださいっての
俺もよくわかってない
int型の変数Xに100を代入して
100日後は2019/01/11/金です
と表示するだけなら
みたいなやり方でクラスが1個しかないようなプログラムなら本を参照してやっとこさ
できたんだけど
引数のことが全然わからないので困ってます 引数ってルールがややこしくてよくわからないのでmainメソッドで用意した変数でやっちゃってます mainから 引数(50) を渡して50日後の日付を出すのは出来たんですけど
引数がない場合っていう問題の意味がよくわかんなくて
渡す引数のカッコの中になにもなかったらエラーになって動かないじゃないすか >>573
その引数って実行時のコマンドラインで渡す引数のこと?
もしそうなら main() に渡される String の配列だよ。 SwingのJTreeで表示される内容をソートしたいのですが、一般的な方法はあるのでしょうか?
ユーザーがデータを登録してJTreeに表示されるようにするのですが、今の知識で出来るのが
登録されるデータをリストにして、登録を行う際にリスト自体をソート→JTree再生成
なんですが、
JTree自体を簡単にソートする機能などはありますか? switch文のcase部分で正規表現は使えない感じですかね たとえあっても結局は if で一つづつ調べていくのと同じコードに展開されるだけだろうから見た目が分かりやすくなるという以上の意味はないと思う。 >>584
正規表現リテラルが言語に組み込まれているなら、コンパイラが頑張れば
1パスで全てのcaseの正規表現をテストするステートマシンを生成することは普通に可能でしょ 数値型とか文字列型だと排他性が保証されてる、
例えばその数値が0であれば、その数値は0以外のあらゆる数字ではない事は自明なわけだけど、
正規表現だと、ある正規表現にマッチする文字列が
他の正規表現にマッチしない事は必ずしも自明ではないから switch とは馴染まないんじゃないかね? そう。上から順番にマッチするかを調べて行ってマッチした所から実行するというコードにしかできないので if で書いたのとほぼ同じにしかできない。
違いはbreakがなければ下に抜けるところぐらいかな。 javaってクロスプラットフォームだからどのosでも実行できる!!
って言うけど他の言語も実行できるよね?
どこが違うの? コンパイルでできるファイルが各OS専用か、そうじゃないかみたいな感じじゃなかったっけ それ20年前の売り文句だからな
当時としては多分プラットフォーム間の互換性で抜きん出てたんじゃないの、知らんけど >>590
他のは各OS用に再ビルドが要る
最近はC#もいける場合が多いが
バイナリ互換でGUIまでできるのは未だにJavaだけ 仮想マシン上で動くからコンパイルしてバイナリを作ればそのバイナリを他のマシンの仮想マシン上で同じように動かせるということ。
ただし現実はOS毎の仮想マシンに違うバグがあったりして中々うまくいかなかったりする。
それとプログラム作る側も気を付けてないとうまく行かない事がある。例えばファイルのディレクトリの区切り文字がUNIX系OSとWindowsでは違うとかね。
そういう違いを考慮して作れるようにはなっているが考慮しないプログラムも作れるようになっている。 そもそもpythonだのRubyだのは各OSごとにコンパイルという概念がないから、
そこらへんが当たり前になった今ではいまいちピンとこないのも無理はない 同じjavaでもバイトコードコンパイルしたバージョンが違うと呼び出し失敗するとかな >>594
それは間違い
JavaはJREが正式に廃止されたから、今月からはクライアントアプリについては
各プラットフォームに向けて個別にランタイムを同梱したパッケージをビルドする必要がある >>596
内部的には似たようなもんだよな。Perlも実行時に素早く中間コードにコンパイルしてから実行してるし。 あー。あの問題解くやつか。そういやこの頃やってなくてすっかり忘れてたが今見たら俺もBだった。
トロフィー3つだって。 ほんの数日前にJavaの勉強を始めたものです
自宅PCでも環境を整えようとJDK11とかいうものを入れてからEclipseをインストールしたのですが動きません
上のレスを少し読んだところJREが廃止されたと聞きました(たしかに本の解説と違ってJDKインストール時にJRE云々がありませんでした)
学校もEclipseなので使えないと本当に困るのですが私はどうすればよいのでしょうか? >>603
本に書いてあるのか学校と同じバージョンでやればいい >>604
ありがとうございます
学校は8だったのでとりあえず11アンインストールしてそのようにしたらなんとかなりました(アンインストールもレジストリのあれこれですぐには出来なくて苦労しましたが)
ググったら結構深刻な問題なんですね
とりあえず今はどうにかなりましたが今後が心配です Java8入れたなら今後重大な脆弱性が見つかってもパッチが提供されない可能性があるから、
今や存在そのものがセキュリティホールであるJavaアプレットは必ず無効にしておくこと
あと今月からは開発以外の用途で使ったら(Java製の5chブラウザとか)ライセンス違反だから注意ね あー。サウジの件は経済的にも影響があるからWBSでも報道することになったか。 ごめん。誤爆。実況に書いてるつもりでここに書いちゃった。w Javaのデザインパターンの解説なんか腐るほどあるのによりによってなぜこんなバカっぽいのをチョイスしたのか
本人乙? デザパタどころか継承も使ってないうちのシステム
共通化もなく同じコードを数百のソースにベタ書きしてるんだけど
目眩がするわ… よくわかってないけど
転職の面接で継承じゃなく委譲だ! と力説しまくれば受かりますか?
みんなあまりできる人いなそうなら面接官にもつっこまれないかな。 理解してない面接官のプライドもあるから
よし、君は合格!となることを期待して Java固有じゃないかもですが質問させて下さい
(x==1|x==3|x==100)
みたいに左辺が同じ論理式って簡略化して表記する方法ありますか? 使えない奴が入る率が高過ぎたら、そいつの責任になるから、流石にそれなりに勉強してると思うぞ。。。
少なくとも中小は人事なんて無いから、開発責任者とかが面接官する。
大企業も1人くらい分かる奴を面接官に入れるだろ。
ろくな面接官がいないのは派遣会社くらいじゃ無いか?
百歩譲って入れたとして、使い物にならなかったら陰湿なイジメが待ってるぞ。(経験者談) >>615
レベルの低い現場で継承使ってると最悪だぞ(俺はレベルに関わらず全ての実装継承はクソだと思ってるが)
全部ベタ書きの方が遥かにマシ >>619
こういう書き方なら時々やる
List.of(1, 3, 10).contains(x)
Stream.of(1, 3, 100).anyMatch(i -> i == x) >>622
なるほど、配列を自分で定義したりするよりはスマートな感じですね
有り難うございます >>616
>継承じゃなく委譲
最近、この問題はコンストラクタの記述能力に依存することがわかってきました
継承を使う場合、Java のコンストラクタで書ける内容が C++ のコンストラクタでは書けない、ならばおしなべて委譲にするしかない、と >>619
swith使えばいいのでは?
swithはbreakさせなければ下に抜けるからな。
switch (x) {
case 1:
case 3:
case 10:
System.out.println(x);
}
なんていう風に書いとくとxが 1, 3, 10 の時だけ出力するよ。 >>620
大手ユー子に転職したけど面接のときに技術わかるやつ一人もいなかったぞ
現場離れた部長と人事だけ
Javaほとんど出来ないけどあっさり採用されてしまったわ
独立中小の方が職人多かったよ >>625
冗長になりそうでswitchは敬遠してましたが意外と視読性良さそうですね
有り難うございます bronze取ったら現場探したほうがええんか?
未熟さで迷惑かけて対人ストレスとか抱えるくらいならsilverくらい取ってからにしようかと思うんだけど
いやまぁ資格と現場で使えるかが別物ってのはとりあえず置いといてよ bronzeは「わたしはjavaができません」と申告してるようなもんだから
書かないほうがよいのでは?w >>626
現場離れた部長が技術分かる奴なんじゃないの?
別に特定の言語を知らなくても何か一つ言語使えてれば、他の言語の文法覚えるだけで即戦力(扱い)だし。
本当に未経験でも結果的に使える奴になれば良いけどね。 abcdeの末尾がeならokと出力したいのですが
↓では期待通りにならないのですが
どうしたら上手くいくか教えて下さい。
String word= "abcde";
if(word.matches("e$"))System.out.println("ok"); これだと動くから、なんかはしょりすぎてるんでは?
String word = "abcde";
if (Pattern.compile("e$").matcher(word).find())
System.out.println("ok"); ありがとうございます
修正して
if(word.matches(".+e$"))System.out.println("ok");
で期待通りになったんですが、
これでもいいのかな。 Ruby でやったけど、文字列が、"e" だけの場合に「.+ .*」で違いがある
"e".match /.+e$/
#=> nil
"e".match /.*e$/
#=> "e" >>635
*は直前の文字が0文字以上で+は直前の文字が1文字以上なのでそうなって当然だと思う。 式の評価順について教えてください
下記のプログラムで
カッコが先に処理されて
DECBAと出力されると予想したのですが
実際はABCDEと出力されました
これの仕様が書かれたドキュメントを教えてください
public static void main(String[] args) {
int[] a = new int[1];
a[getValue("A")] = getValue("B") + (getValue("C") + (getValue("D") + getValue("E")));
}
static int getValue(String s) {
System.out.println(s);
return 0;
} >a[getValue("A")] = getValue("B") + (getValue("C") + (getValue("D") + getValue("E")));
(getValue("C") + (getValue("D") + getValue("E")));
これは、"C" + "D" + "E" → "CDE"
getValue("B") + "CDE" → "BCDE"
+ 演算子は単に、文字列の連結だろ >>639
それのどこに書いてあるのか教えて欲しいのです >>640
文字列は表示してるだけで戻り値はintですよ >>641
英語の方ならExpressions、Evaluation Order、
日本語の方なら式、評価順序のあたりを読めばいいよ。 ああ、文の評価順序を確かめたかったのか
たぶん左から評価して、その値を、( )の優先順位で足していくのだろう
a[0] = 0 + (0 + (0 + 0))
a[0] = 0 + (0 + 0)
a[0] = 0 + 0
a[0] = 0
これは、知っていないとマズイ。
漏れも、知らなかったけど >>645
元の質問は括弧の中から計算していきそうなのにそうではなかったので仕様が知りたかったということだよ。 >>631
それ実際に実行されるのはこれだ。
java.util.regex.Pattern.compile("e$").matcher(word).matches()
最後の matches() は java.util.regex.Matcher クラスのメソッドだ。
ドキュメントには「領域全体をこのパターンとマッチします。」と書いてある。
全体とだ。つまりパターンには前後に隠された ^$ が最初から入っているような状態になる。
なので例えば word が "e" ならマッチするが e の前後に一文字でも何かあればマッチしない。
だから ".*e$" だとマッチする。(というか最後の $ は不要)
grep コマンドへ与えるパターンみたいにやりたい場合は Matcher クラスのインスタンスで find() したりするしかない。 これでもOKかな。
if (word.endsWith("e")) >>649
正規表現不要ならそっちの方が分かりやすいな。 >>638
Ruby で以下を実行したら、ABCDE の順番になった
ary = [ ]
def getValue ( str )
puts str; 0
end
ary[ getValue("A") ] = getValue("B") + ( getValue("C") + ( getValue("D") + getValue("E") ) ); ()は決して先に計算するという意味ではなく、結合の優先順位を変えるんだよ
a = (b + c) + f(x) は、=, +についてもそれぞれを引数2つの関数とみると
=(a, +(+(b, c), f(x))
というツリー構造になる
これをどういう順序で評価するかはいくつかやり方があるが、
Javaや糞Ruby糞を含む多くの言語では正格評価と呼ばれる方式が採用されており、これは外側の関数から内側の順に式を評価する
引数リスト中での評価順序は言語によって様々だが、Javaの場合は原則的に左から右の順に評価する public class test {
static int n = 2;
public static void main(String[] args) {
System.out.println(getValue("A") * (getValue("B") + getValue("C")));
}
private static int getValue(String s) {
System.out.println(s);
n++;
System.out.println(n);
return n;
}
}
A
3
B
4
C
5
27
かっこの中が先に実行されていたら、5 * (3 + 4) = 35 >>654
メソッドを呼んで値を取り出す順序とその後の計算順序が違うってことかな? paiza, codepad は、ログイン無しで書ける
評価順序・結合規則は、異なる概念
「式1 演算子 式2」がある時に、式内に何かの状態を変える副作用があるとか、
変数を共有していたりすると超危険!
バグる・勘違いする javaが有料になるのは本当ですか?
一体何が始まるんです? 四季に例えるなら今月からJavaワールドは秋に入った
オラクルにとっては実りの秋、つまり、いよいよ満を持して収穫の時期だ
成長は止まり、次第に終わりに近づいていく まじ話、どうしたらいいのですか?
8月からJavaに絞ってプログラミング始めたけど
Javaという選択肢は間違ってたのかな。 Javaは犠牲になったのだ…
ORACLEの買収から続く因縁…
その犠牲にな 標準入力
0
1
で
sc.nextとかsc.nextIntとかで
0を読み込んで
また、読み込んだら
1になるけど
読み込んでも次の文字に移動しないで
0のまま読み込みできるような
方法ってありませんか? プログラミング学習において一番やっちゃいけないこと
それはただやみくもに学習を続ける事 歴史年表をデータ化して
ランダム4択クイズみたいの作ってたなあ
当時はDBなんて知らないから
ソースにベタ書きだが >>677
スッキリJavaの入門終わったくらいなんだけど、そこからだとどういう知識付けていったら作れるかな
フレームワークとかまだよくわかってなくて >>680
Javaではゲーム作ったことないからよく分からんけど、
Java ゲーム とかでググるとそれっぽい本がいくつか出てくるからそこらへんを適当に一冊選んで丸写ししてみればいいんじゃないかな >>682
ご丁寧にありがとうございます
m(_ _)m
私はまだまだ勉強しなきゃいけない事が多いようですw 最初に?というとこんなやつかな。
10 PRINT "*";
20 GOTO 10 *
*
*
*
*
*
*
*
*
*
BREAK AT 10
ロ マイコンの素晴らしさに感動。
これがあればなんでもできる。
と、本気で思った。 定期的にクソ見辛いブログをステマしていくやつなんなの 全くの未経験で転職先でjavaを使用するという事で学習していこうと思ってるんだけど
先にHTML、CSSからやっていかないとダメな感じ? \ ∩─ー、
\/ ● 、_ `ヽ
/ \( ● ● |つ
| X_入__ノ ミ 俺は釣られないクマ ・・・
、 (_/ ノ
\___ノ゙
/ 丶' ⌒ヽ:::
/ ヽ / /:::
/ /へ ヘ/ /:::
/ \ ヾミ /|:::
(__/| \___ノ/::: javascriptがjavaの仲間だと思っていた時期が俺にもありました… むしろ今となってはjavascriptのほうが使いやすい ttps://pastebin.com/5QkYYhdg
Stringのインデックスエラーが出るのですが、何かいけないのでしょうか? Java有料化で仕事無くなるかもなのに頑張るのか。。。 >>703
charIndexがリセットされないのがいけない
"123456"を表示するときにcharIndexは0から5に増えて
"7"を表示するときにcharIndexは5だからNG >>707
ありがとうございます。
breakの前にcharIndex=0を設定することでエラーは解消されました! 同じ文字を含まないっていう正規表現があるなら教えて欲しいです。
例
マッチする
abc
acb
bac
bca
cab
cba
マッチしない
aab
cbc Ruby なら、uniq で、配列内の重複した要素を削除できるから、それで文字数を数えて比較すれば?
split で1文字ずつ、配列の要素にする
str = "abca"
str.length #=> 4
str.split( "" ).uniq.length #=> 3 >>709
同じ文字を含むなら (.).*\1 でできると思うので、プログラムの側でこれにマッチしないものを処理すれば良いのではないかな。 >>713
ありがとうございます。
参考にさせてもらって、その正規表現の効果をぐぐって見て
自分でもいけそうな気がしたのですが。
NGになってしまいます。
何が間違えてますか・・・
String a ="aac";
if(a.matches("(.).*\1")){
System.out.println("OK");
}else{
System.out.println("NG");
}
>>712
>>714
ありがとう、ございます。
それらとは別のやり方ですがヒントになりました。
特定の文字をAllreplaceで""にして原本とのlength()の差で
選別する感じでひとまずいけました。 >>715
\ 記号はエスケープ文字なので \\ にする。 ありがとうございます。
\\でもNG出て
if(a.matches(".*(.).*\\1.*")){
にさせてもらったら
期待通りの結果がでるようになりました。
ありがとうございました。 あー。そうか。matches() は前後に暗黙の ^$ が入るんだったな。 配列変数の宣言と配列を作成する文において、配列の型を2回記述しないと
いけない理由は何ですか?
例) int[] array = new int[5];
インスタンス変数の宣言文と似ていますが、もしかして配列においても
多態性が使えるんですか? bronzeの問題見てるけどインクリメントの後置やらfor文のブロック省略やら、引っ掻けたいだけの問題多すぎない? >>720
理由と言われても、そう言う言語仕様だから。もう20年以上前に設計された言語だから、今の基準で見たら冗長な表現が多々ある。
あと配列においても多態性が〜、の部分は何が言いたいのか分からない。 >>723
ありがとうございます。
その部分は勝手な憶測なので気にしないで下さい。
例えば、int型はdouble型に型変換されることもあり得るので、
例) double[] array2 = new int[5];
のような記述が出来るのかな?と思っただけです。 >>724
それは多態性というか暗黙的なキャストだな。
Javaではそれは出来ない。暗黙的キャストは便利なこともある反面、意図しないキャストでバグを生み出す可能性があるからJavaの設計思想とは相容れない。 >>724
子の型の代入を認めるのを共変というのだけれども
配列の型は共変だから型が継承関係にあるならば代入できるよ
Number[] a;
a = new Integer[5];
a = new Double[5]; >>722
まぁ自分が何気なく書いて意図した結果にならなくて混乱するようなことになるなよってことだと思う >>722
プログラミング言語の資格はそういうもの。
そもそもC言語の影響を受けた言語では細かい部分を知っていないと、他人が書いたコードが読めない。 >>725
ありがとうございます。
>>726
ありがとうございます。プリミティブ型は継承関係に無いから駄目ですね。 https://qiita.com/syu_chan_1005/items/46f94412f7493d6e60eb
このサイトに従ってBuild ArtifactsまでしてコマンドプロンプトでIdeaProjects\test\out\artifacts\test_jarから
「java test」
と実行したのですが
「エラー: メイン・クラスtestが見つからなかったかロードできませんでした」
と言われ実行できません。どのようにすればよろしいでしょうか。 >>730
自己解決しました。
.jarをjavaで走らそうとしたのが問題だったみたいで、
java -jar test.jarと入力したら無事出力されました。 スッキリわかるJava入門の第8章の練習問題を解き、以下のような
Clericクラスを作ったのですが、
https://pastebin.com/EZdvVESb
英語にすると訳が分からなくなる言葉もあったので、それらはローマ字に
した結果、英単語とローマ字が混在するコードになってしまったのですが、
問題でしょうか? >>733
自分1人しか弄らないなら好きにすればいいよ。
どうせならローマ字じゃなくて漢字や平仮名を使って日本語でそのまま命名することもできるから試してみるといい。
ただし一般論、というか仕事でやる開発なら英語で統一するのが普通なのでそれは忘れちゃいけない。 入門に出てくるようなクラス名は普通に出てくる単語ばっかだろうからさっさと覚えたほうがいいでしょ >>733
ソース見たけど、確かにkaifukuryoとか死ぬほど読みにくいから、これならいっそ「回復量」の日本語でもいいと思うw うちの社内システムは何年も前から部分的に日本語変数名も使ってるけど、特に問題が起きたことはないよ
ただこの話題で議論が紛糾して荒れるのをネットで見かけるから、何がなんでも絶対に許さない人達がいるのは間違いないw うちの会社でうっかりそんなことしたら中国語で溢れるよ。あとドイツ語と英語。
あ、英語はいいのかw 総称型配列を生成したい…リフレクション使えばいける? 答えてくれた方、ありがとうございました。
なるべく英語で行くようにしたいと思います。 ローマ字は特に気にしないけどおかしな英語だとモヤる
登録でregistってなんやねん >>739
Array.newInstanceの結果をダウンキャスト
警告が出るが気にしない
外から引数でClass<T>を受け取るようにすれば多少はタイプセーフ風な雰囲気を醸し出せるかもしれない
Javaのジェネリックがハリボテの糞と呼ばれる所以だ >>741
すまん。昔量産してしまった
区分フラグとかも >>743
まあモヤるレベルだから別にいいんだけどさ
終わりの見えない関数とか、読み解くと結局意味のない処理とか、Objectに全てを詰め込み中身を変えまくる黒魔術に比べたら可愛いもんさ、ハハハ…… Javaのジェネリクスが単なるObjectのシンタックスシュガーであることを考えると、
総称型の配列などというものは存在自体が常に虚偽であり明らかに矛盾していることがわかるだろう
Javaで総称型の配列が欲しいときは、ArrayList<>(これは実はObject[]をラップしている)を使うか、
単にObject[]を使っておいて辻褄合わせが必要なときに要素を適宜ダウンキャストしてやるかのどちらかだ
Javaのジェネリクスでは型の整合性を維持するのはジェネリックなメンバやクラスを作るプログラマの責任なんだよ
通常のアプリケーションコードで積極的に作るものではない silverの問題集の解説見ながら勉強してるけどコンスタントプールってのがあるんだなぁ(こなみかん) cyclopsを使ってダサいTRY-CATCHを改善してみたがカッコイイ
public static javafx.scene.image.Image loadImageFromFile(@NotNull Path path, double w, double h) {
return Try.withResources(() -> new FileInputStream(path.toFile()),
stream -> new javafx.scene.image.Image(stream, w, h, true, true),
IOException.class)
.onFail((e) -> GUICommon.debugMessage("loadImageFromFile >> File not found : " + path.toString()))
.get()
.orElse(null);
}
public static javafx.scene.image.Image loadImageFromURL(@NotNull URL url, double w, double h) {
return Try.withCatch(url::openConnection)
.peek(conn -> conn.setRequestProperty("User-Agent", "Wget/1.13.4 (linux-gnu)"))
.peek(conn -> conn.setRequestProperty("Referer", customReferrer(url, null)))
.flatMap(conn -> Try.withResources(conn::getInputStream,
stream -> new javafx.scene.image.Image(stream, w, h, true, true),
IOException.class))
.onFail((e) -> GUICommon.debugMessage("loadImageFromURL >> Cannot get image from : " + url.toString()))
.get()
.orElse(null);
} clone()メソッドについて質問です。
https://pastebin.com/iabGmAun
上記のBookクラスにおいて、フィールドに、Date型のpublishDateがあるのですが、
これをclone()でコピーするにあたっては深いコピーにする必要があるみたいなのですが、
String型は浅いコピーでよくてDate型は深いコピーにしないといけない理由は
何故でしょうか? >>748
Date型は状態を変えられるから
たとえば単純にコピーするだけだと
こうなる
Book ┬ Date ─ 2018/12/01
Book ┘
Date.setTimeで状態を変えることができて
コピー先のBookの日付を変えると
コピー元のBookの日付も変わる
Bookごとに日付が異なるなら
BookをコピーするときにDateをコピーしないといけない
Stringは状態を変えられないから
同じものを参照しても問題ない 何でもいいから例外をなげたいんですけど
例外で調べても catch のサンプルばかりで投げ方がわかりません >>751
throw new Exception("テスト");
これでおk >>752
new でふつうにclassみたいに作れるんですね
ありがとうございました 基礎からのサーブレット Servlet/jsp 2009
この本で勉強するのは古すぎか? >>753
みたいにっていうか、クラスだから。
Exceptionを継承して独自の例外クラスも作れる。 >>754
古すぎる。古文書レベル。
役に立たないどころか現代ではやってはいけないとされてるやり方が載ってる可能性もあるから、それを覚えてしまってむしろマイナスになるまであり得る。 列挙型のフィールドを持つクラスを作ったのですが……
同じ列挙型を2つ持たせる場合があるものの、1つのみ持つ場合もあることで問題が発生しています
コンストラクタ引数で列挙型指定する際に、必ず1つ指定するが、2つ目は(言うなら)nullでも構わない
列挙型の中にnull相当のものを追加してもよいと思ったのですが、それが1つ目に指定されてしまうと困るので追加したくない……という状態です
具体的には、いくつかの属性を列挙型で指定し、サブ属性は(同じ内容+(サブ属性なし))というかたちにしたいのです
サブ属性用に(同じ内容+なし)の列挙型を追加するしかないでしょうか…… >>754
つか、古すぎてその本に書いてあるバージョンの開発環境を用意する時点で挫折すると思う。 >>759
そうか、1つ目にnull入れられないようにチェック入れりゃよかったんですね
エラーを使う発想がなかった >>758
どういう状況なのかよくわからない。
同じメソッド名で一つの引数のやつと二つの引数のやつ作れば良いだけってことない?
つまりメソッドのオーバーロード。 >>762
それだと後々面倒だという理由があったような気がするんだけどむしろ後々表示するときに処理考えたほうが簡単に済みそうな気もしてきました……
こういう設計?ってどういう順番でやってくもんなんでしょうか データを呼び出して表示する目的だったので、とりあえずtoStringのオーバーライドができてからデータ登録用のコンストラクタを調整していくことにしました 拡張for文って配列でもコレクションでも動作しますよね?
ということは、双方に共通するクラスなりインターフェースなりがあるのでしょうか?
配列またはコレクションを引数に取る関数を作りたくて、内部処理は同じなので、オーバーロードではなく一つの関数で済ませたいのですが >>765
共通のインターフェースは存在しないです
コンパイラがIterableか配列か判断して処理します
オーバーロードを使いましょう >>766
ありがとうございます
それともう一つ質問させてください
リストを引数に取ってリストを返す関数で、よく
public <T> List<T> hoge(List<T> list){
// 何らかの処理
}
のように書きますが、この引数のリストがArrayListならArrayListを、LinkedListならLinkedListを、といったように、引数と同じ型のインスタンスを返したいです
ポリモーフィズムというよりは型クラスのイメージです
境界化して
public <A extends List<T>, T> A<T> piyo(A<T> list){}
のように書いてみましたが、「型Aは総称ではありません」とエラーになりました。
ワイルドカードなどを使えばいいのでしょうか?
というかあまりJava的な書き方ではないですかね? >>767
引数の型と戻り値の型をAにすればいんじゃないでしょうか
私はそういうの必要になったことがないです
List返すぜヒャッハーなコードしか書いたことないです
Javaでそういうの書きまくってる世紀末ジェネリック伝説
みたいな人もいると思いますけど >>768
何度もありがとうございます
混乱させるのも嫌なので普通の書き方に準拠します
Javaは慣れてないので勉強します >>767
LinkedListってArrayListやListと用途が違う気が。。。
素直に?オーバーロードで良いんじゃ無いか?
多態性はジェネリックだけにあらずよ?
(と言うか、Java初期にはジェネリック無かったし) >>770
Listの汎用関数とか、Mapの汎用関数を作ってたら思った次第です
Mapなら、HashMapはHashMap、EnumMapはEnumMapで返したいなとかです
素直にオーバーロードしますね
ありがとうございました それって呼び出す側にnewさせて引数で受け取れば良いだけでは?
自分でnewしてリターン値にしないなら関係なくなるよね。 素朴な疑問なのですが
Javaプログラマーってみんなオブジェクト指向やデザインパターンやイベントリスナーのしくみなんかを完璧に理解して使いこなせているんですか?
別に自慢じゃないけどオレは理系で高学歴ですが
こんな難解複雑なものをみんなたやすく理解できるものじゃないと思うのですが。
高校の数学物理化学をレベルの高い大学に受かるくらいの頭がないと無理と感じます。 デザインパターンは、オブジェクト同士の疎結合の歴史。
DI, Flux, Pub-Sub(発行・購読)とか
WEB+DB 106号に載ってる。
スマホアプリの設計。DI, MVVM, Flux >>772
出来るだけ副作用のない関数にしたかったので、その手は見送りました >>773
容易くかどうかはわからんが、ずっとやってりゃ小学生でもわかるようになると思うけどな。
このスレにもいないか?小学生の頃からプログラミングたできたやつ。 >>774
>>776
なるほど。
まあワタシは頭がいいのですぐ理解して使いこなせそうですが。
ハッハッハ!
ところでスキルを身に着けたときやっぱり報酬は期待したいのですが
年収1000万以上、できるだけ高く、を目指すためには、どのようなことをすればいいですか?
これはヒューマンスキルも大きくかかってくると思いますが、具体的にどんなことをすれば高収入になりますか?
野球でも年俸はFAがからむと高収入になるし、それがないと成績がいいのに低収入の選手もいるし、
なにかコツを知ってるだけで同じスキルなのに収入は天と地ほどの大差になるというのが現状のような気がして。 そういう事を聞かなくても行動できるのが、高収入な人だと思うけど。 >>773
ちゃんと理解出来ている人は極少数だと思う
でも理解出来てなくてもある程度実装は出来てしまうしプログラマにも成れてしまうからどヤバいコードが生成されてしまったりするわけで >>781
なるほどそうなのですね。納得。
オレはわりと進学校出身だけど、まわりはみんな数学物理化学で苦労しててオレだけできたから
プログラマの仕事でもそう簡単にオブジェクト指向/デザインパターン/イベントリスナーを理解できる人はいない気はしていました。
でもこれに甘えずオレはどんどん勉強してスキルアップしていきたいと思います。
オレは経験がないだけど伸びしろは無限にあると思っているので。
オレみたいな人がやっぱりプログラミングに向いてるよね?w
高校レベルの数学物理化学で苦労するようじゃプログラミングも高度なことは絶対できなそうだし。 >>782
傲慢であることはいわゆるプログラマーの三大美徳の1つなので安心して励んでください いや、使われる能力がちょっと違うと思うぞ。
数学や物理が絡まなくはないし絡められるわけだが、かといってそんなもんほとんど知らないままプログラミングできるようになるやつは居るだろうしな。 >>782
数物化が出来る→プログラミングが出来る
は一般に成り立たないかな
情報系でそれなりに良い成績を獲ってるけど実技系の科目の成績は低いみたいな人は結構いたりするし情報系であってもちゃんと理解出来てる人はそんなに多くない
まぁ相関が全く無いとは思わないけどね >>785
そこらへんは知識そのものというより、求められる思考方法が近しいってのはある。
だから数学が出来ればプログラミングが出来るっていうより、数学の得意なタイプのやつはプログラミングも得意であることが多い、とかそういう感じだと思う Windows10のJava1.8以上のバージョンのSwingでの日本語入力する時、
編集中の行が画面の一番下の方の時に変換すると、日本語変換候補Windowが編集中の行と重なって、編集中の文字列を隠してしまうバグのようなものが
自分の環境ではおきるのですが、他の人はどうですか?
Swingのテキストコンポーネントでおきます。 >>788
ありがとう。
これだけ普通の条件で簡単に起きるのに、ずっとバグが直らないのはSwingで日本語入力なんてほとんど使われてないからなんだろうな。
Intellijとか使われてるけど、プログラム用のエディタだから日本語はほとんど入力されないのかな。
バグレポートかなんかしたいと思ったけど、ます英語を勉強しなきゃいけないし。 編集中の行の下に候補ウィンドウを表示する時はうまくいくんだけど、
編集中の上に候補ウィンドウを表示する時(つまり編集中の行が画面の下の方の時)、重なってしまう。
IMEのAPIのバグらしく、Swing使ってる限り独自のテキストコンポーネントを作っても直らない。 3つ組の値を返したいときってそれ用のクラス作った方がいいの?
それとも汎用的なタプル的なの作ってそっちに詰め込んだ方がいい?
クラスにしたとして、他の箇所で使うかは微妙なところ
もしかしたらもう一回くらい使うかもってくらい >>791
配列やリスト等に突っ込んで返す方法もあるが、本当にそれで問題ないかはよく考えた方が良いと思う。 >>791
Hashmapに突っ込むとかもある。
俺なら絶対にクラスを作るけど。 Ruby なら、メソッドの委譲機能を定義する、forwardable, delegate
継承(is-a)じゃなくて、汎用的なコンテナ(配列・リスト・辞書)に処理を委譲するような形(has-a)
クラス内に、汎用的なコンテナを作って、
push, pop など、同じメソッド名で、処理を内部コンテナに丸投げする VBAは経験豊富だけどJavaは初めてです。
もちろんいっぱい勉強しました。
転職アピールで取ったほうがいい資格はなにがありますでしょうか?
Java経験ないので面接の質疑応答と資格アピールでがんばろうと思うのですが。
資格受験はすぐに取り掛かる予定です。今月にでも! earとかwarがいまいちわからないです
開発時にファイルAでファイルB(別パッケージ)をimportして使っていて、eclipse上ではコンパイルも通っていました
でもデプロイ段階になってから、先輩にこの2つのパッケージは別々のwar?になるからimportできないよと言われました
自分の感覚だとそもそもそれでコンパイルが通るようになってるのがおかしい気がするのですが、Javaの世界だとそれが普通なんですか? earは耳、warは戦争です。
発音の注意としては、warは「ウォー」であって「ウァー」ではありません。
ここを押さえておけば大丈夫。 >>796
それはear、war云々の話ではなく
開発段階とデプロイ段階で違うことをやってるのがおかしいという話では? >>799
あ、それです
ただJava界隈だとそれが普通なのかなと思いまして ear, war, tar など、ar とついているものは、zip などの圧縮 archive だろ。
サーバーにデプロイするために、1つにまとめる
だから、a.ear の中から、b.war の中の、オブジェクト・関数などは使えないのだろう
2つもデプロイしないから。
デプロイするのは、1つだけ
「java ear war」で検索! tarは頭からファイル名、内容の順で入ってるだけだからいまいち使い辛いな。
ファイル名出したいだけでも途中に大きいファイルがあると待たされる。
テープ装置用のコマンドを無理矢理使い回してるのがいかんよな。
せめてファイル名だけ並べたヘッダだけでも別に用意すればいいのに。 >>804
テープ用のコマンドを無理矢理使いまわしてるんじゃなくて、今でもテープに書いたりもするぞ。-Mでマルチボリュームにして、-Lでサイズ指定したらテープ交換メッセージ出る。
そうしとかないとボリュームまたぎのファイル探しづらいし、そういうもんじゃねえかなぁ。
ディスクに落とすとしても、ボリューム切り替わるたびに最初のディスク入れさせるとか狂気の沙汰な気がする。 まあ今でもテープ装置があれば使うのはわかる。
しかしテープではなく普通のファイルに書くならもう一ひねり欲しいところ。 silver黒本で勉強してて、例外終わらせたと思ったら最終章でラムダ式とかいう完全に新しいやつでてきてわろた
仕様が覚えられん ラムダなんか平均的なJava土方現場ならもれなく使用禁止だから安心していい
その証拠にこのスレでも滅多に出てこないだろ? そうなのか、まあ試験用で一通り覚えないといけないけど
考え方とか他の言語やるときに役立つかな Javaのラムダはコンビネータを記述できますか?出来ないのなら不要(ラムダの意味がない)と思います ラムダっていうか関数型の概念をJavaを通じて学ぶのは無謀だから試験用に割り切るしかない >>810
は?
import java.util.function.Supplier;
public class Test {
public static void main(String[] args) {
バニーガール a = new バニーガール(() -> "巨乳");
a.ぱふぱふ();
}
}
class バニーガール {
Supplier<String> create;
バニーガール(Supplier<String> create) {
this.create = create;
}
void ぱふぱふ() {
String おっぱい = create.get();
System.out.printf("%sでぱふぱふ", おっぱい);
}
} >>812-813
は?
それのどこがコンビネータですか? >>814
コンビネータとは関係なくラムダ式は便利だよ
コンビネータ仕事で使うことないやろ
それを言うとんねん >>815
コンビネータを記述できるからλ式に存在意義があるのであって、コンビネータを記述できないλ式なんて「λ式」と名乗る資格がない文法的屑仕様にしか見えないのですけれども >>817
コンビネータ記述できなかったの?
それはそれとしてJavaのラムダ式はコンビネータとは関係なく
匿名クラスを書かなくてすむから便利だと思うよ
Streamとかで使ったら便利だよ 導入した意図も知ろうとしないで
屑仕様と言う人にJavaを語る資格があるとは思えない
普段Java使ってるの? >>818-819
無名クラスとラムダ式の差異なんて知れており、やれといわれたらチャッチャッと「無名クラス->ラムダ式」「ラムダ式->無名クラス」の両方やれますね…
普段は C++ 使いですが、C++方面での認識は「ラムダ式は糖衣構文」
私の認識は「Java や C++ の「自称」ラムダ式は、所詮自称でしかなくコンビネータを記述できない」
「コンビネータを記述できないものをラムダ式と呼ぶことはできない」 いまどきHaskellerでも言わないような理論振りかざす原理主義者なんかNGしとけよ >>821
やれるやれないじゃなくて
ラムダ式を使ったら簡単に書けるでしょう
だから便利でしょうという論理ですよ
Javaの公式ドキュメントでラムダ式と呼ばれてるので
ラムダ式と呼ぶべきかと
ところでJavaのラムダ式でコンビネータ記述できなかったの?
ググったらyコンビネータとかzコンビネータとかパーサコンビネータとかあったけど
それは自分の定義ではコンビネータと呼ぶことはできないとか? >>822
コンビネータが必要になったことがないから
大事なんだと言われてもよくわからんのよね
コンビネータの概念を知らなくてもJavaのラムダ式は便利だと思うんよ >>823
>ググったらyコンビネータとかzコンビネータとかパーサコンビネータとかあったけど
それは javascprit じゃない?js なら書けると思いますよ、ちょっと url を教えてください。
>Javaの公式ドキュメントでラムダ式と呼ばれてるのでラムダ式と呼ぶべきかと
そういう権威・権力のスカートにしがみつく理由で採用するのですか?頭が悪いと思われますよ
プログラマってそういうものからはもっとも遠くに立っている人種ではなかったかと
>>824
>コンビネータが必要になったことがないから大事なんだと言われてもよくわからんのよね
それは当然です、コンビネータは「記述できる範囲を定める」ものであり実用プログラムで使用することはありません
「コンビネータを記述できること」をもって lambda 式と呼ぶべき、という意見です、コンビネータが記述できないのなら別の名前にするべきでしょう。
私は@便利に書けるからといって糖衣構文をなんでもかんでも言語仕様に含めることには反対であり、ましてや、Aなんでもかんでもぶちこんだ糖衣構文にテキトーな名前をつけることにも反対しているのです
Java は発表当初から言葉遣いがおかしいところがあり、たとえば「参照(reference)」などは他言語とは完全に意味が違いますね >>825
https://www.google.com/search?q=java+%E3%82%B3%E3%83%B3%E3%83%93%E3%83%8D%E3%83%BC%E3%82%BF
Javaのラムダ式と君のラムダ式があって
Javaのラムダ式は僕のラムダ式じゃないんだと
君は言うけれども君は自分が頭が良いと思われてると
思ってるのかな
俺はJavaのラムダ式は簡単な処理を簡単にかけるから大賛成
Streamを使いやすいしリッチなコレクションに処理を丸投げする
関数型のようなプログラミングがやりやすくなって大感謝
君の価値観とは正反対だけどJavaのラムダ式は便利だよ
コンビネータが実用プログラムで使用されることがないなら
ラムダ式をコンビネータを記述できるかどうかで語ることに意味あるのかな
Javaのラムダ式は実用上有用だから導入されたものだよ
referenceの話は具体的にどの言語の概念と完全に違うと言ってるのかしら
文脈が変われば概念が変わるのは当然と思うよ
スペリングが同じだからといって概念が同じとは限らない
言語が変わるならなおさら >>826
まず「パーサコンビネータ」の「コンビネータ」は不動点コンビネータとはなんの関係もありません
大雑把にググッた結果だけみせて、その中身を精査していないのは、新しい概念に対するキャパシティー、あるいは概念把握力に問題があるのではないですか?
Java では yコンビネータは無理でも、zコンビネータという不動点コンビネータは記述できるようですね…これは追体験しているところです、情報を提供いただきありがとうございます。
>君の価値観とは正反対だけどJavaのラムダ式は便利だよ
私の価値観は「Javaラムダ式は不便である」ではなく「Javaラムダ式はラムダ式と呼べるのか?」でしたが、Java ラムダ式にて不動点コンビネータの一部が記述できるようですから、この認識はあらためることになりました
>ラムダ式をコンビネータを記述できるかどうかで語ることに意味あるのかな
>Javaのラムダ式は実用上有用だから導入されたものだよ
有用、というよりも単なる糖衣構文にしかみえないですね、まあ、このあたりは人それぞれ
>referenceの話は具体的にどの言語の概念と完全に違うと言ってるのかしら
>文脈が変われば概念が変わるのは当然と思うよ
>スペリングが同じだからといって概念が同じとは限らない
>言語が変わるならなおさら
いろいろな言語をやってみよう、というときには、あなたのこの助言は有用だと思います
しかし、それと同程度に次の意見も有効ではないですか?
「異なる言語であっても、同じ概念に対しては同じ言葉を使い、違う概念に対しては違う言葉を使うべき」
C++ の reference と Java の reference は、それぞれの概念が近接することもあり、非常に紛らわしいです
これは Java が出たときにすぐに問題になっていた記憶があります。 なんでみんな荒らしコテハンにいちいち構ってんの
三が日の暇つぶしか >>828
私のどこが荒らしと感じたのですか?具体的に記述できるのですか? >>827
パーサコンビネータと君のコンビネータについては
どっちでも良いと思って
誤解されたくなければ君は詳細に説明してるだろうし
俺が違ったものだしても君は文句言える立場じゃないよ
yコンビネータのことなんだと君が最初から言ってたなら別だけどね
yコンビネータと最初に言ったのは俺だよ
俺のエスパー能力に君は感謝こそすれ文句言うのは大間違いだよ
いま俺が君から聞きたいのは謝罪の言葉だよ
きちんと説明せずに文句まで言ってしまってどうもすみませんでしたという
言葉を聞きたいよ
C++ の reference と Java の referenceは近接してるんだと言ってるわけですね
完全に違うと言ってたと思うんだけどそれもC++ の referenceのこと?
Javaが出たときにはJavaは普及してないだろうから新しい概念も周知されてないでしょう
それはしょうがないと思うけどC++のreferenceとJavaのreferenceはどう違うの?
言語間にまたがって用語を統一しようとしたら言語の外に辞書を作らないといけないね
プログラミング言語の用語一覧を作って概念が少しでも異なる場合は新しい用語を
追加することというルールを作らないといけないね
俺は嫌だなあそういうの官僚的でめんどくさいだけ賛同できないわ >>829
「Javaのラムダ式でコンビネータ書けますか?書けなかったら不要ですよね?」
↓
「コンビネータ関係なくラムダ式便利だよ」
ここまでは(入門・初心者向けかはともかく)質問スレの範疇
「コンビネータが書けなきゃラムダ式と呼んではいけない!それに従うのは権威主義で〜」
ここら辺から質問関係なくなってる
単語の選出基準の話ならJavaの開発チームにでも聞かないとここで解決できるはずもない
同一スペリングで意味が異なる単語の話まで抽象化するともっともっとJava関係ない
そしておそらく本人もそんなことわかってるのに言い続けてるあたりが荒らし >>830
一連のやりとりは Java のスレで、Java とは異なる世界からやってきた「ラムダ式」「不動点コンビネータ」をぶつけてみて(化学)反応を楽しむ、という私の悪癖が出てしまいました、あまり気にしないでください
ごめんなさい
そして z コンビネータの存在を知らしていただいたことに感謝します >>831
>おそらく本人もそんなことわかってるのに言い続けてるあたりが荒らし
…お見通しですね
そのとおり、そういう意味なら私は荒らし、です… >>832
良いってことよ
それよりもC++のreferenceとJavaのreferenceはどう違うの? Javaのドキュメントには
・reference type
・reference value
が書かれてる
reference typeは
・class type
・interface type
・type variable
・array type
のこと
オブジェクトはクラスインスタンス、または、配列のこと
reference value(たんにreference)はオブジェクトへのポインタのこと
ゆえにJavaのreferenceは、クラスインスタンスへのポインタ、または、配列へのポインタのこと >>835
お許しが出たようなので続けます。
ざっと http://ezoeryou.github.io/cpp-book/C++11-Syntax-and-Feature.xhtml 8.3.2
や C++11 draft N3242 8.3.2
あたりを眺めていますが、reference が満たさなければならない用件は記述されていて(N3242 8.3.2.5)も、reference が何者なのかをずばり記述している部分はみあたらないですね。
Java の reference は「クラスインスタンスのポインタ」「配列へのポインタ」ですか、つまりポインタの一種なんですね、これは理解できます
一方 C++ reference はポインタに限定されることなくすべての型に対応して存在できます、int に対して「int の reference」、クラスC に対して「クラスC のreference」というふうに
ここで私の定義を示します。
ある型T のポインタを型「T *」とするとき、型「T *」 の変数 T *p が現に存在して
式の上の表現の文字列「 *p 」を文字列として v に機械的に置き換えたときに v が新たな変数として機能する余地があるのなら、文字列 v は型「T &」のreference として宣言できる。
という感じですか… >>836
よくわかんなかったからググったけど
C++のreferenceはreference variableの省略形で
変数のエイリアスみたいだよ
https://paiza.io/projects/2PkDkRGyIOxNPRxdvBctkg
こういう使い方するんでしょ ttps://pastebin.com/6EefhNbW
クリックしたさいに3行目のメッセージが出ません。
count()のmsgIndex++とmouseClickedのmsgIndex++が原因と思われるのですが、
解決方法が思いつきません。
構造自体を変更したほうがいいのでしょうか? >>838
public void mouseClicked(MouseEvent e) {
// msgIndex + 1 => msgIndex
if (msg.size() == msgDispSize && msgIndex < messages.size()) {
msg.poll();
// 下に移動
// msgIndex++;
messages.get(msgIndex).setVisible(true);
msg.add(messages.get(msgIndex));
// メッセージに追加したあとにインクリメント
msgIndex++;
}
} >>839
ありがとうございます。
インクリメント変更での解決納得いたしました。 ubuntu18.04をインストールしてJava 1.8にしてintellijインストールしたんだけど
intellijを含めたSwingの日本語入力のIMEの変換候補Windowが、編集中の行の近くじゃなくて
画面左下の方に表示されるんだけど、他の人もそうなりますか?
Ubuntuの設定がたりないとかあるのでしょうか? たぶんSwing(が使ってるAWT)が位置情報渡せてないから設定とか弄ってもムダかと。
FreeBSDのJava移植の時に位置情報渡すと変換候補ウィンドウがあっちっこっち飛ぶ(?)ので
諦めて位置情報渡さないようにした(結果デフォルト位置であるウィンドウ左下に
変換候補ウィンドウが表示されるようになった)とかって話を読んだ記憶がある。
Linux版もその辺の処理をきちんと書ける人いなかったんじゃねーかと。 下記で、本日の日付を表示できますが、
本日の一週間後を表示させるには、どこを+7したら宜しいでしょうか
よろしくお願い致します。
<SCRIPT type="text/javascript">
<!--
function _HpbDays()
{
this[0] = "日"; this[1] = "月"; this[2] = "火"; this[3] = "水";
this[4] = "木"; this[5] = "金"; this[6] = "土";
}
var now = new Date();
var yr = now.getYear();
var mn = now.getMonth() + 1;
var dt = now.getDate();
var dy = now.getDay();
var fyr = (yr < 1900) ? 1900 + yr : yr;
var dys = new _HpbDays();
var dyj = dys[dy];
document.write(fyr + "年" + mn + "月" + dt + "日");
//-->
</SCRIPT> >>843
var d = new Date();
d.setDate(d.getDate() + 7);
alert(`${d.getFullYear()}年${d.getMonth() + 1}月${d.getDate()}日`); 843です、度々すみません、上記をどこに挿入したらよろしいのでしょうか汗 >>846
ここはJavaスレであってJavaScriptスレじゃないぞ
もう関係ないけど反応を見た限り致命的なレベルで何も分かってないみたいだからちゃんと0からステップを踏んでくれ ここは、Java のスレです!
君のは、JavaScript です!
web 制作管理板の、JavaScript のスレへ書き込んで! >>842
詳しく、ありがとうございます。
Windowsで編集業が画面下の時不都合が起きるから
Linuxに移行を考えてたけど、より駄目なのか。
まあ、Java Swingでデスクトップアプリなんて作るもんじゃないのかな。 >>843-846
スレチだ。ここはJavaScriptのスレではなくJavaのスレだ。 あ、リロード忘れてた。すでに同じこと書かれてるではないかorz タイムリーにギネス最高齢の男性用がなくなっとるな… java初心者なんですが、javaのスピードってゲームに耐えられる程あるんですか
マインクラフトとか本当にjavaだけなら凄いなと >>858
どうだろう。VMやハードウェアしだいではあるが、Androidのスマホアプリは結構速いよね。 JavaやJavascriptは結構早いですよ。
問題はリソースをアホほど使うことですね。 Javaは元々ハードウェアを売るための言語ですから、リソースを大量に使うのは善なんですよ。
それだけ高いマシンを売れるんですから。 >>858
MinecraftはLWJGLっていうライブラリを使っててLWJGLは中でOpenGL/AL/CLとかを叩いてるからJavaだけっていうと微妙な気がしなくもない
ちなみにJavaは起動が遅いのであって実行速度は別に遅くない ぶっちゃけ泥のゲームてほとんどUnity製なのでは… ブ、ブートストラップは早いんだからね!遅いのは依存ライブラリが大きすぎるせいなんだから! >>858
速いよ。スマホゲーならサーバーサイドはJavaだったりする Eclipseの設定でエラー情報を試しに全部オンにしたところ、文字列に対してNON-NLSというコメントをつけるよう言われました
あまり意味がわかってないのですが、これは文字列を記述する度につけた方がいいものですか? >>866
そのスマホもAndroidなら普通はJavaだ。 Java初心者というかプログラミング初心者の大学生です。
java awtを使ってランダムなルーレットを作りたいのですが可能ですか?
イメージはルーレットがぐるぐる回っているアニメーションを実装したいです。 >>867
文字列を外部から読み込む設定にしたのでしょ
NON-NLSはその警告を出さないようにするためのコメント
文字列を外部から読み込むのなら修正するべきだし
その文字列を例外的に認めるのならコメントを入れて警告出さないようにするのもあり
文字列を外部から読み込まないのなら設定を外すべき >>871
ありがとうございます
普通にString hoge = "hoge";のように書いてるのですが、何か設定ミスったんですかね
外部読み込みというのがどういう設定かはまだわかりませんが、一度調べてみます >>873
ググってもよくわからなかったので質問させていただいたのですが、不快にさせてしまったならすみませんでした >>867
>あまり意味がわかってないのですが、
>>872
>まだわかりませんが
>>874
>ググってもよくわからなかったので
結局のところ全然わからないんだろ? >>869
可能か不可能かで言えば考えるまでも無く可能
なんだけどその質問をしたということは何処かで躓いたと見えるから何処で躓いてるのかを書いて欲しい >>875
そうなります
「String外部化」とか「多言語対応」とか、単語だけ入ってきて結局どういうものか、警告を無視していいのかなどが全然判断つかなかったので質問させていただいたのですが、甘えでした
上記の質問は取り下げます
すみませんでした >>874
自分でググって分かる範囲は知識量とかで決まるからそういう事もある
結論から言うと分からないレベルなら「無視」に設定すれば問題ない
外部化ってのは…871の回答が全てかなぁ…
今後色々とコードを書いているうちに外部化の嬉しさは分かるはず >>876
まさしくそうです。
イメージでは図形(円)を何等分かにしたもの(それぞれに項目を入力するようにしたい)を回転させてボタンをクリックすると徐々に停止するという感じにしたいのですが、
図形を回転させる方法が分からなくて準備した画像を回転させるという方式を妥協案としてだすところまではいきました。 次の現場のfwがSpringらしいんだがSpringって何が特徴なの Jsoup使ってwebスクレイピングしたいんだけど、やり方がよくわからないです。。
ダウンロードは済みだけど動かし方がさっぱりわからずで…
ちなjavaは、びじゅあるすたじおこーどでコードを打ち込んで、パワーシエルで動かしてます。 Ruby で、Nokogiri, Selenium WebDriver, ERB などで、スクレイピングする方が簡単
>>880
掌田津耶乃の本
Spring Framework 4 プログラミング入門、2014
Spring Boot プログラミング入門、2016 >>883ありがとう。
スクレイピング技術はPythonが充実してそうだけど、
学校ではjavaとPHPとhtmlとJavaScript しか習ってないんだ。。。
とりあえず今はjavaでやってみて、時間に余裕出来たらPython極めたい スクレイピングならPythonよりもRubyが鉄板じゃないかな なんでこれはダメなんですか
String gomi="sinekasu";
public Sampleb() {
this(gomi);//明示的にコンストラクターを起動している間、インスタンス・フィールド gomi は参照できません
}
こっちは問題なし
public Sampleb() {
System.out.println(gomi);
} >>886
そうなの?
図書館で蔵書調べたり、ネットで検索するとPythonばかり出てくるし、最近はAIの話題でもPythonて耳にするから、授業そっちのけでPython学ぼうか悩んでる >>889
トレンドとしてPythonが人気なのはそうだけど、言語ごとに得意分野はある。
現実的にはスクレイピングだけを考えたらRuby一択だけど他の用途も想定するならPythonは悪い選択肢じゃないよ。 >>890
this()でフィールド使えない理由がよくわからないんです
そういうもんだと暗記しようかなとも思ってますが >>887
this()やsuper()は先頭にしか置けないってのから分かるように,インスタンスが生成されるタイミングは一番最後に呼び出されたコンストラクタの先頭に当たるから,this()を呼び出す前にフィールドにはアクセスできない 説明を見たうえで暗記でいいって判断したんだろうが猿黙ってろゴミ 質問です。
ログ出力の構成を考えてるのですが、
Javaで別ディレクトリにある同名ファイルは同時に開けますか?
手元にPCなくて試せません… それどころか同じディレクトリにある同じファイルも開けるよ。
あまりやる必要はないかも知れないが。 何かのテンプレートファイルを使うときは同じファイルを同時に読み込むことはあるな
業務アプリで何かをエクセルに出力するときなんかにやることはある ほえー全く同じファイルも開けるんですね
ありがとうございます助かりました Javaアプレットも読めるんだけど、弊社の自作VMだって主張するやつについてどう思う? どのブラウザもJAVAは選択制でデフォルトではオフ。
日本の官庁がJAVAで書かれたオンラインシステムを持っていて大慌て。
GoogleのAndroidもサンマイクロシステムにライセンス料だせと脅されたから、たぶんAndroidもJAVA離れするだろうし。
似たようなC#ってあるのだからそれで十分なんだよね。 Webシステムの現場なんですけど
Javaをコンパイルしたらクラスが生成されるということを知らないおっさん(35)が異動してきました
何から教えればいいのでしょうか マウンティング化みっともない行為であることを教えてやれ >>912
Javaをコンパイルしたらクラスが生成されるんだよと知らないおっさん(35)にやさしく教えてあげましょう >>912
コピー機の使い方と便所掃除のやり方かな >>912
とりあえず転職サイトの登録の仕方を教えてあげるのがお互いのため paiza.io とか、転職のためのプログラミングの学習もできるようなサイトを教えてあげなさい。 paizaな、コンセプトは分かるんだけど現実的にはあまり、って感じだからうちはもう来季以降使わない方向。
正直あんな問題よりもGithubでも見せてもらった方がはるかに応募者のことが分かるし はぁ〜ん、eclipse is ゴミ
なんで Find / Replace 効かなくなるっていうクソみたいなバグあるんだよ勘弁してくれ はぁ〜ん、Git のプラグインをアンインスコしたら治ったわ
Git Plugin is ゴミ さすがにそろそろIntelliJに乗り換えとけ
eclipseなんて使ってると今どきの女子高生に笑われるぞ これから何か覚えようと思ってJAVAを考えてるんだけど有料になったの?
あとなんだっけJDKとかってオラクルのやつが一番メジャーなの? >>923
追加です、アプレットとサーブレットってどっちやればいいの?
自分のPCで個人的に使いたいんだけど >>925
あとどこか解りやすいサイトあったら教えてくださいーよろしくお願いします_(_ _)_ JSPとJSって違うんですか
jsファイルってなんですかって聞かれたけど答えられませんでした
なんて言うのが正解なんでしょうか >>922
IntelliJのほうがいいのは重々わかってるんだけど、
eclipse の API とか プラグインとかごりごり使ってるし
使ってる SWT とか JFace のGUIビルダが eclipse にしかないんだよね…まぁGUIビルダもクソバグ満載のゴミなんだけど 簡単なプログラムならEclipseのコンパイル爆速だ というか
編集中にインクリメントコンパイルしてるのかな? 今時のPCならJavaのコンパイルなんて一瞬だからインクリメンタルコンパイルはほとんど関係ない
不要なコンパイルを減らすようにする程度の依存関係管理さえやってればクラスファイル単位でのコンパイルで十分に速い javaってインタープリター言語だったっけ?と思った記憶がある。コンパイルしてるように見えなかったんで。 IntelliJも出来るよ、デフォルトでオフになってるけど。
ただビルドそのものなんて一瞬だから、あんま意味ないよね。
Springとかのウェブアプリを作ってて画面いじりながら即座に変更を反映したい時には使う。 初心者質問スレなのにガン無視って・・・そういうスレなんですね。
自分で調べます、ありがとうございました。 packageについて質問します。
javaおよびコンピュータについては殆ど素人なんでお手柔らかにお願いします。
Calc.java(メイン)、CalcLogic.java という二つのファイルをコンパイルしたところ
C:\Users\sinou\Desktop\java>javac Calc.java CalcLogic.java
という風にコンパイルできたのですが、
いざメインのほうのCalc.javaを実行したところ
C:\Users\sinou\Desktop\java>java Calc
エラー: メイン・クラスCalcを検出およびロードできませんでした
原因: java.lang.NoClassDefFoundError: root/Calc (wrong name: Calc)
という風にエラーが出ました。
また、メインのCalc.javaのみをコンパイルした結果
C:\Users\sinou\Desktop\java>javac Calc.java
Calc.java:5: エラー: パッケージtorは存在しません
int total=tor.CalcLogic.tasu(a,b);
^
Calc.java:6: エラー: パッケージtorは存在しません
int delta=tor.CalcLogic.hiku(a,b);
^
エラー2個
となりました。
二つの.javaファイルは同じjavaファイルに入っているのになぜかコンパイルできません。 ソースコード
Calc.java
package root;
public class Calc{
public static void main(String[]ags){
int a=10;int b=2;
int total=tor.CalcLogic.tasu(a,b);
int delta=tor.CalcLogic.hiku(a,b);
System.out.println("tasuto"+total+"hikuto"+delta);
}
}
CalcLogic.java
package tor;
public class CalcLogic{
public static int tasu(int a,int b){
return(a+b);
}
public static int hiku(int a,int b){
return(a-b);
}
}
もしわかる方がいればご指導よろしくお願いします。 >>938
パッケージとフォルダ階層を一致させればいい
root/Calc.java
tor/CalcLogc.java
実行するときはrootの親のフォルダでjava root.Calcを実行すればいいよ >>940
C----User---sinou---Desktop-------java
|
|---Calc.java
|
|
|---CalcLogic.java
2つの.javaファイルはこういう風になっていますが、階層を合わせるにはどうすればいいですか?
自分の理解が理解が低くてすいません。
それと申し訳ないのですが、package化せずに、CalcLogic.tasu という風にそのまま呼び出せば作動するのですが、これはpackageが何か作用しているのですが?
何度も質問して申し訳ありません。 940ではないけどパッケージとフォルダ階層の関係とフォルダ(ディレクトリ)の基点を整理する必要がありそう えっ、importの話じゃないの?
みんなが何言ってるのかよくわからない >>944
ありがとうございます!
助言の通りクラスローダーについて調べてみたらどうやらクラスファイルの位置が間違えていたようです!
クラスファイルを作成すると成功しました!
本当にありがとうございました!
https://i.imgur.com/nwn88Fp.png VScodeとAtomでは
どっち使ったほうがいいですか? Atomは開発元がVSCodeの開発元であるMSに買収され、完全に存在意義を失い事実上終了 >>947
その2択ならVSCode
Javaを書くならそれらよりIntelliJの方が良いと思うけど VSCodeのJava拡張は意外に良くできてるよ
今時流行りのコマンドラインだけで完結するビルドツールやフレームワークを使っているならほぼ不都合はない
リファクタリングなんかは敵わないけど、テキストエディタとしての拡張性・快適性を考慮すれば全然アリな選択 お前らがJava使ってるのってCOBOLと同じ流れ? COBOLと同じ流れっていうのがどういう意味で言ってるのかわからんから答えようがない Javaが採用される理由は下記の通り
1. 既存資産があるから
2. PGの調達が容易で単価も安いから
3. Winで特に支障なくUNIXサーバー向けの開発ができるから
このうち1.はCOBOLと同じだが、あとの2つはCOBOLには当てはまらない COBOL以外覚えられなくてCOBOLにしがみついてるって意味なら当てはまらんなあ
俺の場合は他の言語から入って後からJava書き始めた口だし ステートレスBeanとステートフルBeanの違いがわかりません。
例をあげて違いを明確に教えてください。 ジェネリクスについて質問です
List<HashMap<String, Integer>> 型のリストをソートするためのComparotorクラスって、
class Hoge implements Comparotor<Map <String, Integer>> {}
で良いんですか?
どこかでMap<?, ?>とワイルドカードにしないといけないと見たんですが(うろ覚えです)、特にそうしなくても動くので気になりました 今頃Javaに熱意のあるプログラマーなんて居ないし ステートレスは1回の処理で破棄される
ステートフルは永続性がある
つーか、Javaの質問じゃないわ 該当スレがないので
eclipseからintelij IDEAを試してますが、括弧の中からenterで抜け出せないのが不便過ぎます。
ショートカットは面倒だし、tabキーもsoutなんかの括弧付き定型文では無効。
使ってる人はどう対応してるのか教えてください 括弧の中からenterで抜け出すの意味がよくわからん エンターキーなのに出たいという話は全世界が驚く発言。 こういう事を言ってる?
https://ja.stackoverflow.com/questions/39484/intellijで括弧の中身を入力した後エンターキーで自動でカーソルを括弧の外に移動させたい
でもぱっと見た感じその条件はこれじゃ解決できなさそうやね Enter押すのも→押すのもワンキーなんだから、慣れてるかどうか以外の違いはないんじゃないかと思った。 >>968
そうですね。そのショートカットの他に、()+文字列続けて打ってる場合はtabで抜け出すことができます。
しかしprint()のように()を含む補完だと 中身を書いて抜け出すことができません。 ;打てば抜けられるときあるよな
抜けられないときもあるけど >>972
変化がないってことは変わらず20秒でタイムアウトになるって意味?
あと何が悪いのか分からないと言われても、実際に書いたコードを見せてもらわないことにはどうにもならん >>973
自分のコードはこんな感じです。
private static final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
public static Sheets getSheetsService() throws IOException, GeneralSecurityException {
final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
return new Sheets.Builder(HTTP_TRANSPORT, JSON_FACTORY, setTimeout(getCredentials(HTTP_TRANSPORT)))
.setApplicationName(APPLICATION_NAME)
.build();
}
private static HttpRequestInitializer setTimeout(final HttpRequestInitializer initializer) {
return request -> {
initializer.initialize(request);
request.setReadTimeout(60000);
};
}
デバッガでトレースしてもラムダ式の中のコードが実行されないし、相変わらず20秒でタイムアウトになります。 >>974
httpRequest.setConnectTimeout(3 * 60000); // 3 minutes connect timeout
これ入れてもNG? >>975
同じです。そっちのコードも試しました。
5000行くらいだとスムーズに読んでくれるんで、シートをいくつも作ってそこに5000行ずつ分割した上で読んだりしてるんですけど、
すごく手間だし、シートのある列がどこまで埋まってるか知りたいなんて時はそういうこともできないので困ってます。 >>976
携帯だから試せないけど、>>974のコードに>>975のを加えて両方書いてもダメ? >>977
private static HttpRequestInitializer setTimeout(final HttpRequestInitializer initializer) {
return request -> {
initializer.initialize(request);
request.setConnectTimeout(60000);
request.setReadTimeout(60000);
};
これでやってみたけどダメでした。 >>966
Return と書いてあるシールでも貼っときなさい。 >>980
リターンキーは左下に行くという意味で、戻るわけではありません。 >>979
ちょっと覗いてみたけど
NetHttpTransport.buildRequest
・ConnectionFactoryでconnectionを作成
・NetHttpRequestを作成
# setTimeoutがあるけど呼び方がわからぬ
って感じだった
HttpRequestInitializerを呼び出すのはHttpTransportだと思うんだけど
どこで呼び出してるのかよくわからんかった
ConnectionFactoryを指定してみたりとか
final NetHttpTransport HTTP_TRANSPORT = new NetHttpTransport.Builder()
.trustCertificates(GoogleUtils.getCertificateTrustStore())
.setConnectionFactory(new DefaultConnectionFactory() {
@Override
public HttpURLConnection openConnection(URL url) throws IOException {
HttpURLConnection con = super.openConnection(url);
con.setReadTimeout(1000000);
con.setConnectTimeout(1000000);
return con;
}
})
.build();
JVMの設定を入れてみたりとか
System.setProperty("sun.net.client.defaultConnectTimeout", "100000");
System.setProperty("sun.net.client.defaultReadTimeout", "100000");
Javaの起動時にJVMのオプション指定したりとか試してみてはどうだろ まだ解決してないならタイムアウトしてる部分のソース見るのが一番早いかな >>982
コードまで書いてもらってありがとうございます。朝一で試してみたんですが、残念ながら変わりませんでした。
ともあれありがとうございました。 >>984
タイムアウトで例外投げられてるなら
スタックトレース出力されてない?
スタックトレースを見ればどのオブジェクトが関わってるか
わかるんじゃないかな
それ貼ってもらえれば >>985
エラーはこんなのが出ます。
Exception in thread "main" java.net.SocketTimeoutException: Read timed out
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
at java.net.SocketInputStream.read(SocketInputStream.java:171)
at java.net.SocketInputStream.read(SocketInputStream.java:141)
at sun.security.ssl.InputRecord.readFully(InputRecord.java:465)
at sun.security.ssl.InputRecord.read(InputRecord.java:503)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:983)
at sun.security.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:940)
at sun.security.ssl.AppInputStream.read(AppInputStream.java:105) これで全部ではなくて、まだもう半分あるんですが、書き込もうとしたらNGワード禁止と言われて書き込めませんでした。 一番下から1行ずつ消しながら書き込めないかやってみます。
at java.io.BufferedInputStream.fill(BufferedInputStream.java:246)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:286)
at java.io.BufferedInputStream.read(BufferedInputStream.java:345)
at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:735)
at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:678)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1587)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1492)
at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:480)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:347)
at com.google.api.client.http.javanet.NetHttpResponse.<init>(NetHttpResponse.java:37)
at com.google.api.client.http.javanet.NetHttpRequest.execute(NetHttpRequest.java:105)
at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:981)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:419)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:352) HttpRequestInitializer をググってたらこういうページに行き当たりまして、
https://developers.google.com/api-client-library/java/google-http-java-client/reference/1.19.0/com/google/api/client/http/HttpRequestInitializer
そこに書いてあった DisableTimeout というクラスを組み込んでみたんですが、今のところ動作してるみたいです。
public static Sheets getSheetsService() throws IOException, GeneralSecurityException {
class DisableTimeout implements HttpRequestInitializer {
public void initialize(HttpRequest request) throws IOException {
request.setConnectTimeout(0);
request.setReadTimeout(0);
}
}
final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
return new Sheets.Builder(HTTP_TRANSPORT, JSON_FACTORY, new DisableTimeout())
.setApplicationName(APPLICATION_NAME)
.build();
}
これで35,000行のファイルを2、3秒で読んでしまうので、さすがに嘘だろうと思って、読み込んだ文字列をファイルに書き出してみたんですが、
確かに読めているみたいです。実際のところこれまで何十秒もかかっていた読み込みが、これでそんな短時間になるというのはちょっと理解不能です。 最初のコードと比べるとHttpRequestInitializerをnewしてるところが違うように見えるな えー皆さん大変申し訳ありません。>>989は間違いです。
ついでに最初に出したstackoverflowのコードはちゃんと動きます。
呼び出し側の自分のコードが原因でした。すごく馬鹿な間違いをしてまして、恥ずかしくて書けないような初歩的なミスでした。
ごめんなさい。 Arrays.streamにchar[]が無いのってオラクルの嫌がらせか何かですか? canvasのハックの仕方を教えてください
判断するための状態を読み取りたいです printwriterで最後の数行が書き込まれなくて困ってたけどclose()する前にflush()したら解決した
こういうこともあるのか >>996
closeするときにflushを呼ばない行儀の悪いクラスを
PrintWriterでラッピングしてしまったのね
なんてクラスよ、晒しちゃいなよ! メッセージって業務クラスにベタ書きする?普通
メッセージのプロパティかそれ用のクラスにまとめるでしょ??
業務クラスにべた書きってありえなくないですか? このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 275日 3時間 42分 40秒 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php レス数が1000を超えています。これ以上書き込みはできません。