• 締切済み

クラスの使い方が分からない

文字列を返すというクラスbを作りました。 bは引数が1つあって、引数に与えられた文字の手前に"f"を挿入した文字を返します。 結果は"fh"となることを期待しました。 期待通りになるように修正していただけませんか? public class a {  public static void main (String args[]) {   String g = b("h");   System.out.println("Hello World!!");  } } public class b {  b(String c){   d(c);  }  private String d(String c) {   String e = new String("f" + c);   return e;  } }

  • Java
  • 回答数2
  • ありがとう数0

みんなの回答

  • _ranco_
  • ベストアンサー率58% (126/214)
回答No.2

クラスと、そのクラスのオブジェクトと、そのオブジェクトのメソッドの、正しい使い方を勉強してください。コンストラクタは、値を返せません。 ------------------------------------------- /* save and compile as a.java */ public class a {  public static void main (String args[]) {   b Myb = new b();   String g = Myb.d("h");   System.out.println(g);   System.out.println("Hello World!!");  } } class b {  public String d(String c) {   String e = new String("f" + c);   return e;  } } --------------------------------------------

noname#119918
noname#119918
回答No.1

文法に誤りがあります。 この記述ではそもそもコンパイルが通らないと思いますが。 コンストラクタは返り値を持たないので このような記述はできません。 与えられた文字列の前に"f"を挿入した文字列を返す関数を持つクラス、 ならば下記のようにコーディングできます。 public class a { public static void main(String [] args) { b g = new b("h"); System.out.println(g.result()); } } class b { private String s; public b(String c) { s = "f" + c; } public String result() { return s; } }

関連するQ&A

  • 静的メンバ、ネストクラス、enumのアクセス

    下記のコードを試した所、(1)(4)は無事動作しますが、 (2)と(3)はコンパイルエラーになってしまいます。 初め、静的メンバの場合はnullでも動作する事にすごい驚いたんですが、 どこまでなら問題なく動作するかのラインがわからなくてこまっています。もしよろしければアドバイスをよろしくお願いします。 class Test{ static String A="A"; static class B{ static String val = "B"; } enum C{A,B,C} } enum D{A,B,C} class Sta{ public static void main(String[] args){ Test y=null; D y2 = null; (1)System.out.println(y.A); (2)System.out.println(y.B.val); (3)System.out.println(y.C.A); (4)System.out.println(y2.C); }}

  • クラスの継承、メソッドのオーバーライド

    ↓の問題が全然わかりません。 問題:サブクラスのsiki2にax2+bx+c=0(b2-4ac>0)とコンストラクタ を定義して、スーパークラスのsiki1にax+b=0とコンストラクタを定義し、解を求めるkaiメソッドを定義する という問題です。途中のプログラムを↓に書きました。 スーパークラス class houteisiki1{ private int kai; private int a; private int b; private int x; //コンストラクタ houteisiki1(int s, int d, int e, int f){ solve=s; a=d; b=e; x=f; } //kaiメソッド kai=(a*x)+b; } サブクラス class houteisiki2 extends houteisiki1{ static int kai(int a, int b, int c, int x){ kai=(a*x*x)+(b*x)+c; if((b*b)+(-4*a*c)>0){ return kai; }else{ println("エラー"); } } } テストクラス class test{ public static void main(string[] args){ ここまで作りましたが、解らなくなりましたので教えてください。 まだ、JAVAを勉強して日が浅いので解りやすく教えてください。

    • ベストアンサー
    • Java
  • 内部クラスのインスタンスを動的に取得したい

    class test {   public test(String str){     try{       Class c = Class.forName("test$TESTSUB" + str);       c.newInstance();  // ココでエラー     }catch(Exception e){       e.printStackTrace();     }   }   public static void main(String[] args){     new test(args[0]);   }   class TESTSUB1 {     public TESTSUB1(){       System.out.println("# " + toString());     }   }   class TESTSUB2 {     public TESTSUB2(){       System.out.println("# " + toString());     }   } } 上記のようなコードにより、内部クラスのインスタンスを 動的に得たいと思っていますが、エラーとなってしまいます。 エラー回避方法、または他にいい方法がありましたら、 ご教示のほどよろしくお願いいたします。

    • ベストアンサー
    • Java
  • 動的に変数をセット後他クラスから参照する場合

    コンストラクタで変数にセットした後 他のクラスでインスタンスを生成することなく セットした変数を参照したいのですが、 staticにすると、他クラスで変数を変更することも できてしまいます。他の方法がありますでしょうか? 変数はprivateにして、getterで取得するという方法も 考えられますが、static finalな変数として扱う方法が あるか、お分かりの方いらっしゃいましたら教えてください。 Javaを初めて1ヶ月なので、見当違いの質問でしたらご指摘ください。 例) Class A{  static final String aaa; A(String paraStr){ aaa = paraStr; } } Class B{ static void main(String[] args){ new A("test"); } } Class C{ void chStr(){ System.out.println(A.aaa); A.aaa = "changeStr" System.out.println(A.aaa); } } 期待する値 test test もしくは、実行時にfinalの値は変更できない等のException 宜しくお願いします。

    • ベストアンサー
    • Java
  • クラス名はどうするのですか?

    package ex7; public class Sample { public final static int VALUE = 100; } package ex7; import static ex7.Sample.VALUE; public class Main { private final static int VALUE = 0; public static void main(String[] args) { System.out.println(VALUE); } } 上記のプログラムのクラス名は何をつければいいですか・・・? 同じくプログラム名は何と付ければいいですか・・・? ご多忙中恐れいります・・・。 ご回答の程宜しくお願い申し上げます。 回答者 これが、素人さんには分かりにくいんですね。 mkdir ex7 で、ex7 というディレクトリを作製して、 その中に、 Sample.java を public class Sample { public final static int VALUE = 100; } で、 Main.java を package ex7; import static ex7.Sample.VALUE; public class Main { private final static int VALUE = 0; public static void main(String[] args) { System.out.println(VALUE); } } で作製して、 ex7 の中から出て、 javac ex7/Sample.java javac ex7/Main.java でコンパイルします。 質問者 度々すいません・・・。 ファイル名は何にすればいいですか・・・? ご回答がなかなか来ません。

    • ベストアンサー
    • Java
  • 文字の表示

    オブジェクトを受け取るメソッド ↓は引数にString型のオブジェクトを指定するプログラムです public class Sample { public static void main(String args[]) { String str = "abcd"; change(str); System.out.println(str); } private static void change(String str) { str = "efgh"; } } 私の中ではefghがでると思っていたんですが・・ これを実行してみると変数strに最初に代入した文字列が表示されるんです! なぜですか? できれば理由を教えてください 回答よろしくお願いします

  • Exceptionクラスの継承について

    Exceptionクラスを継承しているExceptionMがありますが、その中にsuper(message)というものがあります。 これは、スーパークラスのExceptionがmessageという変数を引数で受けることができるメソッドを使用していることは分かりますが、実際何を行っているのでしょうか? そして、この処理によって何を得ているのでしょうか? あと、try{のなかにtry{という変な記述していますが、問題でそうかかれていただけなので気にしないでください。 問題箇所 class ExceptionM extends Exception{ public ExceptionM(String message){ super(message); } } 全ソース class ExceptionSubclassQuestion{ public static void main(String args[]){ a(); } static void a(){ try{ try{ throw new ExceptionM("M"); }catch(ExceptionN e){ System.out.println("lnner catch"); e.printStackTrace(); } }catch(ExceptionM e){ System.out.println("Quter catch"); e.printStackTrace(); } } } class ExceptionM extends Exception{ public ExceptionM(String message){ super(message); } } class ExceptionN extends ExceptionM{ public ExceptionN(String message){ super(message); } }

    • ベストアンサー
    • Java
  • コマンドライン引数

    すいません、java初心者です。 コマンドライン引数として渡されたファイルを16進表示したいのですが、右のテキスト部分の文字のあいうえおなどの日本語部分が出てきこず途中で止まってしまいます・・・ 何が悪いか、改善方法教えてください!! 宜しくお願い致します!!!! import java.io.*; class Lesson1{ static char ch[]= {'0','1','2','3','4','5','6','7','8','9', 'A','B','C','D','E','F' }; //16種類 static int c1,c2; public static void main(String args[]) { System.out.println("Address 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 0123456789ABCDEF"); System.out.println("--------+--------------------------------------------------+------------------"); if(args.length !=1){ System.out.println("ファイル名を指定してください。"); //ファイルがついてない場合。 System.exit(1); } try { //入力ストリームを作成。 FileInputStream fis= new FileInputStream(args[0]); //ファイル読み取り //InputStreamReader in = new InputStreamReader(fis, "SJIS"); BufferedReader br= new BufferedReader(new FileReader(args[0])); // 読込みループ。 int d=0; int c; // 読み込んだものをsに入力。 String str; int n = 0, k = 16; //0~Fまでの数字 String s=""; while( (c = in.read()) != -1) { if( k > 15 ) { System.out.println(" "+s); //右のパーツ s = ""; System.out.printf("%08X: ",n); //Address k = 0; } d++; //バイト数表示 n++; k++; // 整数cを上位4ビットc1、下位4ビットc2に分解。 c1 =c/16; c2 =c%16; System.out.print(" " + ch[c1] + ch[c2]); //真ん中のパーツ。 //System.out.printf(" "+Integer.toHexString(c)); if( (c<= 0x00 || c<= 0x19) ) { //右のパーツ(表示できない場合 s = "."; } else{ //表示できる場合 s =s+(char)c; } } //String s1=String.valueOf(c); //int len =s.length(); System.out.println(""); System.out.println(""); System.out.println("ファイルサイズは"+d+"byteでした。"); // 入力ストリームを閉じる。 in.close(); } catch ( IOException e ) { System.out.println("ファイルの読み込みに失敗しました。"); //ファイル名が正しくない場合。 } } } 実行結果 Address 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 0123456789ABCDEF --------+--------------------------------------------------+------------------ 00000000: 31 32 33 34 35 36 37 38 39 30 61 62 63 64 65 66 1234567890abcdef 00000010: 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 ghijklmnopqrstuv 00000020: 77 78 79 7A 41 42 43 44 45 46 47 48 49 4A 4B 4C wxyzABCDEFGHIJKL 00000030: 4D 4E 4F 50 51 52 53 54 55 56 57 58 59 5AException in thread "main" j ava.lang.ArrayIndexOutOfBoundsException: 772 at Lesson1.main(Lesson1.java:55)

    • ベストアンサー
    • Java
  • javaの問題です。

    現在以下のようにプログラムを書いてみました。 public class Replace { public static void main(String[] args) { String str = args[0]; int num = str.indexOf(args[1]); while (num != -1){ str = ( str.substring(0, num) + args[2] + str.substring(num + args[1].length()) ); num = str.indexOf(args[1]); } System.out.println(str); } } 第一引数に第二引数が含まれていれば、それを第三引数に置換する、というものです。 上記にて第二引数が単体ならば動作するのですが、たとえば 第一引数:ABCBA 第二引数:AB 第三引数:C という風に第二引数を複数にすると、 結果がCCBAと後半のBAが変換されなくなってしまいました。 後半部分もAとBが含まれる、ということで、同じように変換出来るようにしたいのですがどのようにすればよいのでしょうか?;; どうぞよろしくお願いいたします;;

    • ベストアンサー
    • Java
  • クラス名

    JAVAの初心者です。 今実行しているクラスのクラス名を求めたいのですが うまくいかず困っております。 public class Person {   public static void main(String args[]);   {     String classname;     classname = this.class.getClass().getName();     System.out.println(classname);   } } イメージ的にはこんな感じなのかなと思ってやってみたのですが、 どうやら違うみたいです。どうぞご教授よろしくおねがいします。

    • ベストアンサー
    • Java

専門家に質問してみよう