Sistema operacional como parametro

Ola, sou nova na area de programacao, gostaria de uma ajuda neste exercicio, please :slight_smile:

A classe RedesController.java deve ter 2 métodos.
O primeiro, chamado ip, que recebe o nome do Sistema Operacional como parâmetro e, de acordo com o S.O., faz a chamada de configuração de IP e filtra a saída do processo, retornando um String com o nome do Adaptador Ethernet e o IPv4 apenas (Não importa o número de adaptadores ethernet, devem aparecer todos). Os adaptadores que não tiverem IPv4 não devem ser mostrados.
O segundo, chamado ping, que recebe o nome do Sistema Operacional como parâmetro e, de acordo com o S.O., faz a chamada de ping com 10 iterações, filtra a saída, pegando apenas o tempo e dá a saída, em ms, do tempo médio do ping.

Você quer ajuda em relação a que exatamente?

Como posso pegar o IP da maquina usando o sistema operacional como paramentro e a partir disso mostrar os adaptadores Ethernet e Ipv4, usando contains ou split ou trim do java. Nao sei como estruturar a logica

Enumeration nis = null;
try {
	nis = NetworkInterface.getNetworkInterfaces();
} catch (SocketException e) {
	e.printStackTrace();
}
while (nis.hasMoreElements()) {  
	NetworkInterface ni = (NetworkInterface) nis.nextElement();  
	Enumeration ias = ni.getInetAddresses();
	while (ias.hasMoreElements()) {  
		InetAddress ia = (InetAddress) ias.nextElement();
		if (!ni.getName().equals("lo"))
			System.out.println(ia.getHostAddress());   
	}  
}

Começa por isso ai… Tenta entender o que foi executado, e depois traga perguntas mais específicas porque realmente está meio difícil desembolar sua necessidade, fora que chegar aqui no GUJ e dizer: “Quero um programa que replique a inteligencia humana” é um trabalho completo e não uma dúvida.

O trabalho pede que você execute processos do próprio sistema operacional para obter as informações?
É por isso que precisa do nome do sistema operacional como parâmetro?

Acho que ela precisa desenvolver um sistema que pegue essas informações como, informação do SO utilizado e o IP da máquina…

Não é o que o enunciado dela diz:

A classe RedesController.java deve ter 2 métodos.

O primeiro, chamado ip, que recebe o nome do Sistema Operacional como parâmetro e, de acordo com o S.O., faz a chamada de configuração de IP e filtra a saída do processo, retornando um String com o nome do Adaptador Ethernet e o IPv4 apenas (Não importa o número de adaptadores ethernet, devem aparecer todos). Os adaptadores que não tiverem IPv4 não devem ser mostrados.

O segundo, chamado ping, que recebe o nome do Sistema Operacional como parâmetro e, de acordo com o S.O., faz a chamada de ping com 10 iterações, filtra a saída, pegando apenas o tempo e dá a saída, em ms, do tempo médio do ping.

Aqui já tem um esqueleto para você começar:

/**
 * A classe RedesController.java deve ter 2 métodos.
 * 
 * O primeiro, chamado ip, que recebe o nome do Sistema Operacional como parâmetro e, de acordo com o S.O., faz a chamada de configuração de IP e filtra a saída do processo, retornando um String com o
 * nome do Adaptador Ethernet e o IPv4 apenas (Não importa o número de adaptadores ethernet, devem aparecer todos). Os adaptadores que não tiverem IPv4 não devem ser mostrados.
 * 
 * O segundo, chamado ping, que recebe o nome do Sistema Operacional como parâmetro e, de acordo com o S.O., faz a chamada de ping com 10 iterações, filtra a saída, pegando apenas o tempo e dá a
 * saída, em ms, do tempo médio do ping
 */
public final class RedesController {

	/**
	 * Recebe o nome do Sistema Operacional como parâmetro e, de acordo com o S.O., faz a chamada de configuração de IP e filtra a saída do processo, retornando um String com o nome do Adaptador
	 * Ethernet e o IPv4 apenas (Não importa o número de adaptadores ethernet, devem aparecer todos). Os adaptadores que não tiverem IPv4 não devem ser mostrados.
	 * 
	 * @param sistema
	 *            o nome do sistema operacional
	 * 
	 */
	public void ip(String sistema) {
		// aqui obtém o ip de acordo com os sistema operacional informado
	}

	/**
	 * Recebe o nome do Sistema Operacional como parâmetro e, de acordo com o S.O., faz a chamada de ping com 10 iterações, filtra a saída, pegando apenas o tempo e dá a saída, em ms, do tempo médio
	 * do ping
	 * 
	 * @param sistema
	 *            o nome do sistema operacional
	 */
	public void ping(String sistema) {
		// aqui faz o ping de acordo com os sistema operacional informado
	}
}

Pelo que meu professor passou: a aplicacao teria primeiro q identificar o sistema operacional

public RedesController(){

	super ();
	
}

 public String osName(){
	 
	 String so = System.getProperty ("os.name");
	 
		return so; 

e partir disso criar um metodo com o SO como parametro para obter o IP da maquina e depois mostrar os adaptadores Ethernet e Ipv4. Minha dificuldade e estruturar o codigo a partir desse ponto. O esqueleto me ajudara a visualizar melhor agora. Obrigada Staroski =)

Acho que a dúvida dela é como ela vai estruturar o código @Suzanaoni?, que seria como usar o sistema operacional como parâmetro para o mostrar o ip da maquina(como ela realmente consegue fazer isso e depois os adaptadores,como fazer isto no código mesmo,chamar função,atributos.@staroski @Paulosilv_123 gradeço a ajuda de todos!

Eu criaria duas interfaces:

interface IpCommand {

	String ip();
}

e

interface PingCommand {

	int ping();
}

Aí criaria implementações distintas como por exemplo:

class WindowsIpCommand implements IpCommand {
    // implementação da classe
}

class WindowsPingCommand implements PingCommand {
    // implementação da classe
}

e

class LinuxIpCommand implements IpCommand {
    // implementação da classe
}

class LinuxPingCommand implements PingCommand {
    // implementação da classe
}

Dessa forma, a classe RedesController ficaria bem mais enxuta, veja:

import java.util.HashMap;
import java.util.Map;

public final class RedesController {

	private static final Map<String, IpCommand>   IP_COMMANDS;
	private static final Map<String, PingCommand> PING_COMMANDS;

	static {
		IP_COMMANDS   = new HashMap<>();
		PING_COMMANDS = new HashMap<>();

		String sistema = "windows";
		IP_COMMANDS.put(sistema,   new WindowsIpCommand());
		PING_COMMANDS.put(sistema, new WindowsPingCommand());

		sistema = "linux";
		IP_COMMANDS.put(sistema,   new LinuxIpCommand());
		PING_COMMANDS.put(sistema, new LinuxPingCommand());
	}

	public void ip(String sistema) {
		IpCommand command = IP_COMMANDS.get(sistema);
		String ip = command.ip();
		System.out.println("IP:   " + ip);
	}

	public void ping(String sistema) {
		PingCommand command = PING_COMMANDS.get(sistema);
		int ping = command.ping();
		System.out.println("PING: " + ping);
	}
}
1 curtida

Agora consegui entender como estruturar o código, estava completamente perdida. Agradeco a ajuda @staroski, @Lucianelffernandes Muito obrigada ^-^

1 curtida