Não consigo colocar nome dentro da String

Olá eu estou com um exercicio para fazer contudo so tem uma solução e n entendo como posso fazer isso pra colocar os nomes ao inves de so ficar null, alem disso precisava transformar isso orientado objeto mas nem sei se é possivel fazer, se alguem poder ajudar eu agradeço.

Ex1) Crie um programa que recebe três nomes quaisquer por meio da linha de
execução do programa, e os imprima na tela da seguinte maneira: o primeiro e o
último nome serão impressos na primeira linha um após o outro, o outro nome
(segundo) será impresso na segunda linha.

    public class Main {
      public static void main(String[] args) {
	  String nomes[] = new String[3];
	  int contador = 0;
	  while(args.length > contador){
		nomes[contador] = args[contador];
		
		contador++;
	  }
	

      System.out.println(nomes[0]+" "+nomes[2]);
      System.out.println(nomes[1]);



      }
    }

Iai Rafael, Blz? Espero que sim.

Seguinte cara, o problema aí é que, você está imprimindo na tela o valor de um índice vazio. O vetor args no método main quando você inicia a iteração sobre ele, ele está vazio!! Tenta conforme abaixo:

public static void main(String[] args) {
	
	args = new String [3];
	
	args[0] = "a";
	args[1] = "b";
	args[2] = "c";
	
	String nomes[] = new String[3];
	int contador = 0;
	while (args.length > contador) {
		nomes[contador] = args[contador];

		contador++;
	}

	System.out.println(nomes[0] + " " + nomes[2]);
	System.out.println(nomes[1]);
}

}

No exemplo acima eu instanciei um vetor de String e passei o valor manualmente, aí sim no momento da iteração ele não estará vazio, e será possivel adicionar no vetor de nomes.

Você pode também passar esses valores via cmd quando estiver executando o BCode da classe.

javac Main.java -> compila a classe Main.java para Main.class
java Main a b c -> executa a classe compilada passando a b c como parâmetros
“Imprime a b c”

OBS: Para executar desse forma, via cmd é necessário ter as variáveis de ambiente configuradas.

Para usar um pouco de orientação a objetos você pode criar uma classe Nome com seus atributos e no while criar instancias dessa classe. E ao invés de trabalhar com as Strings nomes irá utilizar as instancias de uma classe nome com seus atributos encapsulados. O limite é a criatividade.

Abraços e bons estudos.

1 curtida
public class Main {
    public static void main( String[] args ) {
        System.out.println( args[0] + " " + args[2] );
        System.out.println( args[1] );
    }
}

Compile com:

javac Main.java

Execute com:

java Main juca maria jonas

Saída:

juca jonas
maria

Pq vc precisa transformar isso em orientado a objetos? O seu requisito é super simples. Tem professor que quer enfiar OO em absolutamente tudo e, ao invés de ajudar os alunos, acabam criando mais confusão. Já tive alunos -que passaram pela mão de alguns colegas- que chegam em disciplinas minhas criando verdadeiros megazords orientados a objetos (normalmente totalmente equivocados) para resolver problemas simples, que não precisam -de forma alguma- de alguma construção OO.

2 curtidas

Sim blz Israel, obg pela ajuda man, consegui fazer aqui, entender e consegui fazer a orientação objeto tambem, obg man, vlw msm, abraço man

1 curtida

Na boa, a solução que o @Israel_Lima sugeriu não funciona exatamente da forma que o exercício pediu.
Repare que ele está sobrescrevendo o args e colocando valores fixos (“a”, “b” e “c”). Ou seja, qualquer coisa que for passada pela linha de comando será completamente ignorada e o programa sempre imprimirá o “a”, “b” e “c”.

Para aceitar argumentos na linha de comando, basta usar o args diretamente, como sugeriu o @davidbuzatto - talvez incluindo uma verificação para ter certeza que os 3 nomes foram passados:

public static void main(String[] args) {
    if (args.length < 3) {
        System.out.println("Você deve passar pelo menos 3 argumentos");
    } else {
        System.out.println(args[0] + " " + args[2]);
        System.out.println(args[1] );
    }
}

Só isso. Não precisa criar outro array para guardar os nomes (se for só pra imprimir, claro), não precisa nem de “orientação a objeto”, nesse caso é um canhão pra matar mosca…

1 curtida

@hugokotsubo quando eu estou sobrescrevendo o args eu estou apenas exemplificando que o args antes de ser sobreescrito está vazio. Só foi uma forma de exemplificar. No demais eu segui a linha de raciocínio do @Rafael_Figueiredo, para não ficar algo especificamente meu. Quanto a OO eu concordo que é matar uma mosca com um canhão. Mas nem todos educadores pensam assim, várias vezes ouvi, não foi assim q eu pedi, e por mais que venhamos a argumentar não resolve. Mas muito boa a sua observação, isso colabora para o aprendizado.