• 締切済み

java初心者の問題

実行時引数IPアドレスを指定したら、そのHost名を表示するプログラムを作成しなさいという問題何ですけど。 どいうプログラムを組めばよいのでしょうか? split()で試したけど、だめでした。 String s [] = ip.split("."); System.out.print(s.length); でsの長さを問い合わせた結果 s.length = 0 です 何でしょうか?

みんなの回答

noname#33813
noname#33813
回答No.3

>String s [] = args[0].split("."); splitメソッドは正規表現扱いになります。 正規表現でピリオドは特別な意味を持ちますので String s [] = args[0].split("\\."); ←とか String s [] = args[0].split("[.]"); ←とかにしないと正しく分割できません。 >for(int i = 0;i<s.length;i++){ >r[i] = getByte(s[i]); >} getByteメソッドで何をやりたいのかよくわかりません。 ここは独自メソッドは不要で for(int i = 0;i<s.length;i++){ r[i] = new Integer(s[i]).byteValue(); } のような変換で済む話でしょう。 以上の修正で正しく動くことを確認しましたよ。

daihou
質問者

お礼

ありがとうございました。

daihou
質問者

補足

お返事ありがとうございます。 これで正しく動きました。

全文を見る
すると、全ての回答が全文表示されます。
  • fortranxp
  • ベストアンサー率26% (181/684)
回答No.2

OSがWindowsならばIP>Host名とくれば NSLOOKUPではないでしょうか? 例えば import java.io.*; class Nslookup { public static void main(String[] args){ try { Process process=Runtime.getRuntime().exec("cmd /c nslookup www.nifty.com"); InputStream is = process.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); String line; while ((line = br.readLine()) != null) { System.out.println(line); } } catch (IOException e){ System.err.println("エラー"); e.printStackTrace(); } } }

daihou
質問者

補足

お返事ありがとうございます。 OSはWindowsです 実行時引数IPアドレスを指定するので Processで指定しなくても大丈夫みたいです

全文を見る
すると、全ての回答が全文表示されます。
  • PED02744
  • ベストアンサー率40% (157/390)
回答No.1

授業の問題のようなので、ヒントだけ。。。 まず、文字列の分割とか合成とかそういう問題ではありません。 IPアドレスとは何か? また、ホスト名とは何か? というのがわからないとお話になりません。 例として、 IPアドレス:210.80.243.9 のホスト名は、ns10.yahoo.co.jp です。

daihou
質問者

補足

お返事ありがとうございます。 ちなみに自分はこんな感じで組みました。 だけど、正しいけどは得られないのです。 どこが間違ってるでしょうか? public class NetTest01 { public static void main(String[] args) { if(args.length != 1){ System.exit(-1); } String s [] = args[0].split("."); byte r [] = new byte[4]; for(int i = 0;i<s.length;i++){ r[i] = getByte(s[i]); } print(r); } static void print(byte[] b) { InetAddress iad = InetAddress.getByAddress(b); System.out.println("ホストネームは:"+iad.getHostName()); } static byte getByte(String s){ int r = 0; for(int i = 0;i < s.length();i++){ r = 10*r + (int)s.charAt(i); } return (byte)r; } }

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • java初心者です。

    java初心者です。 イクリプスを使って、以下文のようなプログラムを実行しようとしたのですが、何度も「エディターにはメイン型が含まれていません」という画面が出てきて実行してくれません。 分かりやすい解決策をお待ちしています。よろしくおねがいします。 1class Sample1 2{ 3public static void main(String args[]) 4{ 5int num1=2; 6int num2=3; 7int sum =num1+num2 8 9System.out.prtintln("変数num1の値は"+num1+"です。"); 10System.out.prtintln("変数num2の値は"+num2+"です。"); 11System.out.prtintln("num1+num2の値は"+sum+"です。"); 12 13num1= num1+1; 14 15System.out.prtintln("変数num1の値に1をたすと"+num1+"です。"); 16} 17} 以上

  • switch で疑問。java超初心者です。

    まず、 public class P1{   public static void main(String[] args){     int n = 1;       switch(n){         case 0:           System.out.println("あ");           break;         case 1:           System.out.println("い");           break;         case 2:           System.out.println("う");           break;         default:           System.out.println("え");       }   } } は、当然「い」と表示されますよね。 default: をcase 3:にしても、問題なく「い」と表示されました。 そこで、こんな風にしてみました。 public class P3{   public static void main(String[] args){     int n = 1;     String s;       switch(n){         case 0:           s="あ";           break;         case 1:           s="い";           break;         case 2:           s="う";           break;         default:           s="え";       }       System.out.println(s);   } } これは「い」と表示されましたが、 default: をcase 3:にすると、エラーとなってしまいます。なぜでしょう。 ちなみに、エラーの内容は 変数 s は初期化されていない可能性があります。     System.out.print(s);                ^ というものでした。 そこで、 変数 s を初期化してみようと、次のように変数 s の宣言の後に null を代入しました。 String s=null; すると、「い」と表示され、エラーは出ません。 なぜ、このようになるのでしょうか。 String型の変数を使っていて、今まではこのようなエラーは出た事が無かったのですが、 どうやらswitch文の中では、初期化しろ、と出てくるようです。 わかり易い解説をいただければと思います。 これは仕様だということで、この通り受け入れるしかないのでしょうか。 勉強していて、少々腑に落ちないので、質問致しました。 よろしくお願いいたします。

    • ベストアンサー
    • Java
  • JAVA初心者です。

    以下の文法でコンパイルエラーが出ます。 添削をお願いします。 import java.util.Random; public class Test{ public static void main(String[] args){ int n; for (n = 0; n < 200; n++){ int i; for (i = 0; i < 38; i++) { Random rnd = new Random(); int ran = rnd.nextInt(10); System.out.print(ran); System.out.print(" "); for (t = 0; t < 200; t++) } System.out.println(); } } }

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

    import java.util.Scanner; class test6{ static void printArray(int[] a) { for(int i=0;i<a.length;i++) System.out.print(String.format("%1$6s", (a[i]+" "))); System.out.println(); } static void printArray(int[][] a) { for(int[] i:a) { for(int j:i) System.out.print(String.format("%1$6s",(j+"\t"))); System.out.println(); } } public static void main(String[] args) { int[] a = {12,536,-8,7}; int[][] c = {{32,-1,32,45,67}, {535,99999,2}, {2,5,-123,9}}; printArray(a); printArray(c); } } このプログラムを表示するとこのようになるのですが、 12 536 -8 7 32 -1 32 45 67 535 99999 2 2 5 -123 9 これに一工夫加えて見やすくしたいです。 このような形にするのはどのようにすればよいのでしょうか + + | 32 -1 45 67 | | 535 99999 2 | | 2 5 -123 9 | + +

  • VScode Java 文字化け。

    public static void main(String[] args){ if(args.length<3){ System.out.println("引数が足りません"); }else{ System.out.println(args[0]); //1番目の引数 System.out.println(args[1]); //2番目の引数 System.out.println(args[2]); //3番目の引数 } } } C:\Java>javac ArgsTestB.java C:\Java>java ArgsTestB 蠑墓焚縺瑚カウ繧翫∪縺帙s 実行が文字化けします。 何故でしょうか? ご多忙のところ恐れ入ります。 ご回答お待ち申し上げております。 ご回答 Windowsのコマンド・プロンプトのデフォルト・エンコードはShift_JIS系のCP932(Windows-31J)です、UTF-8を使うと文字化けします、Shift_JIS系のCP932(Windows-31J)でセーブして下さい。 VScodeでやっているのですが、CP932(Windows-31J)がエンコードで 見つかりません。 shiftjisでやると文字化けします。 どうしたら文字化けしないでしょうか・・・? ご多忙のところ恐れ入ります。 ご回答お待ち申し上げております。

    • ベストアンサー
    • Java
  • 【Java】複数の引数の数値と文字列の判定

    Javaについてです。 コマンドライン引数を複数渡し、渡ってきた値が数字のみの場合は、数値*数値の文字数を出力し 数字のみでない場合は文字列を逆から1文字ずつ出力する。 数値の判定はtry/catchで行い、catchメソッドには「stringFlg = true;」のみにする。 というプログラムを作りたいのですが、 引数が1つの時は上手くいくのですが、11 2あ あ3 44を渡した場合、 22 あ 2 3 あ 88 と出るはずが、 22 1 1 あ 2 3 あ 4 4 と出てしまいます…。 どうしたら全ての引数を正しく表示出来るのでしょうか?教えて下さい。 現時点のソースコードです。 public class Test { public static void main(String[] args) { boolean stringFlg = false; try { if(StringUtils.isNumeric(args[0])){ for(String arg : args) { int num = Integer.parseInt(arg); System.out.println(num * arg.length()); } } else{ stringFlg = true; } } catch (NumberFormatException e) { stringFlg = true; } if(stringFlg){ for(String val : args) { String[] str = val.split(""); for(int i = str.length-1; i >= 0; i--){ System.out.println(str[i]); } } } } }

    • ベストアンサー
    • Java
  • java初心者です。どうかよろしくお願いします。

    最初に最大公約数を求めるクラスを定義して、それを継承して最小公倍数を求めるプログラムを作ったのですがコンパイルはできても実行するとうまく作動しません。 理想の実行例は以下の通りです。 1st ? 12 2nd ? 8 Cookie=4 Late=24 ですが、1st? と 2nd? に数値を入力後に「Exception in thread "main" java.lang.ArithmeticException: / by zero」というエラーがどうしても出てきます。 なにが原因なのかさっぱり分からなくなり完全に詰まってしまいました・・・。 どなたか解る方がいらっしゃいましたら、どうか助けて下さい。 書いたソースコードは以下の通りです。 import java.io.*; class Cookie{ private int aa, bb; Cookie(int x, int y){ aa = x; bb = y; } public int cookie(){ int a = aa, b = bb; int r; while(b > 0){ r = a%b; a = b; b = r; } return a; } } class ChocoLate extends Cookie{ private int i,r; ChocoLate(int x, int y){ super(x,y); i = (x * y) /r; } public int late(){ return i; } } class sample{ public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.print("1st?"); String str1 = br.readLine(); System.out.print("2nd?"); String str2 = br.readLine(); int a = Integer.parseInt(str1); int b = Integer.parseInt(str2); ChocoLate lg = new ChocoLate(a,b); System.out.println("Cookie=" + lg.cookie()); System.out.println("Late=" + lg.late()); } }

    • ベストアンサー
    • Java
  • javaです

    最近javaの勉強を始めたのですが、分からない問題があります。 英小文字 'a'~'z'を表示するプログラムなのですが class AlphaClass { public static void main(String args[]) { for( int i = 0; i < 26; i++ ) System.out.print(""); } } このSystem.out.printの後に何が入るのか全くわかりません。。。 この問題がわかる方回答よろしくお願い致します。

  • Java問題 できればソースコードを教えて下さい。

    import java.io.*; public class K3 { /** * @param args */ public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); double[] data = new double[5]; System.out.println("5個の性のデータを入力して下さい"); int i = 0; do{ System.out.print("data{" + i + "}="); String str = br.readLine(); data[i] = Double.parseDouble(str); i++; }while(i<data.length && data[i-1] >=0); System.out.println("入力された結果を表示します"); i=0; while(i<data.length && data[i] >=0); System.out.println("data[" + i + "]: + data[i]"); i++; } } double型のデータを5個保存できる配列を準備し,do-while文を用いてデータの入力を行い,while文を用いて出力を行うプログラムを作成しなさい. ただし,入力するデータは正の数のみとし,入力が負の数だった場合は,データが5個より少なくても,入力・出力を停止することとしなさい.(whileの条件で判定し,if文等は設置しなくてよい.) そして,最後に,全データの合計値と平均値を出力しなさい お願いします

  • javaについて

    以下のプログラムで[\\D]+はどういう働きをしているのか分からないので教えていただけますでしょうか。 実行結果は 1990 と表示されます。 よろしくお願いいたします。 public class split{ public static void main (String[]args){ String s = "明日は1990年です。"; String [] str = s.split("[\\D]+"); for( String st: str ){ if( !st.equals("") ){ System.out.println( st ); } } } }

    • ベストアンサー
    • Java
飲食店での初バイトについて
このQ&Aのポイント
  • 飲食店での初バイトについて、不安と辛さを感じています
  • 飲食店での初バイトは難しく、肉体的・精神的にも厳しい
  • 飲食店での仕事は臨機応変さが求められ、家事との両立が難しい
回答を見る

専門家に質問してみよう