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.