トップページ⇒tech
1001コメント323KB

【初心者・ネタ】Java質問・相談スレ【大歓迎】

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
さーじゃんじゃん質問しよう。
お前らとりあえずがんがってください
そして誰か教えてください。

関連スレ
初心者無視! Java相談室 その9
http://pc.2ch.net/test/read.cgi/tech/1021555964/
調べようとする優秀な奴は↑へどうぞ。

0357デフォルトの名無しさんNGNG
>>356
returnは関係ないだろうな。
コードからjava.lang.NullPointerExceptionが予測されるのは、
}else if(next.body.equals(element)){の部分のnext.bodyがnullの
場合だ。
多分、再度試したときには、これがnullじゃなかったんだろう。
エラーが出たときは、それが発生した行数もチェックして、どこが
おかしいか確かめたほうがいいよ。
0358デフォルトの名無しさんNGNG
return 文は、メソッドの実行を終了させて、呼び出し元に戻ります。
if 文の中であっても、return 文は、メソッドの実行を終了させて、呼び出し元に戻ります。

0359デフォルトの名無しさんNGNG
>>356
NullPointerExceptionは、どの行で出たんだ?
0360デフォルトの名無しさんNGNG
なるほど
どうも、next.bodyがnullの時があったようです。
0361デフォルトの名無しさんNGNG
auのezplusとJーPHONEのJ-アプリって
どっちがおもしろいだろう?
0362デフォルトの名無しさんNGNG
>>352>>353>>355
ほんとうにありがと。ぼう参考書からの抜粋なんだけど
avstract class Shape{
void display(){
}}

class Circle extends Shape{
void display(){
System.out.println("Circle");
}}

class Rectangle extends Shape{
void display(){
System.out.println("Rectangle");
}}

class Triangle extends Shape{
void display(){
System.out.println("Triangle");
}}

class AbstractClassDemo{
public static void main(String args[]){
Shape s=new Circle();
s.display();
s=new Rectangle();
s.display();
s=new Triangle();
s.display();
}}
このアブストラクトクラスにはなんの意味があるの?
abstractをけしてコンパイルしてみたんだけど
出来るんだよね。どうしてもこの概念が理解できない。
とりあえず今月のJavaWorldをよんでみるけど。。
0363デフォルトの名無しさんNGNG
Jもauも中々クセがあるからどっちも面白いかも。
魅力的な面で言えばJなのかなぁ。どうなんでしょう?
0364デフォルトの名無しさんNGNG
>>362
基底クラスのShapeをインスタンス化させたくないってこと。
0365デフォルトの名無しさんNGNG
>>362

ええと、
avstract ってのは単なるタイプミスね。
(今度からはきちんとコピー&ペーストしましょう)

abstract なクラス Shape を消してもエラーが出ない、というのは、どうだろう。
これを確認してくれ。

Shape クラスの宣言がソース中にある状態でコンパイルしたときに出来たクラスファイル

  Shape.class

が、まだ存在している状態で、ソース上から

  abstract class Shape{
    void display(){
  }}

を削除(コメントアウト)してコンパイルしていませんか?

class Circle extends Shape{ ......

なんかの行をコンパイルするときに、コンパイラは extend 元の Shape クラスを探しに行く
わけだけど、既に Shape.class というファイルが存在していると、コンパイラはソース中に
Shape クラスの宣言がなければそれを使うよ。

コンパイルする前に、すべての .class ファイルを削除する癖をつけると、
良いと思うんだけど。
0366364NGNG
>>365
ちがう。よく意図を読んでやれ。abstract修飾子を消したってことを362はいいたんだと思う。
0367365NGNG
>>366

なるほど。たしかに。

この例が、abstract メソッドを含んでいないので、ちょっとわかりにくいかも。

http://www.gimlay.org/~javafaq/

この Java FAQ なんかをみると、abstract メソッドを含む abstract クラスの
例が載ってるので、そっちのほうがわかりやすいかも。
0368デフォルトの名無しさんNGNG
>>364−367
マジでありがとう。2chでこんなやさしくされると
涙出るよ。ちょっと行ってみます。
0369ダメプログラマのダメっぷりNGNG
tryブロックの中でreturnで戻った時もfinallyブロックのコードが
実行されることを昨日知って愕然とした・・・
0370デフォルトの名無しさんNGNG
やさしいね、みんな
0371368NGNG
みてきました。
つまりメソッドだけそのクラスにおいといて
実装を別のクラスで出来るからプログラムが
汎用的になるってことかな?
違う気がする・・
インスタンス化させたくないクラスおくことの
意味がいまいち解らない・・

>>365
このfaqまじでいい!
ありがとです。
0372デフォルトの名無しさんNGNG
「どんな抜け方をしても絶対実行される」ときに使うのがfinally
だからな。Cとかだとこれがないん、でロックしたまま忘れてリター
ンしちゃったりlongjumpが使いにくかったりする。
0373デフォルトの名無しさんNGNG
テストの点数を順位付けする30行くらいの
すごい簡単なプログラムを組んで見たんだけど
なんかきたないものになっちゃって、
ここにいる上級者の人達はどれくらいスマートに
書けるのか手本見せてもらってもいい?
0374デフォルトの名無しさんNGNG
>>373
言語不問でやった方がどろどろしておもしろそう。
スレ立てて>>1に仕様書いてみんなでやればいいじゃん。
0375デフォルトの名無しさんNGNG
スレ立てたらたたかれるだけだと思うが。
0376デフォルトの名無しさんNGNG
>>374 ソートってこと?
awkとsortコマンド組み合わせると1〜2行で書ける気がする。
0377デフォルトの名無しさんNGNG
ソースのっけたら誰か採点してくれる?
>>376
forしか使ってない。。。

上級者が俺の同じ出力を出すのに
何行くらいで出来るのか見てみたい
0378デフォルトの名無しさんNGNG
>>373
BASICでいいなら100行以内に収めて魅せるぜ?
0379デフォルトの名無しさんNGNG
とりあえず、データの形式だしてみ。
0380デフォルトの名無しさんNGNG
66,56,78,55,88,90,56,76,73,58の十人の点数(前から学籍番号1〜10)から
学籍番号|1 2 3 4 5 6 7 8 9 10
--------------------------------------------
点数   |66 56 78 55 88 90 56 76 73 58
順位    | 6 8 3 10 2 1 8 4 5 7
このように出力させるプログラム。
ちなみにおれは}をちゃんと1つに付き1つ改行して
31行だった。forだけで20行切れるつわものはいますか?
0381デフォルトの名無しさんNGNG
あれ?表示おかしくなっちった。とりあえず
public class Juni{
public static void main(String args[]){
int array[]=new int[9];
int array2[]={66,56,78,55,88,90,56,76,73,58};
System.out.print("学籍番号 |");
for(int j=1;j<=10;j++){
System.out.print(j+" ");
}
System.out.println(" ");
System.out.print("------------------------------------------------");
System.out.println(" ");
System.out.print("点数   |");
for(int k=0;k<10;k++){
System.out.print(array2[k]+" ");
}
System.out.println(" ");
System.out.print("順位   |");
int count=1;
for(int s=0;s<array2.length;s++){
for(int i=0;i<array2.length;i++){
if(array2[s]<array2[i])
count++;
}
if(count==10)
System.out.print(count+" ");
else
System.out.print(count+" ");
count=1;
}
}
}
ちなみにJava歴1週間です。だれか一番きれいに書けるか、
そしてその人はJava歴何年か教えてちょーだい。
長い分になってすまん
0382デフォルトの名無しさんNGNG
ここを再利用するとか。

csvからhtml表生成最強言語は?
http://pc.2ch.net/test/read.cgi/tech/1021596367/
0383デフォルトの名無しさんNGNG
public class Juni{
public static void main(String args[]){
int array[]=new int[9];
int array2[]={66,56,78,55,88,90,56,76,73,58};
System.out.print("学籍番号 |");
for(int j=1;j<=10;j++)
System.out.println(j+" ");
System.out.println("------------------------------------------------ ");
System.out.print("点数   |");
for(int k=0;k<10;k++)
System.out.println(array2[k]+" ");
System.out.print("順位   |");
int count=1;
for(int s=0;s<array2.length;s++){
for(int i=0;i<array2.length;i++){
if(array2[s]<array2[i])
count++;
}
System.out.print(count+" ");
count=1;
}
}
}
0384デフォルトの名無しさんNGNG
なるほど。forには{いらないんだ。
始めて知った。w参考になったよ>>383
23行。おれほんと無駄の多い人間だったんだな。

なんかこれとまったく違う書き方で
あっと言わせる書き方できるひといないっすか?
sort?とか使って。
0385デフォルトの名無しさんNGNG
public class Juni{public static void main(String args[]){int array[]=new int[9];int array2[]={66,56,78,55,88,90,56,76,73,58};
System.out.print("学籍番号 |");for(int j=1;j<=10;j++)System.out.println(j+"");System.out.println("------------------------------------------------ ");
System.out.print("点数   |");for(int k=0;k<10;k++)System.out.println(array2[k]+" ");System.out.print("順位   |");int count=1;for(int s=0;s<array2.length;s++){
for(int i=0;i<array2.length;i++){if(array2[s]<array2[i])count++;}System.out.print(count+" ");count=1;}}}
0386デフォルトの名無しさんNGNG
if(count==10)
の部分がないとたぶん微妙にずれるぞ。
0387デフォルトの名無しさんNGNG
>>386
あれ?幅違ってたの?あれ。
じゃ\tでごまかす。
0388デフォルトの名無しさんNGNG
public class Test {
 public static void main(String[] args) {
  System.out.println("学籍番号| 1 2 3 4 5 6 7 8 9 10");
  System.out.println("----------------------------------------");
  System.out.println("点数  | 66 56 78 55 88 90 56 76 73 58");
  System.out.println("順位  | 6 8 3 10 2 1 8 4 5 7");
 }
}
データ固定じゃつまらない。
もっと一般的な問題にしようよ。
0389デフォルトの名無しさんNGNG
おお、これは幻の配列指向プログラミングではないか!
0390デフォルトの名無しさんNGNG
>>388
・゚・(ノД`)・゚・。
そんなことしなくても。。
じゃー誰か問題出してくり。簡単なんだけど
工夫したらすごいかっこよくなる奴。
0391デフォルトの名無しさんNGNG
一般的にやろうと思って Student クラス導入したりコンパレータ書いたりしてたら70行超えてしまった。
0392デフォルトの名無しさんNGNG
>>391
見せてほすい。
相当見やすいんだろうな。
0393デフォルトの名無しさんNGNG
C#スレかとオモッタ。
0394デフォルトの名無しさんNGNG
いや、別に点数ソートでも良いんじゃない?

class Data {
 int tensuu;  // 0〜100点
 int gakuseki; // 正の整数
}

class Junni {
 int[] getJunni(final Data[] data) {
  // dataと同じ長さの配列に順位を入れて返す。
 }
}
基準は短さ?
んー、7行スレみたいだな。まあいいや。
0395デフォルトの名無しさんNGNG
class Junni {
 int[] getJunni(final Data[] data) {
  int[] hindo = new int[100], junni = new int[data.length];
  for (int i = 0; i < data.length; i++) {
   hindo[data[i].tensuu]++;
  }
  for (int i = data.length - 1; i > 0; i--) {
   hindo[i - 1] += hindo[i];
  }
  for (int i = data.length - 1; i > 0; i--) {
   junni[i] = hindo[data[i].tensuu];
  }
  return junni;
 }
}
0396デフォルトの名無しさんNGNG
import java.util.*;
class Student { int id; int score; int rank; }
class Rank {
  static void setRank(Student[] studentArr) {
    List studentList = Arrays.asList(studentArr);
    MyComparator comparator = new MyComparator();
    comparator.sortBy = "score";
    Collections.sort(studentList, comparator);
    Collections.reverse(studentList);
    int oldScore = Integer.MAX_VALUE, rank = 1, oldRank = 1;
    for (Iterator i=studentList.iterator(); i.hasNext(); rank++) {
      Student s = (Student)i.next();
      oldRank = s.rank = s.score != oldScore ? rank : oldRank;
      oldScore = s.score;
    }
    comparator.sortBy = "id";
    Collections.sort(studentList, comparator);
  }
  static class MyComparator implements Comparator {
    String sortBy;
    public int compare(Object o1, Object o2) {
      Student s1 = (Student)o1; Student s2 = (Student)o2;
      return sortBy.equals("score")
        ? (s1.score<s2.score ? -1 : (s1.score==s2.score ? 0 : 1))
        : (s1.id<s2.id ? -1 : (s1.id==s2.id ? 0 : 1));
    }
    public boolean equals(Object obj) { return this == obj; }
  }
}
public class Main {
  public static String spc(int cnt, int i) {
    StringBuffer sb = new StringBuffer("" + i);
    while (sb.length() < cnt) sb.insert(0, " ");
    return sb.toString();
  }
  public static void main(String[] argv) {
    int[] scoreArr ={66,56,78,55,88,90,56,76,73,58,100,100};
    Student[] studentArr = new Student[scoreArr.length];
    for (int i=0; i<studentArr.length; i++) {
      studentArr[i] = new Student();
      studentArr[i].id = i+1;
      studentArr[i].score = scoreArr[i];
    }
    Rank.setRank(studentArr);
    String ln = System.getProperty("line.separator");
    System.out.print("学籍番号");
    for (int i=0; i<studentArr.length; i++) System.out.print(spc(3, studentArr[i].id) + " ");
    System.out.print(ln + "点数  ");
    for (int i=0; i<studentArr.length; i++) System.out.print(spc(3, studentArr[i].score) + " ");
    System.out.print(ln + "順位  ");
    for (int i=0; i<studentArr.length; i++) System.out.print(spc(3, studentArr[i].rank) + " ");
    System.out.println("");
  }
}
0397デフォルトの名無しさんNGNG
perl使用
http://pc.2ch.net/test/read.cgi/tech/1021817147/380
0398デフォルトの名無しさんNGNG
やべえ。すげえ
0399デフォルトの名無しさんNGNG
たったいまjavaの本を読み始めたばかりのひよっこです。
さっそく最初のプログラムをじっこうしてみたら

Exception in thread "main" java.lang.NoClassDefError: 〜

みたいのがでてきちゃいました。
mainメソッドがない、みたいな意味かと思うんですけど
どうしたらいいんでしゃうか?
0400デフォルトの名無しさんNGNG
>>399
歯を磨いてオナニーしてから寝る。
0401399NGNG
>>400
オナニーしてからシャワー浴びてもいい?
0402デフォルトの名無しさんNGNG
>>399
たぶん、クラスパスの設定
その段階だと手っ取り早いのはコマンドラインで
set CLASSPATH=
と打って、クラスパスをはずす。
0403デフォルトの名無しさんNGNG
>>401
それだけは教えられない。
0404デフォルトの名無しさんNGNG
set CLASSPATH=.;を追加しなさい
これを知ったときは
初めて、肛門オナニーを覚えた時のようだ
0405399NGNG
>>402
クラスパスって??
0406デフォルトの名無しさんNGNG
>>404
SET CLASSPATH=%CLASSPATH%;.;
の方が良くない?
0407デフォルトの名無しさんNGNG
>>405
Java で使う *.class ファイルを探すディレクトリ/JAR ファイルの事。
実行しようとしたクラスがクラスパス上に無かったため ClassNoDefFound...
となった。
0408399NGNG
>>404,406,407
できました。ありがとうございます。

ところで、これってプログラム実行毎にやらなきゃなんですか?
0409デフォルトの名無しさんNGNG
mainのあるクラス名を打っていない
という罠
0410デフォルトの名無しさんNGNG
java Hoge.class
と.classまで書いちゃったとか。
0411デフォルトの名無しさんNGNG
>>408
オナニーする前に、
http://java-house.jp/ml/archive/j-h-b/021880.html#body
これを120回繰り返して読め。
0412デフォルトの名無しさんNGNG
C言語から、今Javaで仕事するようになった者ですが。

変数にアンダースコア"_"がついてるのは、何か意味があるんですか?
特別な意味がありそうなんだけど、基準が見えません。
職場の先輩に聞いても、はっきりした答えが返ってきませんでした。

_data_、とか変数名の前後にこれをつける理由ちゅうか基準を知りたいです。
よろしくお願いします。
0413デフォルトの名無しさんNGNG
>>412
アンダースコア使うと動きが変わる/属性が変わる等の機能的な
規約とかはない。あるとしたらプロジェクトの命名規約とか
個人的な命名規約とかそんな所。
0414デフォルトの名無しさんNGNG
>>413
機能的に変わることがないのはわかるんですが、規約的にどういう意味があるのかな?
って思うんですよ。

たとえばC言語の標準ライブラリのヘッダファイルだと、アンダースコアが2つ前後に
ついてるのはライブラリ内部処理用っぽい気がするんですけど、本当にそうなのか
確証がなくって。
0415デフォルトの名無しさんNGNG
メンバ変数なんかにつけてんじゃない?
0416デフォルトの名無しさんNGNG
>>414
まぁ C だとそういうのもあるが、Java はアクセススコープがしっかり
しているから "__" とかやんなくても良い。俺はめったに使わない。
0417デフォルトの名無しさんNGNG
Java Coding StandardのNaming Conventions

http://gee.cs.oswego.edu/dl/html/javaCodingStd.html#secName
0418デフォルトの名無しさんNGNG
_value  という表記は、
static 属性のフィールドでしょう、多分。
自分はこれがあるとすごく見通しが良くなる気がするので自発的にやってるが。
0419デフォルトの名無しさんNGNG
クラスフィールドやインスタンスフィールドは、宣言の位置が遠いことが
おおいから、クラスフィールドやインスタンスフィールドである事がすぐ
分かるようにしとくため、ということかと。

インスタンスフィールドにはローカルな命名則つかうくらいならthis
つけとくほうがよいかと思うけど。
クラスフィールドはどうしよう。クラス名.フィールドかな。
0420デフォルトの名無しさんNGNG
this つけたら、this.thisVal みたいになっちゃうんじゃない?

ってそういうことじゃない?
0421デフォルトの名無しさんNGNG
>>420
this.value って意味だと思われ
0422デフォルトの名無しさんNGNG
肛門オナニーってどうよ
0423デフォルトの名無しさんNGNG
>>422=404 ですか?

とか言ってみる。
0424デフォルトの名無しさんNGNG
>>422
肛門から射精します
0425デフォルトの名無しさんNGNG
Writing Robust Java Code(日本語訳)
http://www.alles.or.jp/~torutk/oojava/codingStandard/index.html
0426デフォルトの名無しさんNGNG
プログラムが実行される
順番を教えてくれ
0427デフォルトの名無しさんNGNG
>>426
static public void main
0428デフォルトの名無しさんNGNG
NT認証を行うためのクラスってありますか?
0429デフォルトの名無しさんNGNG
コマンドラインから適当に入力した文字で特定文字だけ表示させる方法を教えてください。
0430デフォルトの名無しさんNGNG
>>429
いや、勝手にフィルタリングすればよかろう。
0431デフォルトの名無しさんNGNG
初心者ってプログラムが下手なだけならわかるんだけど
なぜ皆そろいもそろって日本語が下手なんだろう?
0432デフォルトの名無しさんNGNG
>>431
日本語出来る奴はプログラミング言語なんてあっさり覚えますから。
才能が無くても普通の人は本を読んだり試行錯誤したりしながら大きくなる。
少なくともこんな犯罪者まで出る掲示板には来ない。
0433429NGNG
>>430
フィルタリングですね。検索して調べてみます。ありがとうございます。
>>431
ごめんなさい。
やりたいことを的確に表現できないんで曖昧な書き込みしかできませんでした。
0434デフォルトの名無しさんNGNG
自分のプロセスが使ってるメモリ使用量ってわかるんでしょうか?
VMのメモリ使用量が分かればいいと思うんですが・・。
外部のそういうツールを使わないと無理でしょうか?
0435429NGNG
やりたいのは

「こんにちわ/ありがとう/ごめんなさい」とコマンドラインから入力して
ありがとう だけ表示させる方法です。

これフィルタリング使えばできそうですか?
0436デフォルトの名無しさんNGNG
StringTokenizer(スペル間違ってそうだが)使えばできるんでない?
0437新車NGNG
ファイルから読み出して行数を引数で指定して戻り値をStringで
受け取るようなメソッドって存在しないんですか?
while分を使って文字ごとにreadしていくしかないんですか?
0438デフォルトの名無しさんNGNG
>>437
それしかないです。
0439デフォルトの名無しさんNGNG
ねえよ。
0440デフォルトの名無しさんNGNG
かぶった。ごめんちょ
0441デフォルトの名無しさんNGNG
>>435
入力する文字列は毎回同じなのか違うのか。
出力を選ぶ条件は何なのだ。

何を入力しても「ありがとう」と表示するプログラムでも良いのか?
0442デフォルトの名無しさんNGNG
>>435
ちゃんと正確に伝わるように書かないと、>>441みたいに突っ込まれちゃうよ(w
0443429NGNG
>>441
入力文字列は毎回違うようにしたいです。
出力を選ぶ条件は、途中で「出力したい番号を選んでください」みたいに
表示させて2を選ぶと「ありがとう」が表示されるようにしたいです。
0444デフォルトの名無しさんNGNG
>>443
ええと、いままでは1行にまとまった文字列の途中から、一部を
抜き出すんだと皆 思い込んでいたんだが、そうじゃなくて、

「1. こんにちは
 2. ありがとう
 3. さようなら
 番号は?」

とか表示して、「2」と入れたら

「ありがとう」

と表示する、とこういう事だったノカ実は?
0445デフォルトの名無しさんNGNG
>>444
もうちょっとやさしく。
相手は「こんにちわ」とか書いてる子供なんだから。

あと、入力の話はどうなった?
0446デフォルトの名無しさんNGNG
あきらめてどっかいっちゃったかな。
0447デフォルトの名無しさんNGNG
import java.io.*;
public class Thankyou {
  public static void main(String[] argv) {
    BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
    String str = null;
    while (true) {
      try {
        str = in.readLine();
      } catch (IOException e) {
        e.printStackTrace();
        break;
      }
      if (str != null && str.equals("こんにちは")) {
        System.out.println(str);
      }
      if (str == null || str.equals("quit")) {
        break;
      }
    }
  }
}
あたしはてっきりこういうことかと。
0448429NGNG
>>444
一行で「こんにちわ/ありがとう/ごめんなさい」をコマンドラインから
入力(文字列の間に/で区切って)後、何個目?と表示して「3」と入れたら

「ごめんなさい」

と表示する感じです。

>>446
頑張っていました・・・
0449デフォルトの名無しさんNGNG
public class KonNichiWa{

 public static void main(String[] args){
  if(args[0].equals("1"))
   System.out.println("こんにちは");
  else if(args[0].equals("2"))
   System.out.println("ありがとう");
  else if(args[0].equals("3"))
   System.out.println("さようなら");
 }
}
0450デフォルトの名無しさんNGNG
>>448
わかった。
1行入力は良いな? BufferedReader#readLineあたりを使う。
String line = reader.readLine();
とか。

次はbeginを0にしといて、
end = line.indexOf('/', begin);
で1文字ずつ'/'の位置を探す。

endが負なら'/'がbegin以後に無いと言うことなので、
line.substring(begin) で文字列が切り出せる。

endが0以上なら、
line.substring(begin, end)で次の'/'の前までを切り出せる。
begin = end + 1; としてこれを繰り返す。
0451429NGNG
>>445
中学の宿題で明日提出期限なんです。
いくら考えてもわかりませんでした。。。
0452デフォルトの名無しさんNGNG
StringTokenizer 使え
0453デフォルトの名無しさんNGNG
StringTokenizer t = new StringTokenizer(line,"/");
0454452,453NGNG
>>429
思いっきり前に出てるじゃんか。
StringTokenizer
0455デフォルトの名無しさんNGNG
もっとがんがん質問せいやー。
真剣な質問ならこたえたるでー。(寝てなければ)
0456デフォルトの名無しさんNGNG
>>429
せっかく436で答えが出てるのになんで、
>いくら考えてもわかりませんでした。。。
なんて答えが返ってくるのかと問い詰めたい。
■ このスレッドは過去ログ倉庫に格納されています